如何使亚马逊应用内购买 (IAP) 2.0 与 Android R8 配合使用

How to make Amazon In-App Purchasing (IAP) 2.0 work with Android R8

在重大收入损失后过了一段时间才发现 Android R8 code shrinker 阻止了亚马逊应用内购买 (IAP) 2.0 的运行。 Android Studio 现在默认使用 R8。幸运的是,gradle.properties 中的以下内容似乎可以阻止 R8:

android.enableR8=false

我担心将来R8会强制执行,那将是一场灾难。我正在尝试找到一种使它们兼容的方法。 有人发帖 a similar question on Amazon's forum 应该是此类问题最好的地方,但我感觉亚马逊已经停止支持该论坛,因为我最近在那里的两个问题没有收到亚马逊的回复。

我在 R8

使用的 proguard-project.txt 中有以下内容
#amazon
-dontwarn com.amazon.**
-keep class com.amazon.** {*;}
-keepattributes *Annotation*
-optimizations !code/allocation/variable
-optimizationpasses 1

据我了解,R8 忽略了优化过程。我怀疑这是原因。

编辑(2019-05-30) 前面提到的 proguard-project.txt 脚本来自 Amazon's document for In-App Purchasing 该应用的 build.gradle 具有以下内容:

release {
    minifyEnabled true
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
    signingConfig signingConfigs.Release

}

proguard-android.txt 使用 -dontoptimize,所以它根本不应该使用 ProGuard R8 进行优化,无论 [=12= 的数量如何] 指定的。如果您有兴趣,可以在 build/intermediates/proguard-files/ 下查看可用的默认 ProGuard 文件。 proguard-android-optimize.txt 是允许优化的那个。

此时,鉴于 R8 的优化似乎没有启用,我不确定是否有很多解决方法。我建议您使用 Google's Issue Tracker 提交问题,提供尽可能详细的信息以帮助他们重现问题。他们通常对此类问题非常敏感。

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

这对我有用。

现在应该可以与 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:...'
     }
}