不要使用Proguard优化特定的类路径

问题描述:

我尝试在我的android应用程序中实现Amazon In App Purchase。亚马逊documentation需要在proguard规则中指定-dontoptimize。不要使用Proguard优化特定的类路径

-dontoptimize规则是一个全局选项,它将关闭所有的优化,但我想优化其他代码。所以我的问题是如何指定proguard规则只是不优化亚马逊iap代码?

看来,维护规则是不够的。此问题与此SO answer 有关,但我要求一种方法来保留其余代码的优化,同时允许 Amazon IAP正常工作。

您可以限制“不”的过滤器优化: -optimizations代码/分配/可变

为什么亚马逊IAP需要-dontoptimize的原因是一点点棘手。

首先,Amazon IAP documentation要求 -dontwarn com.amazon。**

如果你删除它,你会看到proguard抱怨它无法找到包中某些类的引用: com.amazon.android。 com.amazon.venezia。

因此,它证明,亚马逊应用程序内购买1.0.7.jar有一个外部依赖jar。

现在,这是一个问题。当proguard执行优化任务时。它需要知道所有的依赖库,以便做适当的优化(例如,删除未使用的方法,无用的参数等)。

虽然在这种情况下proguard的不知道外部依赖亚马逊的jar,它会做应用内,购买-1.0.7.jar的一些错误的优化。

这也是为什么亚马逊需要-dontoptimize

这听起来是一个proguard的错误。但不幸的是,即使您更新到最新的proguard(5.0),也存在此问题。