Eliminación del código no entregado

Introducción

Es probable que el archivo jar fuente de tu aplicación de Java contenga una gran cantidad de archivos fuente que no se usan por completo o que se incluyen solo para algunos métodos. La traducción de este código muerto a Objective-C aumentará innecesariamente tu aplicación para iOS y aumentará la probabilidad de encontrar errores de traducción, en especial si una de tus bibliotecas de Java usa funciones que no admite el traductor J2ObjC.

ProGuard es una herramienta de código abierto que te ayuda a reducir, ofuscar y modificar el código de bytes Java. De manera opcional, con un archivo jar de código de bytes, puede imprimir un informe de "uso" que enumere todas las clases y los métodos sin usar en tu aplicación. J2ObjC puede usar ese informe para omitir estas clases y estos métodos durante la traducción.

Aquí puedes descargar ProGuard.

Cómo configurar ProGuard

ProGuard acepta un archivo de configuración como un argumento de línea de comandos que especifica las optimizaciones que debe realizar y los informes que debe generar. Dado que J2ObjC solo necesita conocer el código muerto, debes inhabilitar todas las optimizaciones y los registros irrelevantes. El archivo que se pase a J2ObjC debe incluir solo el texto del encabezado de ProGuard y el informe de uso.

Primero, asegúrate de tener un jar de código de bytes para tu aplicación que corresponda al jar de origen. Puedes usar el siguiente archivo de configuración, copiado del manual de ProGuard, como plantilla para producir el resultado que J2ObjC espera:

-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 este archivo de configuración para asegurarte de que ProGuard no elimine nada que no deba hacerlo. Si tu archivo jar es una aplicación y no solo una biblioteca, especificar el método main() como lo hicimos aquí debería conservar todo lo necesario. Puedes examinar el resultado resultante de ProGuard como una verificación de estado.

Cómo ejecutar ProGuard

Una vez que tengas el archivo jar del código de bytes de tu aplicación y un archivo de configuración de ProGuard personalizado (llamado, por ejemplo, usage.pg), puedes crear un archivo de informe de uso con el siguiente comando:

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

Se creará un archivo llamado usage.log que enumera las clases y los métodos sin usar de tu aplicación.

Ejecuta J2ObjC con eliminación de código muerto

Ahora que tienes el informe de uso de ProGuard, puedes habilitar la fase de eliminación de código muerto en J2ObjC mediante la marca de línea de comandos --dead-code-report <file>. La fase de traducción de DeadCodeEliminator utilizará el informe de uso para quitar el código muerto de cada archivo fuente antes de la traducción a Objective-C.