RetroGuard 是一款經典的 Java 位元碼混淆器,曾內建於 JBuilder 7 企業版中。雖然年代久遠,但其核心原理與操作流程對理解現代混淆工具(如 ProGuard、R8)仍具參考價值。本文系統整理其命令列操作、保留腳本配置、第三方庫處理與 IDE 整合實戰經驗。
RetroGuard 本身為 Java 程式(單一 JAR 檔),執行前需安裝 JDK 並配置環境變數:
PATH:包含 java 執行檔路徑CLASSPATH:加入 RetroGuard.jar 完整路徑(如 D:\retroguard\RetroGuard.jar)未設定 CLASSPATH 時,每次執行需以 -classpath 參數指定路徑。
java RetroGuard [輸入JAR] [輸出JAR] ["保留腳本檔案"] [日誌檔案]
| 參數 | 用途 |
|---|---|
| 輸入 JAR | 待混淆的原始應用程式封裝 |
| 輸出 JAR | 混淆後產出的封裝 |
| 保留腳本 | 指定不可混淆的類別、方法、欄位名稱(RGS 格式) |
| 日誌檔案 | 記錄混淆過程、錯誤資訊與映射對照表 |
執行 java RGgui 啟動圖形介面,可視化選擇輸入 JAR 並勾選需保留的類別/方法/欄位,自動產生腳本檔案。實務上,通常只需保留 MIDlet 主類別(啟動入口)即可。
若專案引用第三方 API(如 Siemens SMTK),需透過 -classpath 引入對應 JAR:
java -classpath c:\siemens\smtk\6688i1_b8\lib\api.jar RetroGuard in.jar out.jar script.txt log.txt
RetroGuard 對合成內部類(編譯器產生的 ClassName$$1.class 格式)處理缺陷,會拋出錯誤。筆者曾修改原始碼跳過此類檔案處理作為暫時規避方案。
JBuilder7安裝路徑/retroguard-v1.1)現代專案建議遷移至 ProGuard(功能更強、維護活躍、支援 Java 8+、Gradle/Maven 原生整合)或 Android 專案專用的 R8。RetroGuard 歷史使命已完成,僅供維護舊版專案參考。