如何使亚马逊应用内购买 (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:...'
}
}
在重大收入损失后过了一段时间才发现 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:...'
}
}