不要なコードの除去

はじめに

Java アプリケーションのソース JAR には、おそらく 完全に使用されていないか、一部のメソッドにのみ含まれている場合です。このデッドコードを Objective-C に翻訳する iOS アプリが不必要に肥大化して、問題が発生する可能性が 特に Java ライブラリの 1 つで、ライブラリでサポートされない機能が使われている場合に J2ObjC トランスレータ。

ProGuard は、圧縮、結合、 Java バイトコードを難読化します。必要に応じて、バイトコード jar を指定すると、 「usage」アプリケーションで使用されていないクラスとメソッドの一覧を表示するレポートです。J2ObjC は 変換時にこれらのクラスとメソッドをスキップするようにします。

ProGuard はこちらからダウンロードできます。

ProGuard の設定

ProGuard は構成ファイルをコマンドライン引数として受け取り、構成ファイル内で最適化を指定する 実行すべきレポートと生成するレポートを定義します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() メソッドを指定します。 ここで実行すると、必要なすべてのものが保持されます。Chronicle SOAR から生成される出力を サニティ チェックとしての ProGuard。

ProGuard の実行

アプリケーションのバイトコード JAR とカスタマイズされた ProGuard 構成ファイル( usage.pg など)、次のコマンドを使用して使用状況レポート ファイルを作成できます。

java -jar proguard.jar @usage.pg > usage.log

これにより、アプリケーションで使用されていないクラスとメソッドをリストする usage.log というファイルが作成されます。

デッドコードを除去して J2ObjC を実行する

ProGuard の使用状況レポートを入手したので、次の場所で不要なコードの排除フェーズを有効にできます。 コマンドライン フラグ --dead-code-report <file> を使用した J2ObjC。DeadCodeEliminator 変換 フェーズでは使用状況レポートを使用して、変換前に各ソースファイルからデッドコードを削除します。 Objective-C: