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