Eliminacja martwego kodu

Wprowadzenie

Źródłowy plik jar Twojej aplikacji w Javie zawiera prawdopodobnie ogromną liczbę plików źródłowych, zupełnie nieużywane lub zawarte tylko w niektórych metodach. Przetłumaczenie tego martwego kodu na Objective-C niepotrzebnie powiększy aplikację na iOS i zwiększy prawdopodobieństwo napotkania błędów tłumaczenia, zwłaszcza jeśli jedna z Twoich bibliotek Java korzysta z funkcji nieobsługiwanych przez Tłumacz J2ObjC.

ProGuard to narzędzie typu open source, które pomaga zaciemniać lub zniekształcać kod bajtowy Java. Opcjonalnie, jeśli używasz kontenera z kodami bajtowymi, może wyświetlić „użycie” raport z listą wszystkich nieużywanych klas i metod w Twojej aplikacji. J2ObjC może użyć taki raport, aby pominąć te zajęcia i metody podczas tłumaczenia.

ProGuard można pobrać stąd.

Konfigurowanie ProGuard

ProGuard akceptuje plik konfiguracji jako argument wiersza poleceń, który określa jego optymalizacje jakie kampanie należy generować i jakie raporty ma generować. J2ObjC potrzebuje tylko informacji o martwym kodzie, należy wyłączyć wszystkie optymalizacje i zbędne logowanie; plik przekazywany do J2ObjC powinien składają się tylko z tekstu nagłówka ProGuard i raportu o wykorzystaniu.

Najpierw upewnij się, że masz plik jar z kodem bajtowym dla aplikacji, który odpowiada źródłowemu plikowi jar. Możesz użyć tego pliku konfiguracji skopiowanego z instrukcji ProGuard jako szablonu do utworzenia danych wyjściowych, których oczekuje 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 *;
}

Zmodyfikuj ten plik konfiguracji, aby mieć pewność, że ProGuard nie usunie niczego, co nie powinno. Jeśli Twój jar jest aplikacją, a nie biblioteką, określ metodę main() zgodnie z naszymi powinna zachować wszystko, co jest niezbędne, możesz zapoznać się z wynikami ProGuard.

Bieganie ProGuard

Gdy już przygotujesz plik jar z kodem bajtowym aplikacji i niestandardowy plik konfiguracyjny ProGuard (o nazwie np. usage.pg), możesz utworzyć plik raportu na temat wykorzystania za pomocą tego polecenia:

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

Spowoduje to utworzenie pliku o nazwie usage.log z listą nieużywanych klas i metod aplikacji.

Uruchamianie J2ObjC z eliminacją martwych kodów

Po uzyskaniu raportu o wykorzystaniu ProGuard możesz włączyć etap eliminacji martwych kodów w J2ObjC przy użyciu flagi wiersza poleceń --dead-code-report <file>. Tłumaczenie DeadCodeEliminator będzie korzystać z raportu o wykorzystaniu, aby usunąć martwy kod z każdego pliku źródłowego przed Objective-C.