Как заставить Amazon In-App покупок (IAP) 2.0 работать с Android R8
После значительной потери дохода потребовалось некоторое время, чтобы выяснить, что сокращение кода Android R8 препятствует работе Amazon In-App покупок (IAP) 2.0. Android Studio теперь использует R8 по умолчанию. К счастью, следующее в gradle.properties может остановить R8:
android.enableR8=false
Я боюсь, что R8 будет обязательным в будущем, и это будет катастрофа. Я пытаюсь найти способ сделать их совместимыми. Кто-то опубликовал аналогичный вопрос на форуме Amazon, который, как предполагается, является лучшим местом для таких вопросов, но у меня есть ощущение, что Amazon прекратил поддержку форума, потому что мои последние два вопроса там не получили ответа от Amazon.
У меня есть следующее в proguard-project.txt, который используется R8
#amazon
-dontwarn com.amazon.**
-keep class com.amazon.** {*;}
-keepattributes *Annotation*
-optimizations !code/allocation/variable
-optimizationpasses 1
Как я понимаю, R8 игнорирует прохождения оптимизации. Я подозреваю, что это причина.
Редактировать (2019-05-30) Вышеупомянутый скрипт для proguard-project.txt взят из документа Amazon для покупок в приложении. В build.gradle приложения есть следующее:
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
signingConfig signingConfigs.Release
}
1 ответ
proguard-android.txt
использования -dontoptimize
поэтому он не должен оптимизировать вообще с ProGuard или R8, независимо от количества -optimizationpasses
указано. Если вы заинтересованы, вы можете увидеть доступные файлы ProGuard по умолчанию в разделе build/intermediates/proguard-files/
, proguard-android-optimize.txt
это тот, который позволит оптимизацию.
На данный момент, учитывая, что оптимизация R8, кажется, не включена, я не уверен, есть ли много обходного пути. Я бы порекомендовал вам сообщить о проблеме в систему отслеживания проблем Google, предоставив как можно больше подробностей, чтобы помочь им воспроизвести проблему. Они, как правило, довольно отзывчивы на подобные вопросы.
Теперь, чтобы работать с R8, добавьте это в свои основные зависимости build.gradle:
buildscript {
repositories {
maven {
url 'http://storage.googleapis.com/r8-releases/raw'
}
}
dependencies {
classpath 'com.android.tools:r8:1.6.42' //Must be before the Gradle Plugin for Android. - Or any other version
classpath 'com.android.tools.build:gradle:...'
}
}
Build .gradle
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
proguard-rules.pro
-dontwarn com.amazon.**
-keep class com.amazon.** {*;}
-keepattributes *Annotation*
-dontoptimize
gradle.properties
# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false
У меня это работает.