Dead-Code-Beseitigung

Einführung

Die Quell-JAR-Datei Ihrer Java-Anwendung enthält wahrscheinlich eine große Anzahl von Quelldateien, die entweder vollständig nicht verwendet werden oder nur für einige Methoden enthalten sind. Wenn Sie diesen veralteten Code in Objective-C übersetzen, wird Ihre iOS-Anwendung unnötig aufgebläht und die Wahrscheinlichkeit von Übersetzungsfehlern steigt, insbesondere wenn eine Ihrer Java-Bibliotheken Funktionen verwendet, die vom J2ObjC-Übersetzer nicht unterstützt werden.

ProGuard ist ein Open-Source-Tool, mit dem Sie Java-Bytecode verkleinern, verschleiern und anderweitig mangeln können. Bei einem Bytecode-JAR kann optional ein Nutzungsbericht ausgegeben werden, in dem alle nicht verwendeten Klassen und Methoden in Ihrer Anwendung aufgeführt sind. J2ObjC kann einen solchen Bericht verwenden, um diese Klassen und Methoden bei der Übersetzung zu überspringen.

ProGuard kann hier heruntergeladen werden.

ProGuard konfigurieren

ProGuard akzeptiert eine Konfigurationsdatei als Befehlszeilenargument, das die auszuführenden Optimierungen und die zu erstellenden Berichte angibt. Da J2ObjC nur über veralteten Code Bescheid weiß, sollten Sie alle Optimierungen und irrelevanten Logging deaktivieren. Die an J2ObjC übergebene Datei sollte nur den ProGuard-Kopfzeilentext und den Nutzungsbericht enthalten.

Stellen Sie zuerst sicher, dass Sie eine Bytecode-JAR-Datei für Ihre Anwendung haben, die der Quell-JAR-Datei entspricht. Sie können die folgende aus dem ProGuard-Handbuch kopierte Konfigurationsdatei als Vorlage verwenden, um die von J2ObjC erwartete Ausgabe zu generieren:

-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 *;
}

Ändern Sie diese Konfigurationsdatei so, dass ProGuard keine unerwünschten Fehler beseitigt. Wenn Ihre JAR-Datei eine Anwendung und nicht nur eine Bibliothek ist, sollte die main()-Methode, wie wir hier gemacht haben, alles Notwendige erhalten. Sie können die resultierende Ausgabe von ProGuard als Plausibilitätsprüfung prüfen.

ProGuard ausführen

Sobald Sie die Bytecode-JAR-Datei Ihrer Anwendung und eine benutzerdefinierte ProGuard-Konfigurationsdatei (z. B. usage.pg) haben, können Sie mit dem folgenden Befehl eine Datei mit einem Nutzungsbericht erstellen:

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

Dadurch wird eine Datei mit dem Namen usage.log erstellt, in der die nicht verwendeten Klassen und Methoden Ihrer Anwendung aufgeführt sind.

J2ObjC mit Eliminierung von ungenutztem Code ausführen

Da Sie jetzt den ProGuard-Nutzungsbericht haben, können Sie die Phase der Eliminierung von totem Code in J2ObjC mit dem Befehlszeilen-Flag --dead-code-report <file> aktivieren. Bei der Übersetzungsphase von DeadCodeEliminator wird der Nutzungsbericht verwendet, um vor der Übersetzung in Objective-C toten Code aus jeder Quelldatei zu entfernen.