Eliminazione codice errore

Introduzione

Il jar sorgente della tua applicazione Java probabilmente contiene un numero elevato di file sorgente che sono completamente inutilizzati o inclusi solo per alcuni metodi. La traduzione di questo codice non valido in Objective-C esporrà inutilmente la tua applicazione iOS e aumenterà le probabilità di riscontrare errori di traduzione, soprattutto se una delle tue librerie Java utilizza funzionalità non supportate dal traduttore J2ObjC.

ProGuard è uno strumento open source che consente di ridurre, offuscare e manipolare in altro modo il bytecode Java. Facoltativamente, a condizione di un file bytecode, può stampare un report di "utilizzo" che elenca tutte le classi e i metodi non utilizzati nell'applicazione. J2ObjC può usare 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. Poiché J2ObjC deve conoscere solo il codice non attivo, devi disattivare tutte le ottimizzazioni e il logging estraneo; il file passato a J2ObjC dovrebbe contenere solo il testo dell'intestazione ProGuard e il report sull'utilizzo.

Innanzitutto, assicurati di avere un jar bytecode per l'applicazione che corrisponda al jar di origine. Puoi utilizzare il seguente file di configurazione, copiato dal manuale di ProGuard, come modello per produrre l'output previsto da 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 *;
}

Modifica questo file di configurazione per assicurarti che ProGuard non elimini elementi indesiderati. Se il tuo file jar è un'applicazione e non solo una libreria, specificando il metodo main() come abbiamo fatto qui dovresti conservare tutto ciò che è necessario; puoi esaminare l'output risultante da ProGuard come controllo di integrità.

Esecuzione di ProGuard

Una volta che disponi del bytecode dell'applicazione e di un file di configurazione ProGuard personalizzato (chiamato, 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 non utilizzati dell'applicazione.

Esecuzione di J2ObjC con eliminazione del codice non valido

Ora che disponi del report sull'utilizzo di ProGuard, puoi attivare la fase di eliminazione dei codici non recapitabili in J2ObjC utilizzando il flag della riga di comando --dead-code-report <file>. La fase di traduzione DeadCodeEliminator utilizzerà il report sull'utilizzo per rimuovere il codice non valido da ciascun file sorgente prima della traduzione inObjective-C.