ProGuard 是 Java 專案常用的代碼壓縮、優化與混淆工具。雖然功能強大,但配置細節決定成敗。本文歸納實戰中易踩的 5 大坑,助你順利完成混淆流程。
非特殊需求下,直接使用最新穩定版。新版修復大量 Bug、優化相容性,能大幅縮短學習曲線、減少離奇報錯。
啟動 proguardgui.jar 時,務必用專案源碼對應的 JDK 版本,而非系統默認 JVM。版本不一致會導致類版本識別錯誤、混淆失敗。
GUI 載入的默認 libraryjar 包含 rt.jar,其版本必須與運行 ProGuard 的 JVM 版本完全一致。否則會出現類格式版本不匹配錯誤。
在 1.4 的 JVM 中運行 ProGuard 時,優化選項卡裡絕對不要勾選 "Keep Enumerations"。該選項會在配置文件生成 java.lang.Enum 類引用,但 Enum 類僅存在於 JDK 1.5+,導致報錯:
[proguard] Note: the configuration refers to the unknown class 'java.lang.Enum'
[proguard] Note: there were 1 references to unknown classes.
典型 Ant 任務定義:
<target name="proguard" depends="init">
<taskdef resource="proguard/ant/task.properties"
classpath="${lib.dir}/proguard/proguard.jar" />
<proguard configuration="${src.dir}/config.pro" />
</target>
task.properties 位於 proguard.jar 內,保持默認即可。ProGuard 核心難點在於「環境一致性」與「保留規則完整性」。鎖定 JDK 版本、用 GUI 產出基線配置、針對專案特性補充 -keep 規則,是穩妥混淆的三板斧。