Bağlantı derleme adımı (Xcode'un "Link Binary with Kitaplıklar" derleme aşaması) J2ObjC'ye özel işaretler gerektirir. ve uygulamanızın çevrilmiş Java sınıflarını nasıl kullandığına bağlı olarak değişir. Temel flag'ler j2objcc komut satırı komut dosyasıdır ancak derleme sırasında belirtilmesi gerekir Xcode ile çalışır.
SDK Kitaplıkları
Bu kitaplık, J2ObjC'nin JRE uygulaması için gereklidir. Bu açıklama eklenemedi
kitaplığı, _iconv
ile başlayan adlarda tanımlanmamış simge hatalarına neden olur.
Kitaplık | Bağlantı İşareti | Açıklama |
---|---|---|
iconv | -l simgesiv | Karakter kodlama ve kod çözme işlemi için jre_core tarafından kullanılır. |
Bu kitaplıklar, J2ObjC'nin JRE uygulaması tarafından kullanılmaktadı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. Bağlantı kuruyorsanız bunu eklemeniz gerekir jre_zip olarak ayarlayın. |
Güvenlik | -çerçeve Güvenliği | jre_security bağlanıyorsa zorunludur. |
Kitaplık Arama Yolu
J2ObjC'nin dağıtımı çeşitli statik kitaplıklar içerir; projeniz için gerekli bilgilerin nerede bulabileceğinizi düşünün.
Genel olarak, kitaplık arama yolunun _$(j2objcdistribution)/lib öğesini içermesi gerekir; burada _$(j2objcdistribution) değişkeni, J2ObjC'nizin yerel kopyasının yoludur. Örneğin, bir J2ObjC sürüm arşiv dosyasını açan "/usr/local/" için bu yol "/usr/local/j2objc" şeklinde olacaktır.
Önemli: Projenizde aslında _$(j2objcdistribution) kullanmayın; her zaman J2ObjC'yi yüklediğiniz asıl yol.
J2ObjC'yi kaynak kodunun bir kopyasından derlerseniz _$(j2objcdistribution), kopyanızın
"j2objc/dist/" dizin. make dist
ile J2ObjC derlenene kadar bu dizin mevcut olmayacaktır.
Xcode: Kitaplık Arama Yolları
Uygulama hedefinin Kitaplık Arama Yolları'nı _$(j2objcdistribution)/lib (yine de şunu kullanın: üzerinde çalışır).
JRE Kitaplıkları
Bu kitaplıklar, J2ObjC'nin JRE emülasyonuyla tanımlanan sınıfları uygular.
Not: libjre_core.a
kitaplığı, diğer alt grubun çoğundan sınıfları içerir
kitaplıklar. Uygulama boyutunu küçültmenin önerilen yolu, uygulamayı bağlamaya başlamaktır
-l jre_core
ile birlikte, eksik sembolleri çözen alt küme kitaplıklarını ekleyin.
Örneğin, en sık kullanılan java.io
sınıfları libjre_core.a
,
Bu nedenle, yalnızca çözülmemiş sembol hataları varsa libjre_io.a
kitaplığını ekleyin
Bu kullanıcıların adları JavaIo
ile başlar.
Kitaplık | Bağlantı İşareti | Açıklama |
---|---|---|
libjre_core.a | -l jre_core | Minimum sınıf grubu J2ObjC'nin JRE emülasyonu için gereklidir, oluşturulmuş kaynak dosyalardan oluşur. Çevrilmiş Java kaynaklarınız JRE desteğine başvuruyorsa (aşağıda) ağ iletişimi, XML, SQL vb. için ek kitaplıklar (aşağıda) aynı zamanda bağlanmalıdır. |
libjre_beans.a | -l jre_beans |
Tüm sınıflar
(java.beans paketinden) Tüm Java Beans dersleri
çünkü birçoğu yalnızca Swing ve AWT uygulamaları tarafından kullanıldığından.
|
libjre_channels.a | -l jre_kanalları |
Çeşitli sınıflar
java.nio.channels ve java.nio.channels.spi
pakettir.
|
libjre_concurrent.a | -l jre_eşzamanlı |
Çeşitli sınıflar
kalkış: java.util.concurrent , java.util.concurrent.atomic
ve java.util.concurrent.locks paket.
|
libjre_icu.a | -l jre_icu |
Çeşitli sınıflar
android.icu - saat dilimlerini desteklemek için (esas olarak
java.time ) tıklayın.
|
libjre_io.a | -l jre_io |
Birkaç (daha az kullanılan) sınıf
(java.io paketinden)
|
libjre_net.a | -l jre_net |
Çeşitli sınıflar
(java.net paketinde) Ancak java.net.URLClassLoader
sınıfı jre_security , javax.net ve
jre_ssl sınıfında javax.net.ssl ders var.
|
libjre_security.a | -l jre_security |
Çoğu sınıf
java.security paketinde (birkaç tanesi jre_core içindedir),
java.security.* sınıflarındaki
javax.crypto.* ve javax.security.* paketleri.
Bunu bağlarsanız iOS güvenlik çerçevesini de bağlamanız gerekir.
(SDK Kitaplıkları'nı inceleyin)
|
libjre_sql.a | -l jre_sql |
Tüm sınıflar
(java.sql paketinde)
|
libjre_ssl.a | -l jre_ssl |
Tüm sınıflar
(javax.net ve javax.net.ssl paketlerinde)
|
libjre_time.a | -l jre_time |
Tüm sınıflar
(java.time paketinde)
|
libjre_util.a | -l jre_util |
Çeşitli sınıflar
java.util paketinin yanı sıra
java.util.logging paketi. Çoğu java.util ders
ancak jre_core içinde yer alır. Bu nedenle, bu kitaplığı yalnızca
çözülmemiş JavaUtil* sembol hatalarıdır
(JavaUtilConcurrent* sembolü
jre_concurrent kitaplığı).
|
libjre_xml.a | -l jre_xml |
Tüm sınıflar
javax.xml.* dahil olmak üzere XML ile ilgili paketlerden
org.w3c.dom.* ve org.xml.sax.* .
|
libjre_zip.a | -l jre_zip |
Tüm sınıflar
java.util.zip ve java.util.jar paketlerinden satın alabilirsiniz.
Bunu bağlarsanız SDK'nın ZIP kitaplığını da bağlamanız gerekir. (bkz.
SDK Kitaplıkları)
|
libjre_emul.a (-l jre_emul)
jre_emul
kitaplığı, J2ObjC'nin JRE emülasyonuna dahil olan tüm sınıfları içerir. Uygulama
jre_emul
ile bağlantılı değilse diğer jre_* kitaplıklarının hiçbiri dahil edilmez.
yinelenen simge hatalarını bildirme. Çünkü jre_emul
, bu konumlarda tanımlanan tüm sınıfları içerir
diğer kitaplıklardan da yararlanabilirsiniz.
Diğer J2ObjC Kitaplıkları
Bu Java kitaplıkları ve Android yardımcı sınıfları J2ObjC'ye dahildir dağıtım:
Kitaplık | Bağlantı İşareti | Açıklama |
---|---|---|
libguava.a | -l Guava | Guava: Java için Google Temel Kitaplıkları |
libjavax_inject.a | -l javax_inject (öğretme) | JSR-330 bağımlılık ekleme ek açıklama kitaplığını kullanabilirsiniz. |
libjson.a | -l json | JSON veri değişim kitaplığı. Bu, JSON'un Android sürümü, diğer uygulamalardan biraz farklıdır. |
libjsr305.a | -l jsr305 | Yazılımlar için JSR-305 ek açıklamaları kitaplığını kullanabilirsiniz. |
libjunit.a | -l junit -ObjC | JUnit test çerçevesi. |
libmockito.a | -l mockito -ObjC | Java'da birim testleri için Mockito alay çerçevesi. |
libprotobuf_runtime.a | -l protobuf_çalışma zamanı | Google Protokol Arabelleği J2ObjC uygulamaları için optimize edilmiş çalışma zamanı. J2ObjC protobuf'ları kullanan uygulamalar protolarını derlemelidir j2objc_protoc içeren dosyalar oluşturun. |
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. Android ortamı için emülasyon sağlamak üzere değil, yalnızca bir içeriği paylaşmaya yönelik bir yol olarak tasarlanmıştır. "android.util.Log" gibi faydalı sınıflara göz atın. |
-ObjC Bağlantı İşareti
-ObjC işareti, iOS uygulamalarını bağlarken sıkça kullanılır ancak yalnızca Objective (Hedef) olduğunda zorunludur.
C sınıflarının ve kategorilerinin statik kitaplıklardan dinamik olarak yüklenmesi gerekir. Bu işaret,
uygulamaya dahil edilecek tüm bağlantılı statik kitaplıklardaki sınıflar
kullanılır. Dolayısıyla, J2ObjC kullanan uygulamaların, yalnızca aşağıdaki durumlarda -ObjC işaretiyle
sınıfları çalışma zamanında yüklenemiyor (semptomlardan biri JavaLangClassNotFoundException
değerinin atılmasıdır).
JUnit ve Mockito test çerçeveleri büyük ölçüde yansımaya dayalı olduğundan bu çerçeveleri kullanan uygulamaları test etmek -ObjC ile bağlantı oluşturun.
Birkaç sınıfın dinamik olarak yüklenebilmesi için statik bir kitaplığın tamamını bağlamaya alternatif olarak bu sınıflara statik olarak referansta bulunur. Java'da bu işlem statik bir başlatıcıda yapılabilir. block; J2ObjC'nin IosSecurityProvider sınıfı:
// 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
};