簡介
Java 應用程式的來源 jar 檔案可能含有大量的來源檔案, 完全未使用或僅包含幾種方法將這個無效程式碼轉譯為 Objective-C 可能導致 iOS 應用程式過度擴充,增加使用者 翻譯錯誤,尤其是您其中一個 Java 程式庫使用的功能不支援 J2ObjC 翻譯工具。
ProGuard 是一項開放原始碼工具 模糊化或其他會損壞 Java 位元碼。視需要指定位元碼 jar 檔案則可輸出 「usage」此報告會列出應用程式中所有未使用的類別和方法。J2ObjC 可以使用 這類報表,可在翻譯期間略過這些類別和方法。
ProGuard 可至這裡下載。
設定 ProGuard
ProGuard 接受設定檔做為指令列引數,用於指定最佳化作業 應該都能產生哪些報表因為 J2ObjC 只需要知道無效程式碼 應該停用所有最佳化和多餘的記錄。傳遞至 J2ObjC 的檔案 僅包含 ProGuard 標題文字和使用報表。
首先,請確認應用程式具備與來源 jar 相對應的位元碼 jar 檔案。 您可以使用從 ProGuard 手冊複製的以下設定檔做為範本,以便產生 J2ObjC 預期的輸出內容:
-injars app-bin.jar
-libraryjars /lib/rt.jar
-dontoptimize
-dontobfuscate
-dontpreverify
-printusage
-dontnote
-keep public class com.foo.app.Main {
public static void main(java.lang.String[]);
}
-keepclassmembers class * {
static final % *;
static final java.lang.String *;
}
修改這個設定檔,確保 ProGuard 不會排除任何不應刪除的項目。
如果 jar 是應用程式,而非程式庫,請像程式碼一樣指定 main()
方法
這裡應保留所有必要內容您可以查看輸出結果
做為例行檢查的 ProGuard。
執行 ProGuard
取得應用程式的位元碼 jar 以及自訂 ProGuard 設定檔 (稱為
說 usage.pg
),您可以使用下列指令建立用量報告檔案:
java -jar proguard.jar @usage.pg > usage.log
這會建立名為 usage.log
的檔案,並在其中列出應用程式未使用的類別和方法。
執行 J2ObjC 並刪除無效程式碼
取得 ProGuard 用量報表後,現在您可以在
J2ObjC 使用指令列標記 --dead-code-report <file>
。DeadCodeEliminator 轉譯
階段,在翻譯至
Objective-C: