Eliminazione codice errore

Introduzione

Il jar di origine della tua applicazione Java probabilmente contiene un enorme numero di file sorgente che sono completamente inutilizzati o inclusi solo per alcuni metodi. Traduzione di questo codice obsoleto in Objective-C gonfia inutilmente la tua applicazione iOS e aumenta la probabilità errori di traduzione, soprattutto se una delle librerie Java utilizza funzionalità non supportate traduttore J2ObjC.

ProGuard è uno strumento open source che ti aiuta a ridurre, offuscare e altrimenti manipolare il bytecode Java. Facoltativamente, dato un jar di bytecode, può stampare un "utilizzo" che elenca tutte le classi e i metodi non utilizzati nella tua applicazione. J2ObjC può utilizzare a un report di questo tipo per saltare queste classi e questi metodi durante la traduzione.

ProGuard può essere scaricato qui.

Configurazione di ProGuard

ProGuard accetta un file di configurazione come argomento della riga di comando che specifica le ottimizzazioni che deve eseguire e i report che deve generare. Dal momento che J2ObjC ha bisogno solo di sapere del codice guasto, devi disabilitare tutte le ottimizzazioni e il logging estraneo; il file trasmesso a J2ObjC deve costituite solo dal testo dell'intestazione ProGuard e dal report sull'utilizzo.

Innanzitutto, assicurati di avere un jar di bytecode per la tua applicazione corrispondente al jar di origine. Puoi utilizzare il seguente file di configurazione, copiato dal manuale di ProGuard, come modello per produrre il l'output che J2ObjC prevede:

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

Modifica questo file di configurazione per assicurarti che ProGuard non elimini ciò che non dovrebbe. Se il file jar è un'applicazione e non solo una libreria, devi specificare il metodo main() come abbiamo fatto qui dovrebbe mantenere tutto ciò che è necessario: puoi esaminare l'output risultante ProGuard come controllo dello stato di salute.

Esecuzione di ProGuard

Una volta che hai il jar di bytecode dell'applicazione e un file di configurazione ProGuard personalizzato (denominato ad esempio usage.pg), puoi creare un file del report sull'utilizzo con il seguente comando:

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

Verrà creato un file denominato usage.log che elenca le classi e i metodi inutilizzati dell'applicazione.

Esecuzione di J2ObjC con eliminazione di codice morto

Ora che hai il report sull'utilizzo di ProGuard, puoi abilitare la fase di eliminazione del codice morto J2ObjC utilizzando il flag della riga di comando --dead-code-report <file>. La traduzione DeadCodeEliminator utilizzerà il report sull'utilizzo per rimuovere il codice non recapitabile da ciascun file sorgente prima della traduzione Obiettivo-C.