为什么要禁用ProGuard进行vending.billing?

时间:2013-10-31 19:31:17

标签: android proguard in-app-billing

http://developer.android.com/google/play/billing/billing_best_practices.html

注意:如果使用Proguard对代码进行模糊处理,则必须将以下行添加到Proguard配置文件中:

-keep class com.android.vending.billing.**

问题是:为什么?!

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

例如,当你按名称实例化一个类,比如web服务和一些xml解析器时,这就不再适用了。

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

答案 2 :(得分:0)

Proguard不仅可以混淆应用程序,还可以优化它们。优化它时会删除未引用的类。

要防止删除自动售货的类,您必须将该行添加到proguard.cfg