Bağlantı oluşturma adımı (Xcode'un "Link Binary with Libraries" derleme aşaması), uygulamanızın çevrilmiş Java sınıflarını nasıl kullandığına bağlı olarak değişen J2ObjC'ye özel işaretler gerektirir. Temel işaretler, j2objcc komut satırı komut dosyası tarafından ayarlanır ancak Xcode ile derleme sırasında belirtilmesi gerekir.
SDK Kitaplıkları
Bu kitaplık, J2ObjC'nin JRE uygulaması için gereklidir. Bu kitaplığın dahil edilmemesi, _iconv
ile başlayan adlarda tanımlanmamış sembol hatalarına neden olur.
Kitaplık | Bağlantı İşareti | Açıklama |
---|---|---|
ikon | -l ikonu | Karakter kodlama ve kod çözme işlemleri için jre_core tarafından kullanılır. |
Bu kitaplıklar, J2ObjC'nin JRE uygulaması tarafından kullanılır ve uygulamanıza bağlanması gerekebilir.
Kitaplık | Bağlantı İşareti | Açıklama |
---|---|---|
zip | -l z | java.util.zip tarafından kullanılır. jre_zip kodunu bağlıyorsanız bunu eklemeniz gerekir. |
Güvenlik | -çerçeve Güvenliği | jre_security bağlanıyorsa gereklidir. |
Kitaplık Arama Yolu
J2ObjC'nin dağıtımı çeşitli statik kitaplıklar içerir. Bunları kullanmak için projenizin bağlayıcıya bunları nerede bulacağını söylemesi gerekir.
Genel olarak, kitaplık arama yolunun _$(j2objcdistribution)/lib içermesi gerekir. Burada, _$(j2objcdistribution) değişkeni, yerel J2ObjC kopyanızın yoludur. Örneğin, bir J2ObjC sürüm arşivi dosyasını "/usr/local/" konumuna çıkarırsanız bu yol "/usr/local/j2objc" olur.
Önemli: Projenizde _$(j2objcdistribution) kodunu gerçekten kullanmayın; J2ObjC'yi yüklediğiniz gerçek yolu her zaman belirtin.
J2ObjC'yi kaynak kodunun bir kopyasından derlerseniz _$(j2objcdistribution), kopyanızın "j2objc/dist/" dizini olur. Bu dizin, make dist
ile J2ObjC derlenene kadar mevcut olmaz.
Xcode: Kitaplık Arama Yolları
_$(j2objcdistribution)/lib ekleyerek uygulama hedefinin Kitaplık Arama Yolları'nı güncelleyin (yine gerçek yolu kullanın).
JRE Kitaplıkları
Bu kitaplıklar, J2ObjC'nin JRE emülasyonu tarafından tanımlanan sınıfları uygular.
Not: libjre_core.a
kitaplığı, diğer alt küme kitaplıklarının çoğundan sınıflar içerir. Uygulama boyutunu küçültmenin önerilen yolu, uygulamayı -l jre_core
ile bağlamaya başlamak, ardından eksik sembolleri çözen alt küme kitaplıklarını eklemektir.
Örneğin, en sık kullanılan java.io
sınıfları libjre_core.a
alt bölgesindedir. Bu nedenle, libjre_io.a
kitaplığını yalnızca adları JavaIo
ile başlayan çözülmemiş simge hataları varsa dahil edin.
Kitaplık | Bağlantı İşareti | Açıklama |
---|---|---|
libjre_core.a | -l jre_core | Oluşturulan tüm kaynak dosyalar tarafından başvurulan, J2ObjC'nin JRE emülasyonu için gereken minimum sınıf grubu. Çevrilmiş Java kaynaklarınız ağ, XML, SQL vb. için JRE desteğine referans veriyorsa aşağıdaki ek kitaplıkların da (aşağıda) bağlanması gerekir. |
libjre_beans.a | -l jre_beans |
java.beans paketindeki
tüm sınıflar. Java Beans sınıflarının çoğu yalnızca Swing ve AWT uygulamaları tarafından kullanıldığından tüm Java Beans sınıfları dahil edilmez.
|
libjre_channels.a | -l jre_kanalları |
java.nio.channels ve java.nio.channels.spi paketlerinden
çeşitli sınıflar.
|
libjre_concurrent.a | -l jre_concurrent |
java.util.concurrent , java.util.concurrent.atomic ve java.util.concurrent.locks paketlerinden
çeşitli sınıflar.
|
libjre_icu.a | -i jre_icu |
Saat dilimlerini desteklemek için (esas olarak java.time özelliğini etkinleştirmek için) android.icu ile başlayan
çeşitli sınıflar.
|
libjre_io.a | -l_jre_io |
java.io paketinden
birkaç (daha seyrek kullanılan) sınıf.
|
libjre_net.a | -l jre_net |
java.net paketinde
çeşitli sınıflar bulunur. Ancak java.net.URLClassLoader sınıfı jre_security , javax.net ve javax.net.ssl sınıfları ise jre_ssl konumundadır.
|
libjre_security.a | -l jre_security |
java.security paketindeki
çoğu sınıf (birkaçı jre_core ürünündedir) ve java.security.* , javax.crypto.* ve javax.security.* paketlerindeki sınıflar.
Bunu bağlarsanız iOS Güvenlik çerçevesini de bağlamanız gerekir.
(SDK Kitaplıkları'na bakın)
|
libjre_sql.a | -l jre_sql |
java.sql paketindeki
tüm sınıflar.
|
libjre_ssl.a | -l jre_ssl |
javax.net ve javax.net.ssl paketlerindeki
tüm sınıflar.
|
libjre_time.a | -l jre_time |
java.time paketindeki
tüm sınıflar.
|
libjre_util.a | -l jre_util |
java.util paketinden
çeşitli sınıflar ve java.util.logging paketi. Ancak java.util sınıfının çoğu jre_core kategorisindedir. Dolayısıyla bu kitaplığı yalnızca çözülmemiş JavaUtil* sembol hataları varsa ekleyin (JavaUtilConcurrent* simgeleri jre_concurrent kitaplığında bulunuyor).
|
libjre_xml.a | -l jre_xml |
javax.xml.* , org.w3c.dom.* ve org.xml.sax.* dahil olmak üzere XML ile ilgili paketlerdeki
tüm sınıflar.
|
libjre_zip.a | -l jre_zip |
java.util.zip ve java.util.jar paketlerindeki
tüm sınıflar.
Bunu bağlarsanız SDK zip kitaplığını da bağlamanız gerekir. (SDK Kitaplıkları bölümünü inceleyin)
|
libjre_emul.a (-l jre_emul)
jre_emul
kitaplığı, J2ObjC'nin JRE emülasyonuna dahil edilen tüm sınıfları içerir. Bir uygulama jre_emul
ile bağlantılıysa diğer jre_* kitaplıklarının hiçbiri dahil edilmemelidir. Aksi takdirde, bağlayıcı yinelenen simge hataları bildirir. Bunun nedeni, jre_emul
ürününün bu diğer kitaplıklarda tanımlanan tüm sınıfları içermesidir.
Diğer J2ObjC Kitaplıkları
Aşağıdaki Java kitaplıkları ve Android util sınıfları, J2ObjC dağıtımına statik kitaplık olarak dahil edilir:
Kitaplık | Bağlantı İşareti | Açıklama |
---|---|---|
libguava.a | -l guava | Guava: Java için Google Core Kitaplıkları |
libjavax_inject.a | -l javax_inject | JSR-330 bağımlılık ekleme ek açıklama kitaplığı. |
libjson.a | -l json | JSON veri değişim kitaplığı. Bu, JSON'un Android sürümüdür ve diğer uygulamalardan biraz farklıdır. |
libjsr305.a | -l jsr305 | Yazılım hatası algılama kitaplığı için JSR-305 ek açıklamaları. |
libjunit.a | -l junit -ObjC | JUnit test çerçevesi. |
libmockito.a | -I Mockito -ObjC | Java'daki birim testleri için Mockito aldatma çerçevesi. |
libprotobuf_runtime.a | -l protobuf_çalışma zamanı | J2ObjC uygulamaları için optimize edilmiş bir Google Protocol Buffer çalışma zamanı. J2ObjC protobufs kullanan uygulamalar, proto dosyalarını j2objc_protoc ile derlemelidir. |
libandroid_util.a | -l android_util | "android_util" kitaplığı, Android API yardımcı program sınıflarının küçük bir alt kümesini içerir. Bir Android ortamı için emülasyon sağlamak amacıyla değil, "android.util.Log" gibi yararlı sınıfları paylaşmanın bir yoludur. |
-ObjC Bağlantı İşareti
-ObjC işareti, iOS uygulamalarını bağlarken sıkça kullanılır ancak yalnızca Objective C sınıflarının ve kategorilerinin statik kitaplıklardan dinamik olarak yüklenmesi gerektiğinde gereklidir. Bu işaret, bağlantılı tüm statik kitaplıklardaki tüm sınıfların, gerçekten kullanılıp kullanılmadıklarına bakılmaksızın uygulamaya dahil edilmesine neden olur. Bu nedenle, J2ObjC kullanan uygulamaların yalnızca sınıflar çalışma zamanında yüklenemediğinde -ObjC işaretiyle bağlantı vermesi önerilir (semptomlardan biri JavaLangClassNotFoundException
atanmasıdır).
JUnit ve Mockito test çerçeveleri büyük ölçüde yansımalara dayalı olduğundan bunları kullanan test uygulamaları -ObjC ile bağlantı oluşturmalıdır.
Birkaç sınıfın dinamik olarak yüklenebilmesi için bütün bir statik kitaplıkta bağlantı oluşturmaya alternatif olarak, söz konusu sınıflara statik olarak referans verebilirsiniz. Java'da bu işlem statik bir başlatıcı bloğunda yapılabilir. Aşağıda J2ObjC'nin IosSecurityProvider sınıfından bir örnek verilmiştir:
// 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
};