標籤:反編譯 代碼混淆 android
參考:
http://www.cnblogs.com/sunzn/archive/2013/03/06/2946952.html
http://www.apkbus.com/android-240707-1-1.html
1、在項目根目錄找到project.properties檔案,將中圈出來的代碼注釋去除,即申明我們的混淆檔案為proguard-project.txt:
2、在項目根目錄找到proguard-project.txt檔案,按需求添加修改以下代碼:
# 指定代碼的壓縮層級-optimizationpasses 5# 不使用大小寫混合-dontusemixedcaseclassnames# 不混淆第三方jar -dontskipnonpubliclibraryclasses# 混淆時不做預校正-dontpreverify# 混淆時記錄日誌-verbose# 混淆時所採用的演算法-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*# 申明外部jar包不被混淆-libraryjars libs/alipay.jar# 不需要混淆的部分,如系統組件和API的類:-keep public class * extends android.app.Fragment -keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keep public class * extends android.support.v4.**# 預設proguard 會檢查每一個引用是否正確,但是第三方庫裡面往往有些不會用到的類# 沒有正確引用。如果不配置的話,系統就會報錯-dontwarn android.support.**-dontwarn com.alibaba.fastjson.**-dontwarn org.eclipse.persistence.**-dontwarn com.amap.api.**-dontwarn javax.persistence.**# 指定的類成員被保留-keepclassmembers class * extends android.app.Activity {public void *(android.view.View);}
3、上面注釋說的挺詳細的,但重要的是以下幾點:
(1) 這裡申明的jar包只能是本項目中引用的,項目引用的其他工程中的jar包,無需在此混淆檔案中申明:
# 申明外部jar包不被混淆-libraryjars libs/alipay.jar
(2)以下申明需要根據自己項目中引用的jar包去添加,例如我就是先不添加,直接匯出apk檔案,這時在Console中我們可以看到報錯資訊,再逐一添加報錯的類路徑,例如com.amap.api.**就是申明com.amap.api.xxx都不會被混淆:
# 預設proguard 會檢查每一個引用是否正確,但是第三方庫裡面往往有些不會用到的類# 沒有正確引用。如果不配置的話,系統就會報錯-dontwarn android.support.**-dontwarn com.alibaba.fastjson.**-dontwarn org.eclipse.persistence.**-dontwarn com.amap.api.**-dontwarn javax.persistence.**
4、最後,是混淆後反編譯看到的結果,其中的類名、方法名、變數名,都自動混淆成別人看不明白的名稱:
App安全之代碼混淆