如何为Amazon IAP设置ProGuard?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为Amazon IAP设置ProGuard?相关的知识,希望对你有一定的参考价值。

我正在尝试建立一个集成了Amazon IAP的基本ProGuard。但是,当我尝试导出我的APK时,我收到以下错误:

[2012-06-17 10:59:44 - sc] Proguard returned with error code 1. See console
[2012-06-17 10:59:44 - sc] Unexpected error while performing partial evaluation:
[2012-06-17 10:59:44 - sc]   Class       = [com/amazon/inapp/purchasing/KiwiResponseHandler$PurchaseResponseHandlerRunnable]
[2012-06-17 10:59:44 - sc]   Method      = [run()V]
[2012-06-17 10:59:44 - sc]   Exception   = [java.lang.IllegalArgumentException] (Can't find common super class of [java/lang/String] (with 4 known super classes) and [com/amazon/inapp/purchasing/KiwiPurchaseResponseCommandTask] (with 1 known super classes))
[2012-06-17 10:59:44 - sc] java.lang.IllegalArgumentException: Can't find common super class of [java/lang/String] (with 4 known super classes) and [com/amazon/inapp/purchasing/KiwiPurchaseResponseCommandTask] (with 1 known super classes)
[2012-06-17 10:59:44 - sc]  at proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:344)
[2012-06-17 10:59:44 - sc]  at proguard.evaluation.value.IdentifiedReferenceValue.generalize(IdentifiedReferenceValue.java:65)
[2012-06-17 10:59:44 - sc]  at proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:481)
...

我有默认的ProGuard配置文件,我已经添加了:

 -dontwarn com.amazon.**
 -keep class com.amazon.** {*;}
 -keepattributes *Annotation*

它的线条。有什么建议出了什么问题?

答案

亚马逊的推荐配置有一些可疑的东西。

1)-dontwarn隐藏了一个更深层次的基础问题,其中一些亚马逊特定库不存在,但被引用以便proguard将尝试一些有线优化,这可能导致上述堆栈跟踪。

2)-dontoptimize正在禁用所有优化,这是绝对错误的,因为它很可能只是导致此问题的一个特定优化,并且proguards优化正在从您的应用程序及其库中删除大量已死和未使用的代码,因此它缩小了总dex大小。

我认为修复1)是真正的解决方案。这最终可以通过从设备中提取Amazons系统库并在构建时使它们(作为提供的lib)存在来实现 该应用程序。

对于2)你可以尝试:

-dontwarn com.amazon.**
-keep class com.amazon.** {
    *;
}

-optimizations !code/allocation/variable

这解决了我的问题。

另一答案

根据Amazon's SDK Docs,以下是您应该包括的行:

防止对应用内购买API进行模糊处理

将应用内购买API合并到库中时,您需要指定要“保留”而不是混淆的类。在proguard.cfg文件中的任何位置添加以下行。

-dontwarn com.amazon.**
-keep class com.amazon.** {*;}
-keepattributes *Annotation*

此外,您还需要跳过Proguard的优化步骤。

-dontoptimize

注意:确保删除任何其他处理优化的标志,或任何可能与上述设置冲突的标志。

另一答案

此外,您还需要将优化过程的数量减少到1,或跳过proguard的优化步骤。

- 优化通过1

要么

-dontoptimize

以上是关于如何为Amazon IAP设置ProGuard?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Jackson JSON 处理器设置 PROGUARD?

如何为 IP 地址设置 Amazon S3 策略

如何为 Amazon EC2 实例设置 SSH 访问?

我们如何为 Amazon S3 存储桶中的文件夹设置 CORS

如何为 Android 升级 ProGuard?

如何为Amazon AWS部署设置composer标志--no-dev