2013-10-31 27 views

回答

1

的主要原因/困难使用ProGuard时混淆使用反射代码。

例如,当您通过名称实例化一个类,如Web服务和某些xml解析器时,这不起作用。

不允许模糊处理的另一个原因,但可能与此问题无关:
像GPL这样的许可证条件要求最终用户可以用更新后的lib版本替换lib。
这样的lib然后不允许被混淆(proguard有一个sich库jar的选项)

0

Proguard不仅混淆了应用程序,而且优化了它们。虽然优化它将删除未引用的类。

为了防止删除自动售货机中的类,你必须该行添加到您的proguard.cfg

2

这是一个非常好的问题。我们知道为什么某些课程必须禁用混淆功能,但这并不能解答为什么应禁用InAppBillingService的问题。如果您结帐生成InAppBillingService.class,您会意识到没有任何反射电话,也没有任何getClass().getName()电话。这意味着那里不使用反射。 IAB实现直接按名称引用生成的类,这意味着混淆器不会在优化步骤中删除自动售货机。因此,仍然存在“为什么这是必须的?”题。

My app已经使用IAP V3半年以上已经混淆了计费包,并且IAB根本没有任何问题。我看到的唯一潜在问题是Android是否改变了它为aidl接口生成java类的方式。它开始使用反射,然后我需要保持这样的类不被混淆。但是这不太可能发生,因为它也可能会在使用aidl的许多其他应用程序中破坏编码。

+0

它是否与@AlexWien指出的xml反序列化有关?我真的认为谷歌应该提供更多细节。如果最终出现应用内结算运行时错误,最好了解与混淆关联的可能原因。 – l33t

+0

Android AIDL使用'android.os.Bundle'类来进行序列化和反序列化。在混淆代码中使用它是安全的。我知道的唯一与XML相关的问题是在AndroidManifest.xml中注册服务并将其混淆时的情况。在这种情况下,服务的名称也会被混淆,并且系统无法再以旧名称找到它。为什么他们需要混淆真的很奇怪。也许是为了以防万一;) –

+0

偏执狂模式:“也许是因为谷歌间谍引擎想要跟踪所有的帐务类的访问;-)”,parnoia模式关闭。 – AlexWien

相关问题