因爲Android是使用Java開發的,所以開發者可以使用ProGuard對代碼進行混淆。SDK已經集成了ProGuard工具,開發者可以從SDK目錄下的\tools\proguard目錄中進行查看。
ProGuard是一個免費的Java類文件收縮,優化,混淆和預校驗器。它可以檢測並刪除未使用的類,字段,方法和屬性。它可以優化字節碼,並刪除未使用的指令。它可以將類、字段和方法使用短無意義的名稱進行重命名。最後,預校驗的Java6或針對Java MicroEdition的所述處理後的碼。
下面就和大家分享一下對使用了第三方庫的項目進行混淆的經驗。
ProGuard默認會對第三方庫也進行混淆的,而第三方庫有的已經混淆過了,有的使用了Java反射技術,所以我們在進行代碼混淆的時候要排除這些第三方庫。排除對第三方庫的混淆需要在混淆規則文件(通常是:proguard-project.txt或proguard.cfg或proguard-rules.pro或proguard-rules.txt也可以是其它的文件名只要在配置文件中將含有混淆規則的文件名配置進去就行了)中添加如下規則:
1.如果使用了Gson之類的工具要使JavaBean類即實體類不被混淆。
2.如果使用了自定義控件那麼要保證它們不參與混淆。
3.如果使用了枚舉要保證枚舉不被混淆。
4.對第三方庫中的類不進行混淆
a.混淆時保護引用的第三方jar包
如:-libraryjars libs/baidumapapi_v3_2_0.jar #保護引用的第三方jar包不被混淆
注意:在使用Eclipse+ADT時需要加入-libraryjars libs/...,如果你是使用Android Studio開發的項目則不需要加入libs包中的jar包,這是因爲,通過Android Studio進行混淆代碼時,默認已經將 lib目錄中的 jar 都已經添加到打包腳本中,所以不需要再次手動添加,否則會出現“ java.io.IOException: The same input jar is specified twice” 錯誤。
b.混淆時保護第三方jar包中的類不被混淆
如:-keep class com.baidu.** { *; } #讓ProGuard不要警告找不到com.baidu.**這個包裏面的類的相關引用
-dontwarn com.baidu.** #保持com.baidu.**這個包裏面的所有類和所有方法不被混淆。
附:小編開發中用到的一些混淆規則,大家可以根據需要複製到自己的項目中的混淆規則的文件中即可。
[plain] view plain copy