繁体   English   中英

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

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

在收入大幅下降后,过了一段时间才发现Android R8 代码压缩器阻止了亚马逊应用内购买 (IAP) 2.0 的工作。 Android Studio 现在默认使用 R8。 幸运的是,gradle.properties 中的以下内容似乎可以阻止 R8:

android.enableR8=false

我担心将来会强制使用 R8,这将是一场灾难。 我试图找到一种方法使它们兼容。 有人在亚马逊的论坛上发布了一个类似的问题,应该是此类问题的最佳场所,但我感觉亚马逊已经停止支持该论坛,因为我最近在那里提出的两个问题没有得到亚马逊的回应。

我在 R8 使用的 proguard-project.txt 中有以下内容

#amazon
-dontwarn com.amazon.**
-keep class com.amazon.** {*;}
-keepattributes *Annotation*
-optimizations !code/allocation/variable
-optimizationpasses 1

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

Edit(2019-05-30)前面提到的proguard-project.txt脚本来自亚马逊的In-App Purchasing文档, app的build.gradle有以下内容:

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

}

proguard-android.txt使用-dontoptimize ,因此无论指定的-dontoptimize ,它都不应该使用 ProGuardR8 进行-optimizationpasses 如果您有兴趣,可以在build/intermediates/proguard-files/下查看可用的默认 ProGuard 文件。 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:...'
     }
}

构建.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

这对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM