為了防止程式碼被反編譯,因此需要加入混淆。混淆也可以通過第三方進行apk混淆,也可以用android中的proguard進行混淆。

混淆步驟:

1、配置混淆檔案,名字可以隨意,在這裡使用proguard-android,格式為txt。

-optimizationpasses 5                                                           # 指定程式碼的壓縮級別
-dontusemixedcaseclassnames # 是否使用大小寫混合
-dontskipnonpubliclibraryclasses # 是否混淆第三方jar
-dontpreverify # 混淆時是否做預校驗
-verbose # 混淆時是否記錄日誌
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆時所採用的演算法 -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 # 保持哪些類不被混淆 -libraryjars libs/gson-2.0.jar # 保持 第三方jar不被混淆 -keepclasseswithmembernames class * { # 保持 native 方法不被混淆
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 * { # 保持列舉 enum 類不被混淆
public static **[] values();
public static ** valueOf(java.lang.String);
} -keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆
public static final android.os.Parcelable$Creator *;
} -keepclassmembers class **.R$* { # 保持R檔案不被混淆
public static <fields>;
}
-keep class com.alipay.android.app.IAliPay{*;} # 保持某個介面或類不被混淆 -keep class com.android.app.view**{*;} # 保持某個包下所有的類不被混淆 -keep class com.android.app.CommonCallback{ # 保持某個類或介面的公有和保護型別的成員和方法不被混淆
public protected <fields>;
public protected <methods>;
} -keep class com.android.app.Platform$*{ # 保持內部類不被混淆
*;
}
#-keep class com.android.app.** implements com.android.app.Platform$ICallback {*;} # 保持內部介面不被混淆 -dontwarn android.support.**

2、引入

在專案的project.properties檔案中加入proguard.config=proguard-android.txt,就是上面寫的混淆檔案。

3、android預設執行環境是debug模式,是不執行程式碼混淆的。因此,必須對專案進行簽名才可以,如果在打包時遇到錯誤,可能是混淆檔案哪裡寫的有問題。

參考

http://blog.csdn.net/lovexjyong/article/details/24652085