Élimination des codes morts

Introduction

Le fichier JAR source de votre application Java contient probablement un très grand nombre de fichiers sources complètement inutilisé ou inclus pour quelques méthodes seulement. Traduire ce code mort en Objective-C encombrer votre application iOS inutilement et augmenterait le risque de rencontrer des erreurs de traduction, en particulier si l'une de vos bibliothèques Java utilise des fonctionnalités non prises en charge par Traducteur J2ObjC.

ProGuard est un outil Open Source qui vous aide à réduire, obscurcir et mangler le bytecode Java. Éventuellement, grâce à un fichier JAR de bytecode, il peut imprimer un "usage" listant toutes les classes et méthodes inutilisées de votre application. J2ObjC peut utiliser un tel rapport pour ignorer ces classes et méthodes lors de la traduction.

Vous pouvez télécharger ProGuard sur cette page.

Configurer ProGuard

ProGuard accepte un fichier de configuration comme argument de ligne de commande qui spécifie les optimisations qu'il et les rapports à générer. Puisque J2ObjC a uniquement besoin de connaître le code mort, vous devez désactiver toutes les optimisations et journalisation superflue. le fichier transmis à J2ObjC doit se composent uniquement du texte d'en-tête ProGuard et du rapport d'utilisation.

Tout d'abord, assurez-vous que votre application dispose d'un fichier JAR bytecode correspondant au fichier JAR source. Vous pouvez utiliser le fichier de configuration suivant, copié à partir du manuel ProGuard, comme modèle pour générer le résultat attendu par 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 *;
}

Modifiez ce fichier de configuration pour vous assurer que ProGuard n'élimine pas d'éléments superflus. Si votre fichier JAR est une application et pas seulement une bibliothèque, spécifier la méthode main() comme nous l'avons faites ici doivent garder tout ce qui est nécessaire ; vous pouvez examiner le résultat ProGuard pour contrôler l'intégrité.

Exécution de ProGuard

Une fois que vous disposez du fichier JAR du bytecode de votre application et d'un fichier de configuration ProGuard personnalisé (appelé, par exemple, usage.pg), vous pouvez créer un fichier de rapport d'utilisation à l'aide de la commande suivante:

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

Cette opération entraîne la création d'un fichier nommé usage.log qui liste les classes et méthodes inutilisées de votre application.

Exécuter J2ObjC avec élimination du code mort

Maintenant que vous disposez du rapport d'utilisation de ProGuard, vous pouvez activer la phase d'élimination du code mort dans J2ObjC à l'aide de l'indicateur de ligne de commande --dead-code-report <file> Traduction de DeadCodeEliminator phase utilise le rapport d'utilisation pour supprimer le code mort de chaque fichier source avant la traduction en Objectif C.