लिंक की ज़रूरी सेटिंग

लिंक बिल्ड स्टेप (Xcode के "Linkbinary with Libraries" बिल्ड फ़ेज़) के लिए J2ObjC के लिए खास फ़्लैग की ज़रूरत होती है, जो इस बात पर निर्भर करती हैं कि आपका ऐप्लिकेशन अनुवाद की गई Java क्लास का इस्तेमाल कैसे करता है. मुख्य फ़्लैग इसके ज़रिए सेट किए जाते हैं j2objcc कमांड-लाइन स्क्रिप्ट, लेकिन इसे Xcode के साथ.

एसडीके लाइब्रेरी

यह लाइब्रेरी, J2ObjC के JRE लागू करने के लिए ज़रूरी है. इसे शामिल नहीं किया जा सका लाइब्रेरी के नतीजे _iconv से शुरू होने वाले नामों के साथ, सिंबल से जुड़ी ऐसी गड़बड़ियां होंगी जो तय नहीं हैं.

लाइब्रेरीलिंक फ़्लैगब्यौरा
iconv -l आइकनव jre_core की ओर से कैरेक्टर एन्कोडिंग और डिकोड करने के लिए इस्तेमाल किया जाता है.

ये लाइब्रेरी, J2ObjC के JRE लागू करने के लिए इस्तेमाल की जाती हैं. इसलिए, हो सकता है कि इन्हें अपने ऐप्लिकेशन से लिंक करना पड़े.

लाइब्रेरीलिंक फ़्लैगब्यौरा
zip -ली॰ ज़ेड इसका इस्तेमाल java.util.zip टीम ने किया है. अगर लिंक किया जा रहा है, तो आपको इसे शामिल करना होगा jre_zip.
सुरक्षा -फ़्रेमवर्क सुरक्षा jre_security को लिंक करने के लिए ज़रूरी है.

लाइब्रेरी खोज पाथ

J2ObjC के डिस्ट्रिब्यूशन में कई स्टैटिक लाइब्रेरी शामिल हैं; उनका इस्तेमाल करने के लिए, आपको अपने प्रोजेक्ट को लिंकर पर क्लिक करें.

आम तौर पर, लाइब्रेरी खोज पाथ में _$(j2objcdistribution)/lib शामिल होना चाहिए, जहां _$(j2objcDistribution) वैरिएबल, J2ObjC की लोकल कॉपी का पाथ होता है. उदाहरण के लिए, अगर J2ObjC रिलीज़ संग्रह फ़ाइल को अनज़िप किया गया "/usr/local/", यह पाथ "/usr/local/j2objc" होगा.

ज़रूरी जानकारी: अपने प्रोजेक्ट में _$(j2objcDistribution) का इस्तेमाल न करें; हमेशा यह तय करें असल पाथ जहां आपने J2ObjC इंस्टॉल किया था.

अगर J2ObjC को उसके सोर्स कोड की कॉपी से बनाया जाता है, तो _$(j2objcDistribution) "j2objc/dist/" डायरेक्ट्री. जब तक make dist के साथ J2ObjC नहीं बनाया जाता, तब तक यह डायरेक्ट्री मौजूद नहीं होगी.

Xcode: लाइब्रेरी खोज पाथ

_$(j2objcdistribution)/lib जोड़कर ऐप्लिकेशन टारगेट का लाइब्रेरी सर्च पाथ अपडेट करें (फिर से इस्तेमाल करें वाली एक कॉपी होती है).

जेआरई लाइब्रेरी

ये लाइब्रेरी, J2ObjC के JRE एम्युलेशन से तय की गई क्लास लागू करती हैं.

ध्यान दें: libjre_core.a लाइब्रेरी में, ज़्यादातर अन्य सबसेट की क्लास शामिल होती हैं लाइब्रेरी. ऐप्लिकेशन के साइज़ को कम करने के लिए, उसे लिंक करना शुरू किया जाता है साथ ही, -l jre_core के साथ सबसेट लाइब्रेरी जोड़ें. इसमें उन सिंबल की सूची जोड़ें जो मौजूद नहीं हैं. उदाहरण के लिए, सबसे ज़्यादा इस्तेमाल की जाने वाली java.io क्लास, libjre_core.a में हैं. इसलिए, libjre_io.a लाइब्रेरी को सिर्फ़ तब शामिल करें, जब सिंबल से जुड़ी गड़बड़ियां ठीक न हों जिनके नाम JavaIo से शुरू होते हैं.

