-ignorewarnings # 抑制所有警告(不推薦生產環境,隱藏真實問題)
-optimizationpasses 5 # 優化迭代次數(默認 1,5 次更彻底但耗時)
-dontusemixedcaseclassnames # 混淆後類名統一小寫(避免 Windows 大小寫不敏感衝突)
-dontskipnonpubliclibraryclasses # 不跳過非公共庫類(默認跳過,開啟可縮小體積但風險增)
-dontskipnonpubliclibraryclassmembers
-verbose # 輸出詳細混淆日誌
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
# 禁用特定優化:算術簡化、字段移除、類合併(防止反射/序列化失效)
-keepattributes *Annotation* # 保留註解(Retrofit、Gson、Room、EventBus 等依賴註解)
# 1. 入口類
-keep public class com.example.MyApplication { *; }
# 2. 四大組件(Activity/Service/Receiver/Provider)+ View + Fragment
-keep public class * extends android.app.Activity { *; }
-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.view.View { *; }
-keep public class * extends androidx.fragment.app.Fragment { *; }
# 3. 反射/序列化/註解處理器涉及類
-keep class * implements java.io.Serializable { *; }
-keep class * implements android.os.Parcelable { *; }
-keepclassmembers class * { @com.google.gson.annotations.SerializedName *; }
# 4. 原生方法
-keepclasseswithmembernames class * { native ; }
# 5. WebView JS 交互
-keepclassmembers class * { @android.webkit.JavascriptInterface ; }
# 6. Enum 特殊方法
-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); }
| 警告類型 | 原因 | 解決 |
|---|---|---|
| can't find referenced class | 第三方庫依賴缺失或版本不匹配 | 補全依賴,或 -dontwarn okhttp3.** 針對性屏蔽 |
| can't find referenced method | 反射調用的方法被混淆/移除 | 添加 -keepclassmembers 保留該類方法 |
| duplicate class | 多模組打包重複 | 檢查依賴樹,exclude group 或 pickFirst |
mapping.txt,配合 retrace.sh 還原崩潰堆疊。-printusage unused.txt 查看被移除代碼,防誤刪。
3. 分模組混淆:Library 模塊 consumerProguardFiles 輸出規則,宿主 App 合併。
Ant 為舊構建系統,**強烈建議遷移至 Gradle**,享受:
- 內建 minifyEnabled true、proguardFiles DSL。
- R8 編譯器(默認啟用),比 ProGuard 更快、更激進優化。
- 依賴管理、產物變體、增量構建完整支援。