Введение
Файл исходного кода вашего 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.