Gerekli Bağlantı Ayarları

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ıkBağlantı İşaretiAçı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ıkBağlantı İşaretiAçı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ıkBağlantı İşaretiAçı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ıkBağlantı İşaretiAçı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 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
  };