Android代碼混淆:
混淆就是將類中的變量名,方法名,類名修改爲A、B、C之類無意義的名稱,增加反編譯時的閱讀難度。
首先在project.properties中將
# proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
前面的#取消,然後在在proguard-project.txt中編寫混淆方式。
-optimizationpasses 5
-dontusemixedcaseclassnames 【混淆時不會產生形形色色的類名 】
-dontskipnonpubliclibraryclasses 【指定不去忽略非公共的庫類。 】
-dontpreverify【不預校驗】
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*【優化】
#保留行號,這樣顯示錯誤時就不會顯示Unknown Source
-keepattributes SourceFile,LineNumberTable
-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 com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
這些是基本的混淆,對android四大組件不進行混淆,枚舉不進行混淆。
如果項目中有其他第三方JAR包,必須進行特殊處理。
首先第三方包大部分都有進行混淆,如果進行二次混淆調用時就會出錯。
第三方JAR包不混淆的操作如下:
首先#所有的jar包
-libraryjars libs/alipay_msp.jar 保持不混淆的JAR包
-dontwarn com.alipay.android.app.** 忽略所有的jar包錯誤
-keep class com.alipay.android.app.**{*; } 不混淆jar包類
默認的操作就是上面的三步,但是對於某些項目的包,還要具體問題具體分析
#Android-support-v4的jar類庫,
-keep public class * extends android.support.v4.*
-keep public class * extends android.app.Fragment
#和gson有關的代碼不能進行混淆不然會報錯:比如實體類等等
-keep class com.test.**{*;}
-keepattributes Signature