लाइब्रेरीलिंक फ़्लैगब्यौरा
libjre_core.a -एल jre_कोर क्लास का कम से कम सेट J2ObjC के JRE एम्युलेशन के लिए ज़रूरी है. जनरेट की गई सोर्स फ़ाइलें शामिल हैं. अगर आपके अनुवाद किए गए Java सोर्स का इस्तेमाल करके, JRE सहायता का रेफ़रंस दिया गया है नेटवर्किंग, XML, SQL वगैरह जैसी चीज़ों के लिए, फिर अतिरिक्त लाइब्रेरी (नीचे) को भी लिंक करना होगा.
libjre_beans.a -l jre_beans सभी क्लास java.beans पैकेज में से इसे खरीदें. सभी Java Beans क्लास इनमें से कई ऐप्लिकेशन का इस्तेमाल सिर्फ़ Swing और AWT ऐप्लिकेशन करते हैं.
libjre_channels.a -l jre_channels कई क्लास java.nio.channels और java.nio.channels.spi से पैकेज.
libjre_concurrent.a -l jre_concurrent कई क्लास java.util.concurrent, java.util.concurrent.atomic से और java.util.concurrent.locks पैकेज के लिए उपलब्ध है.
libjre_icu.a -l jre_icu कई क्लास android.icu से लेकर काम करने वाले टाइम ज़ोन तक (मुख्य तौर पर इसे चालू करने के लिए) java.time).
libjre_io.a -एल jre_io कई (कम इस्तेमाल होने वाली) क्लास java.io पैकेज में से इसे खरीदें.
libjre_net.a -l jre_net कई क्लास java.net पैकेज में. हालांकि, java.net.URLClassLoader कक्षा jre_security में है, जबकि javax.net और javax.net.ssl क्लास jre_ssl में हैं.
libjre_security.a -l jre_security ज़्यादातर क्लास java.security पैकेज में (कुछ jre_core में हैं), और java.security.* की क्लास के साथ-साथ javax.crypto.* और javax.security.* पैकेज. अगर इसे लिंक किया जाता है, तो आपको iOS सिक्योरिटी फ़्रेमवर्क को भी लिंक करना होगा. (SDK लाइब्रेरी देखें)
libjre_sql.a -l jre_sql सभी क्लास java.sql पैकेज में.
libjre_ssl.a -l jre_एसएसएल सभी क्लास javax.net और javax.net.ssl पैकेज में.
libjre_time.a -l jre_time सभी क्लास java.time पैकेज में.
libjre_util.a -एल jre_util कई क्लास java.util पैकेज में से, और java.util.logging पैकेज. ज़्यादातर java.util क्लास jre_core में हैं, इसलिए इस लाइब्रेरी को सिर्फ़ तब शामिल करें, जब वह JavaUtil* चिह्न से जुड़ी गड़बड़ियां ठीक नहीं की गई हैं (JavaUtilConcurrent* सिंबल jre_concurrent लाइब्रेरी).
libjre_xml.a -l jre_xml सभी क्लास एक्सएमएल संबंधी पैकेज से, जिसमें javax.xml.* भी शामिल है, org.w3c.dom.* और org.xml.sax.*.
libjre_zip.a -l jre_zip सभी क्लास java.util.zip और java.util.jar पैकेज में से. अगर इसे लिंक किया जाता है, तो आपको SDK टूल की ZIP लाइब्रेरी को भी लिंक करना होगा. (देखें SDK टूल की लाइब्रेरी)

libjre_emul.a (-l jre_emul)

jre_emul लाइब्रेरी में वे सभी क्लास मौजूद हैं जो J2ObjC के JRE एम्युलेशन में शामिल हैं. अगर कोई ऐप्लिकेशन jre_emul से लिंक होने पर, अन्य jre_* लाइब्रेरी शामिल नहीं की जानी चाहिए या लिंकर डुप्लीकेट चिह्नों की गड़बड़ियों की शिकायत करें. ऐसा इसलिए है, क्योंकि jre_emul में उन सभी क्लास को शामिल किया गया है जो अन्य लाइब्रेरी में सेव हो सकते हैं.

