Eliminação de código morto

Introdução

O jar de origem do aplicativo Java provavelmente contém um grande número de arquivos de origem que não são usados ou estão incluídos apenas em alguns métodos. Traduzir esse código inativo para Objective-C sobrecarregará desnecessariamente seu aplicativo iOS e aumentará a probabilidade de encontrar erros de tradução, especialmente se uma das bibliotecas Java usar recursos que não são compatíveis com o tradutor J2ObjC.

O ProGuard é uma ferramenta de código aberto que ajuda a reduzir, ofuscar e prejudicar o bytecode Java. Opcionalmente, considerando um jar de bytecode, é possível imprimir um relatório de "uso" listando todas as classes e métodos não utilizados no aplicativo. O J2ObjC pode usar esse relatório para pular essas classes e métodos durante a tradução.

Faça o download do ProGuard aqui.

Como configurar o ProGuard

O ProGuard aceita um arquivo de configuração como argumento de linha de comando que especifica as otimizações necessárias e os relatórios que ele precisa gerar. Como o J2ObjC só precisa saber sobre o código morto, desative todas as otimizações e registros irrelevantes. O arquivo transmitido para o J2ObjC precisa conter apenas o texto do cabeçalho do ProGuard e o relatório de uso.

Primeiro, verifique se você tem um jar de bytecode para o aplicativo que corresponde ao jar de origem. Você pode usar o seguinte arquivo de configuração, copiado do manual do ProGuard (link em inglês), como um modelo para produzir a saída esperada pelo 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 *;
}

Modifique esse arquivo de configuração para garantir que o ProGuard não elimine nada que não deveria. Se o jar for um aplicativo e não apenas uma biblioteca, especificar o método main() como fizemos aqui vai manter tudo o que é necessário. Você pode examinar a saída resultante do ProGuard como uma verificação de integridade.

Como executar o ProGuard

Depois de ter o jar de bytecode do seu aplicativo e um arquivo de configuração personalizado do ProGuard (chamado, por exemplo, usage.pg), crie um arquivo de relatório de uso com o seguinte comando:

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

Isso vai criar um arquivo chamado usage.log que lista as classes e os métodos não usados do aplicativo.

Como executar J2ObjC com eliminação de código morto

Agora que você tem o relatório de uso do ProGuard, é possível ativar a fase de eliminação de código inativo no J2ObjC usando a flag de linha de comando --dead-code-report <file>. A fase de conversão do DeadCodeEliminator vai usar o relatório de uso para remover o código morto de cada arquivo de origem antes da tradução para o Objective-C.