【问题标题】:Do not optimize a specific class path with Proguard不要使用 Proguard 优化特定的类路径
【发布时间】:2014-09-26 14:19:35
【问题描述】:
我尝试在我的 android 应用程序中实现 Amazon In App Purchase。 Amazons documentation 需要在 proguard 规则中指定 -dontoptimize。
-dontoptimize 规则是一个全局选项,它将关闭所有优化,但我确实想优化其他代码。所以我的问题是如何指定proguard规则只优化亚马逊iap代码?
看来-keep 规则是不够的。这个问题与这个SO answer有关
但我要求一种方法来保持对其余代码的优化,同时允许
亚马逊 IAP 工作。
【问题讨论】:
标签:
android
in-app-purchase
proguard
【解决方案1】:
您可以通过过滤器限制“不”优化:
-优化!代码/分配/变量
Amazon IAP 需要 -dontoptimize 的原因有点棘手。
首先,Amazon IAP documentation 需要 -dontwarn com.amazon.**。
如果你删除它,你会看到 proguard 抱怨它在包中找不到对某些类的引用:com.amazon.android. 和 com.amazon.venezia..
所以证明亚马逊in-app-purchasing-1.0.7.jar有外部依赖jar。
现在有一个问题。当 proguard 执行优化任务时。它需要了解所有依赖库才能进行适当的优化(例如删除从未使用过的方法、无用的参数等)。
虽然在这种情况下proguard 不知道外部依赖的amazon jar,但它会对in-app-purchasing-1.0.7.jar 进行一些错误的优化 .
这也是亚马逊需要 -dontoptimize 的原因。
这听起来是一个proguard的错误。但不幸的是,即使您更新到最新的 proguard (5.0),这个问题仍然存在。