अन्य J2ObjC लाइब्रेरी

ये Java लाइब्रेरी और Android इस्तेमाल करने वाली क्लास, J2ObjC में शामिल हैं स्टैटिक लाइब्रेरी के तौर पर डिस्ट्रिब्यूशन:

लाइब्रेरीलिंक फ़्लैगब्यौरा
libguava.a -l अमरूद Guava: Java के लिए Google Core Library
libjavax_inject.a -l javax_inject JSR-330 डिपेंडेंसी इंजेक्शन एनोटेशन लाइब्रेरी से लिंक किया जा सकता है.
libjson.a -l JSON JSON डेटा इंटरचेंज लाइब्रेरी. यह है JSON का Android वर्शन, जो इस्तेमाल करने के अन्य तरीकों से थोड़ा अलग है.
libjsr305.a -l jsr305 सॉफ़्टवेयर के लिए JSR-305 एनोटेशन खराबी का पता लगाने वाली लाइब्रेरी.
libjunit.a -l जूनित -ObjC JUnit टेस्ट फ़्रेमवर्क.
libmockito.a -l मॉकिटो -ObjC Java में यूनिट टेस्ट के लिए, Mockito मॉकिंग फ़्रेमवर्क का इस्तेमाल करना.
libprotobuf_runtime.a -l प्रोटोबफ़_रनटाइम Google प्रोटोकॉल बफ़र रनटाइम, जिसे J2ObjC ऐप्लिकेशन के लिए ऑप्टिमाइज़ किया गया है. J2ObjC प्रोटोबफ़ का इस्तेमाल करने वाले ऐप्लिकेशन को अपना प्रोटो कंपाइल करना चाहिए j2objc_protos के साथ फ़ाइलें.
libandroid_util.a -l android_util `android_util` लाइब्रेरी में Android API यूटिलिटी क्लास का एक छोटा सबसेट होता है. इसका मकसद किसी Android एनवायरमेंट के लिए एम्युलेशन देना नहीं है, बल्कि इसे शेयर करने का एक तरीका भी है `android.util.Log` जैसी उपयोगी क्लास.

iOS ऐप्लिकेशन को लिंक करते समय, -ObjC फ़्लैग का इस्तेमाल अक्सर किया जाता है. हालांकि, इसकी ज़रूरत सिर्फ़ तब पड़ती है, जब Objective C क्लास और कैटगरी को स्टैटिक लाइब्रेरी से डाइनैमिक तौर पर लोड करना ज़रूरी है. इस फ़्लैग की वजह से सभी ऐप्लिकेशन में शामिल की जाने वाली सभी लिंक की गई स्टैटिक लाइब्रेरी की क्लास में शामिल करें, चाहे वे असल में इस्तेमाल किया गया. इसलिए, यह सुझाव दिया जाता है कि J2ObjC का इस्तेमाल करने वाले ऐप्लिकेशन सिर्फ़ -ObjC फ़्लैग के साथ तब लिंक करें, जब रनटाइम के दौरान क्लास लोड नहीं हो पाती हैं (इसका एक लक्षण तब है, जब JavaLangClassNotFoundException को थ्रो दिया जाता है).

JUnit और Mockito के टेस्ट फ़्रेमवर्क, रिफ़्लेक्शन पर बहुत ज़्यादा निर्भर करते हैं. इसलिए, इनका इस्तेमाल करने वाले टेस्ट ऐप्लिकेशन को -ObjC से लिंक करें.

यह एक पूरी स्टैटिक लाइब्रेरी से लिंक करने का एक विकल्प है, ताकि कुछ क्लास डाइनैमिक तरीके से लोड हो सकें इसके बजाय, इन क्लास का रेफ़रंस देते रहें. Java में, यह काम एक स्टैटिक इनिशलाइज़र में किया जा सकता है block; यहाँ J2ObjC के 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
  };