Устранение мертвого кода

Введение

Файл исходного кода вашего Java-приложения, вероятно, содержит огромное количество исходных файлов, которые либо совершенно не используются, либо включены только для нескольких методов. Перевод этого мертвого кода в Objective-C приведет к ненужному раздуванию вашего iOS-приложения и увеличению вероятности возникновения ошибок перевода, особенно если одна из ваших библиотек Java использует функции, не поддерживаемые переводчиком J2ObjC.

ProGuard — это инструмент с открытым исходным кодом, который помогает сжимать, запутывать и иным образом искажать байт-код Java. При желании, имея jar-файл с байт-кодом, он может распечатать отчет об использовании со списком всех неиспользуемых классов и методов в вашем приложении. J2ObjC может использовать такой отчет, чтобы пропустить эти классы и методы во время трансляции.

ProGuard можно скачать здесь .

Настройка ПроГарда

ProGuard принимает файл конфигурации в качестве аргумента командной строки, который определяет оптимизацию, которую он должен выполнить, и отчеты, которые он должен создать. Поскольку J2ObjC нужно знать только о мертвом коде, вам следует отключить все оптимизации и постороннее ведение журнала; файл, передаваемый в J2ObjC, должен состоять только из текста заголовка ProGuard и отчета об использовании.

Во-первых, убедитесь, что у вас есть jar-файл байт-кода для вашего приложения, соответствующий исходному jar-файлу. Вы можете использовать следующий файл конфигурации, скопированный из руководства ProGuard , в качестве шаблона для получения вывода, ожидаемого 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 *;
}

Измените этот файл конфигурации, чтобы ProGuard не удалял ничего, чего не следует делать. Если ваш jar является приложением, а не просто библиотекой, то указание метода main() , как мы это сделали здесь, должно сохранить все необходимое; вы можете проверить результирующий вывод ProGuard для проверки работоспособности.

Запуск ProGuard

Если у вас есть jar-файл байт-кода вашего приложения и настроенный файл конфигурации ProGuard (называемый, скажем, usage.pg ), вы можете создать файл отчета об использовании с помощью следующей команды:

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

При этом будет создан файл с именем usage.log , в котором будут перечислены неиспользуемые классы и методы вашего приложения.

Запуск J2ObjC с устранением мертвого кода

Теперь, когда у вас есть отчет об использовании ProGuard, вы можете включить этап устранения мертвого кода в J2ObjC, используя флаг командной строки --dead-code-report <file> . На этапе перевода DeadCodeEliminator отчет об использовании будет использоваться для удаления мертвого кода из каждого исходного файла перед переводом в Objective-C.