2013-10-31 26 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

相關問題