Etap kompilacji linku (etap kompilacji „Połącz plik binarny z bibliotekami” w Xcode) wymaga flag J2ObjC, które różnią się w zależności od tego, jak aplikacja wykorzystuje przetłumaczone klasy Java. Główne flagi są ustawiane przez skrypt wiersza poleceń j2objcc, ale trzeba go podać przy tworzeniu za pomocą Xcode.
Biblioteki SDK
Ta biblioteka jest wymagana przez wdrożenie środowiska JRE J2ObjC. Brak informacji
spowoduje niezdefiniowane błędy symboli o nazwach zaczynających się od _iconv
.
Biblioteka | Flaga linku | Opis |
---|---|---|
iconv | -l Konw. | Używany przez jre_core do kodowania i dekodowania znaków. |
Te biblioteki są używane przez implementację środowiska JRE J2ObjC i mogą wymagać połączenia z aplikacją.
Biblioteka | Flaga linku | Opis |
---|---|---|
zip | -l z | Używany przez java.util.zip. Musisz go podać, jeśli łączysz jre_zip. |
Bezpieczeństwo | – Bezpieczeństwo platformy | Wymagany w przypadku łączenia z serwerem jre_security. |
Ścieżka wyszukiwania biblioteki
Dystrybucja J2ObjC obejmuje kilka bibliotek statycznych; aby można było ich używać, projekt musi tagu łączącego, gdzie można je znaleźć.
Ogólnie ścieżka wyszukiwania biblioteki musi zawierać element _$(j2objcdistribution)/lib, gdzie klucz Zmienna _$(j2objcdistribution) to ścieżka do lokalnej kopii J2ObjC. Jeśli na przykład rozpakował plik archiwum wersji J2ObjC do „/usr/local/”, ścieżka ma postać „/usr/local/j2objc”.
Ważne: nie używaj w projekcie metody _$(j2objcdistribution). zawsze określaj rzeczywista ścieżka, w której zainstalowano J2ObjC.
Jeśli skompilujesz J2ObjC na podstawie jego kodu źródłowego, _$(j2objcdistribution) będzie
„j2objc/dist/” katalogu. Ten katalog nie będzie istnieć, dopóki nie skompilujesz J2ObjC za pomocą make dist
.
Xcode: ścieżki wyszukiwania bibliotek
Zaktualizuj ścieżki wyszukiwania bibliotek w celu aplikacji, dodając _$(j2objcdistribution)/lib (ponownie użyj rzeczywistej ścieżki).
Biblioteki JRE
Te biblioteki implementują klasy zdefiniowane w emulacji środowiska JRE J2ObjC.
Uwaga: biblioteka libjre_core.a
zawiera zajęcia z większości pozostałych podzbiorów.
biblioteki. Zalecanym sposobem zmniejszenia rozmiaru aplikacji jest rozpoczęcie łączenia aplikacji
za pomocą -l jre_core
, a następnie dodaj biblioteki podzbioru, które rozwiązuje problemy z brakującymi symbolami.
Na przykład najczęściej używane klasy java.io
to libjre_core.a
,
dodaj więc bibliotekę libjre_io.a
tylko wtedy, gdy wystąpią nieusunięte błędy symboli
których nazwy zaczynają się od JavaIo
.
Biblioteka | Flaga linku | Opis |
---|---|---|
libjre_core.a | -l jre_core | Minimalny zestaw zajęć wymagane do emulacji środowiska JRE J2ObjC, do których odwołują się wszystkie wygenerowane pliki źródłowe. Jeśli przetłumaczone źródła w Javie odwołują się do obsługi środowiska JRE na potrzeby sieci, kodu XML, SQL itp., a następnie biblioteki dodatkowe (poniżej) muszą zostać połączone. |
libjre_beans.a | -l jre_beans |
Wszystkie zajęcia
z pakietu java.beans . Nie wszystkie klasy fasoli Java są
ponieważ wiele z nich jest używanych tylko przez aplikacje Swing i AWT.
|
libjre_channels.a | -l jre_channels |
Kilka zajęć
z: java.nio.channels i java.nio.channels.spi
przesyłek.
|
libjre_concurrent.a | –l jednocześnie |
Kilka zajęć
od: java.util.concurrent , java.util.concurrent.atomic
i java.util.concurrent.locks pakietów.
|
libjre_icu.a | -l jre_icu |
Kilka zajęć
od android.icu do obsługi stref czasowych (głównie w celu
java.time ).
|
libjre_io.a | -l Jre_io |
Kilka (rzadziej używanych) klas
z pakietu java.io .
|
libjre_net.a | -l jre_net |
Kilka zajęć
w pakiecie java.net . Jednak java.net.URLClassLoader
zajęcia są w jre_security , a javax.net i
javax.net.ssl zajęć jest dostępnych w: jre_ssl .
|
libjre_security.a | -l jre_security |
Większość zajęć
w pakiecie java.security (kilka z nich jest w jre_core ),
oraz zajęć na zajęciach java.security.* ,
Pakiety javax.crypto.* i javax.security.* .
Jeśli to zrobisz, musisz też połączyć platformę zabezpieczeń iOS.
(zobacz Biblioteki SDK)
|
libjre_sql.a | -l jre_sql |
Wszystkie zajęcia
w pakiecie java.sql .
|
libjre_ssl.a | -l jre_ssl |
Wszystkie zajęcia
w pakietach javax.net i javax.net.ssl .
|
libjre_time.a | -l jre_time |
Wszystkie zajęcia
w pakiecie java.time .
|
libjre_util.a | -l jre_util, |
Kilka zajęć
z pakietu java.util , a także
Pakiet java.util.logging . Większość zajęć (java.util )
są jednak w języku jre_core , więc uwzględniaj tę bibliotekę tylko wtedy, gdy
to nienaprawione błędy symboli (JavaUtil* )
(Symbole JavaUtilConcurrent* znajdują się w
jre_concurrent biblioteka).
|
libjre_xml.a | -l jre_xml |
Wszystkie zajęcia
z pakietów związanych z XML, w tym z javax.xml.* ,
org.w3c.dom.* i org.xml.sax.* .
|
libjre_zip.a | -l jre_zip |
Wszystkie zajęcia
z pakietów java.util.zip i java.util.jar .
Jeśli to zrobisz, musisz też połączyć bibliotekę ZIP z pakietem SDK. (zobacz
biblioteki SDK)
|
libjre_emul.a (-l jre_emul)
Biblioteka jre_emul
zawiera wszystkie klasy uwzględnione w emulacji środowiska JRE J2ObjC. Jeśli aplikacja jest
połączone z jre_emul
, nie należy uwzględniać żadnej innej biblioteki jre_* – w przeciwnym razie tag łączący
zgłasza błędy związane z duplikatami symboli. Dzieje się tak, ponieważ jre_emul
obejmuje wszystkie klasy zdefiniowane w tych
z innych bibliotek.
Inne biblioteki J2ObjC
Te biblioteki Java i klasy Android util należą do zbioru J2ObjC w postaci bibliotek statycznych:
Biblioteka | Flaga linku | Opis |
---|---|---|
libguava.a | -l gujawa | Gujawa: podstawowe biblioteki Google dla języka Java |
libjavax_inject.a | -l javax_inject | Wstrzykiwanie zależności JSR-330 z biblioteką adnotacji. |
libjson.a | -l json | Biblioteka wymiany danych JSON. To jest Wersja JSON na Androida, która różni się nieco od innych implementacji. |
libjsr305.a | -l jsr305 | Adnotacje JSR-305 dotyczące oprogramowania w bibliotece wykrywania defektów. |
libjunit.a | -l junit -ObjC | Platforma testowa JUnit. |
libmockito.a | -l Mokito -ObjC | Platforma naśladująca Mockito do testów jednostkowych w Javie. |
libprotobuf_runtime.a | -l protobuf_runtime | Buffer protokołów Google środowisko wykonawcze, zoptymalizowane pod kątem aplikacji J2ObjC. Aplikacje korzystające z protokołów J2ObjC powinny skompilować swoje proto pliki z funkcją j2objc_protoc. |
libandroid_util.a | -l android_util, | Biblioteka `android_util` zawiera niewielki podzbiór klas narzędzi Android API. Nie jest to emulacja środowiska Androida, a tylko sposób udostępniania przydatnych klas, takich jak „android.util.Log”. |
Flaga linku -ObjC
Flaga -ObjC jest często używana przy łączeniu aplikacji na iOS, ale jest wymagana tylko wtedy, gdy
Klasy i kategorie C muszą być ładowane dynamicznie z bibliotek statycznych. Ta flaga powoduje, że wszystkie
klas we wszystkich połączonych bibliotekach statycznych, które mają być uwzględnione w aplikacji, niezależnie od tego, czy są
. Dlatego zalecamy, aby aplikacje, które używają J2ObjC, łączyły się tylko z flagą -ObjC, gdy
klasy nie są wczytywane w czasie działania (jeden z objawów to zgłoszenie wywołania JavaLangClassNotFoundException
).
platformy testowe JUnit i Mockito w dużej mierze polegają na refleksji, dlatego aplikacje testowe, które z nich korzystają, powinny połączenie z parametrem -ObjC.
Alternatywą dla tworzenia linków w całej bibliotece statycznej, która umożliwia dynamiczne ładowanie kilku klas, jest statycznie odwoływać się do tych klas. W Javie można to zrobić w inicjatorze statycznym block; oto przykład z biblioteki J2ObjC Klasa IosSecurityProvider:
// Reference all dynamically loaded classes, so they are linked into apps.
@SuppressWarnings("unused")
private static final Class<?>[] unused = {
IosCertificateFactory.class,
IosMD5MessageDigest.class,
IosRSAKeyFactory.class,
IosRSAKeyPairGenerator.class,
IosRSASignature.class,
IosSecureRandomImpl.class,
IosSHAMessageDigest.class
};