Как заставить 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

У меня это работает.

Другие вопросы по тегам