http://developer.android.com/google/play/billing/billing_best_practices.html为什么要禁用ProGuard进行自动售货?
注:如果您使用Proguard的混淆你的代码,你必须将下列行添加到Proguard的配置文件:
-keep class com.android.vending.billing.**
的问题是:为什么?
http://developer.android.com/google/play/billing/billing_best_practices.html为什么要禁用ProGuard进行自动售货?
注:如果您使用Proguard的混淆你的代码,你必须将下列行添加到Proguard的配置文件:
-keep class com.android.vending.billing.**
的问题是:为什么?
的主要原因/困难使用ProGuard时混淆使用反射代码。
例如,当您通过名称实例化一个类,如Web服务和某些xml解析器时,这不起作用。
不允许模糊处理的另一个原因,但可能与此问题无关:
像GPL这样的许可证条件要求最终用户可以用更新后的lib版本替换lib。
这样的lib然后不允许被混淆(proguard有一个sich库jar的选项)
Proguard不仅混淆了应用程序,而且优化了它们。虽然优化它将删除未引用的类。
为了防止删除自动售货机中的类,你必须该行添加到您的proguard.cfg
这是一个非常好的问题。我们知道为什么某些课程必须禁用混淆功能,但这并不能解答为什么应禁用InAppBillingService
的问题。如果您结帐生成InAppBillingService.class
,您会意识到没有任何反射电话,也没有任何getClass().getName()
电话。这意味着那里不使用反射。 IAB实现直接按名称引用生成的类,这意味着混淆器不会在优化步骤中删除自动售货机。因此,仍然存在“为什么这是必须的?”题。
My app已经使用IAP V3半年以上已经与混淆了计费包,并且IAB根本没有任何问题。我看到的唯一潜在问题是Android是否改变了它为aidl接口生成java类的方式。它开始使用反射,然后我需要保持这样的类不被混淆。但是这不太可能发生,因为它也可能会在使用aidl的许多其他应用程序中破坏编码。
它是否与@AlexWien指出的xml反序列化有关?我真的认为谷歌应该提供更多细节。如果最终出现应用内结算运行时错误,最好了解与混淆关联的可能原因。 – l33t
Android AIDL使用'android.os.Bundle'类来进行序列化和反序列化。在混淆代码中使用它是安全的。我知道的唯一与XML相关的问题是在AndroidManifest.xml中注册服务并将其混淆时的情况。在这种情况下,服务的名称也会被混淆,并且系统无法再以旧名称找到它。为什么他们需要混淆真的很奇怪。也许是为了以防万一;) –
偏执狂模式:“也许是因为谷歌间谍引擎想要跟踪所有的帐务类的访问;-)”,parnoia模式关闭。 – AlexWien