混淆模板:
-optimizationpasses 5 # 指定代碼的壓縮級(jí)別
-dontusemixedcaseclassnames # 是否使用大小寫混合
-dontskipnonpubliclibraryclasses
-dontpreverify # 混淆時(shí)是否做預(yù)校驗(yàn)
-verbose # 混淆時(shí)是否記錄日志
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆時(shí)所采用的算法
-keepattributes *Annotation*,Signature
-dontwarn android.**
#忽略警告
#-ignorewarning
##記錄生成的日志數(shù)據(jù),gradle build時(shí)在本項(xiàng)目根目錄輸出##
#apk 包內(nèi)所有 class 的內(nèi)部結(jié)構(gòu)
-dump class_files.txt
#未混淆的類和成員
-printseeds seeds.txt
#列出從 apk 中刪除的代碼
-printusage unused.txt
#混淆前后的映射
-printmapping mapping.txt
#自寫代碼的混淆
-keep public class * extends android.app.Activity # 保持哪些類不被混淆
-keep public class * extends android.app.Application # 保持哪些類不被混淆
#第三方庫(kù)的混淆
##okhttp3混淆
-keep class okhttp3.** {*;}
-dontwarn okhttp3.**
##okio混淆
-keep class okio.** {*;}
-dontwarn okio.**
##alibaba混淆
-keep class com.alibaba.** {*;}
-dontwarn com.alibaba.**
-keepattributes Exceptions,SourceFile
-renamesourcefileattribute Proguard
-keepattributes SourceFile,LineNumberTable
-repackageclasses
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int d(...);
public static int w(...);
public static int v(...);
public static int i(...);
public static int e(...);
}
# Model類都不混淆
-keep class com.hk.javalearn.model.** { *; }
#
1.混淆原則,自己寫的代碼比較好混淆,第三方庫(kù)如果打包正式版提示如下圖:

混淆第三方庫(kù)出錯(cuò).png
則說明混淆出錯(cuò)了,需要keep住不混淆他們,加入對(duì)應(yīng)的混淆代碼
##okhttp3混淆
-keep class okhttp3.** {*;}
-dontwarn okhttp3.**
2.如果混淆后發(fā)生閃退,找到閃退的位置,哪個(gè)類里面有哪些控件或者第三方引用,對(duì)其進(jìn)行keep,最常見的就是實(shí)體類的混淆錯(cuò)誤,只需要keep住就好,如下
##實(shí)體類混淆
-keep class com.hk.javalearn.model.** { *; }
3.別忘了在app.build打開混淆
minifyEnabled true