2013-08-27 59 views
0

目前,我正在開發小型Android項目來練習Android預設。但是,一旦上市,我想通過ProGuard來混淆/優化APK。但是這個工具重命名類來混淆代碼,所以:Android Proguard和Android框架:有衝突嗎?

  1. 使用類似Android Query的工具編寫代碼是否安全?
  2. 如果它不安全,那麼可以使用Pro Guard安全地使用一些框架示例?
  3. 什麼可以解決這個問題?或者我應該使用古老的Android風格編寫所有內容,並忘記「少寫,多寫」的方法?
  4. 如何識別ProGuard安全的工具?

回答

1

我假設你想使用第三方庫(jar文件)。你可以使用3步法:

  1. 如果第三方jar明確支持Android,它將有一個proguard配置。通常這是你合併到你的proguard-project.txt中的代碼片段。
  2. 如果沒有這種明確的支持,您仍然可以嘗試使用該jar,混淆和測試您的應用程序。如果發生錯誤,請逐漸將類從模糊處理中排除,直到其正常工作。一個常見的問題是庫使用反射來實例化類和調用混淆後中斷的方法。
  3. 從混淆中排除整個庫。這將在任何情況下都有效,並且proguard根本不會觸碰圖書館。 (Android工具鏈仍然會將jar的內容重新打包到您的apk中,這可能會導致問題。)這也會產生最不模糊的結果,應該是您最後的選擇。

在任何情況下,混淆不是一個開關,您只需切換。您需要熟悉涉及學習曲線的proguard配置文件。

+0

如何使用AndroidQuery或Roboguice/AndroidAnnotations等工具? 第一個通過字符串名稱處理元素,第二個則生成子類。 我想第二個對ProGuard混淆的適應性要比第一個更強,但我想要更多的見解。 – 2dvisio

+1

註解通常很好,但反射很可能會導致問題。試想一下,混淆之後,每個類,方法和字段都會有不同的名稱。如果您的圖書館對這些名稱做出任何假設,它將不起作用。 – Michael

+0

下面是AndroidQuery proguard配置的建議:http://blog.androidquery.com/2011/06/android-optimization-with-proper.html。恕我直言,他們採取了非常廣泛的方法(這可能使混淆無用),我會花時間,只排除真正破壞的類和方法。 Proguard知道很多方法讓事情變得更容易,例如您可以保留所有具有公共超類或實現特定接口的類。 – Michael