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.