首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Ant 混淆打包 ProGuard 配置優化與警告消除

     編輯:程式設計綜合問答

核心配置解析

-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

調試技巧

  1. 構建生成 mapping.txt,配合 retrace.sh 還原崩潰堆疊。
  2. 2. 臨時添加 -printusage unused.txt 查看被移除代碼,防誤刪。 3. 分模組混淆:Library 模塊 consumerProguardFiles 輸出規則,宿主 App 合併。

遷移建議

Ant 為舊構建系統,**強烈建議遷移至 Gradle**,享受:
- 內建 minifyEnabled true、proguardFiles DSL。
- R8 編譯器(默認啟用),比 ProGuard 更快、更激進優化。
- 依賴管理、產物變體、增量構建完整支援。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved