Élimination des codes morts

Introduction

Le fichier JAR source de votre application Java contient probablement un grand nombre de fichiers sources qui sont soit complètement inutilisés, soit inclus dans quelques méthodes. La traduction de ce code mort en Goal-C entraîne une surcharge inutile de votre application iOS et augmente le risque de rencontrer des erreurs de traduction, en particulier si l'une de vos bibliothèques Java utilise des fonctionnalités non compatibles avec le traducteur J2ObjC.

ProGuard est un outil Open Source qui vous aide à réduire, obscurcir et mangler le bytecode Java. Un fichier JAR bytecode peut éventuellement afficher un rapport d'"utilisation" listant toutes les classes et méthodes inutilisées dans votre application. J2ObjC peut utiliser ce type de 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 en tant qu'argument de ligne de commande qui spécifie les optimisations qu'il doit effectuer et les rapports qu'il doit générer. Étant donné que J2ObjC a uniquement besoin de connaître le code mort, vous devez désactiver toutes les optimisations et la journalisation superflue. Le fichier transmis à J2ObjC ne doit contenir que le texte d'en-tête ProGuard et le 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 la sortie attendue 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 rien de ce qu'il ne devrait pas faire. Si votre fichier JAR est une application et pas seulement une bibliothèque, la spécification de la méthode main() telle que nous l'avons fait ici devrait conserver tout ce qui est nécessaire. Vous pouvez examiner la sortie obtenue de ProGuard comme une évaluation de l'intégrité.

Exécuter ProGuard

Une fois que vous disposez du fichier bytecode JAR 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 appelé usage.log qui liste les classes et les 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>. La phase de traduction de DeadCodeEliminator utilise le rapport d'utilisation pour supprimer le code mort de chaque fichier source avant la traduction en Objectif-C.