تحتاج خطوة إنشاء الرابط (مرحلة إنشاء "Link Binary With Libraries" في Xcode) إلى علامات خاصة بـ J2ObjC، والتي تختلف تبعًا لكيفية استخدام تطبيقك لفئات Java المترجمة. يتم تعيين العلامات الأساسية من خلال النص البرمجي لسطر الأوامر j2objcc، ولكن يجب تحديده عند إنشاء باستخدام Xcode.
مكتبات حِزم تطوير البرامج (SDK)
هذه المكتبة مطلوبة لتنفيذ JRE في J2ObjC. عدم تضمين هذا
ستؤدي المكتبة إلى حدوث أخطاء رموز غير معروفة مع أسماء تبدأ بـ _iconv
.
المكتبة | علامة الرابط | الوصف |
---|---|---|
iconv | -l iconv | يُستخدَم في jre_core لترميز الأحرف وفك ترميزه. |
تُستخدَم هذه المكتبات من خلال تنفيذ JRE في J2ObjC، وقد تحتاج إلى ربطها بتطبيقك.
المكتبة | علامة الرابط | الوصف |
---|---|---|
zip | -l z | مُستخدَم بواسطة java.util.zip. يجب تضمين هذه المعلومات في حال الربط jre_zip. |
الأمان | -إطار الأمان | يجب ملء هذا الحقل في حال ربط jre_security. |
مسار البحث في المكتبة
يشمل توزيع J2ObjC العديد من المكتبات الثابتة؛ لاستخدامها، يحتاج مشروعك إلى إخبار والرابط إلى أين تجدها.
بوجه عام، يجب أن يتضمن مسار بحث المكتبة _$(j2objcdistribution)/lib، حيث يكون متغير _$(j2objcdistribution) هو المسار إلى نسختك المحلية من J2ObjC. على سبيل المثال، إذا تم فك ضغط ملف أرشيف إصدار J2ObjC إلى " /usr/local/"، سيكون هذا المسار "/usr/local/j2objc".
ملاحظة مهمّة: يجب عدم استخدام _$(j2objcdistribution) في مشروعك. حدد دائمًا المسار الفعلي الذي قمت فيه بتثبيت J2ObjC.
إذا أنشأت J2ObjC من نسخة من رمز المصدر الخاص به، ستكون نسختك هي _$(j2objcdistribution)
"j2objc/dist/" الدليل. لن يكون هذا الدليل متوفّرًا إلى أن تنشئ J2ObjC باستخدام make dist
.
Xcode: مسارات البحث في المكتبات
يمكنك تحديث مسارات البحث في المكتبة لاستهداف التطبيق عن طريق إضافة _$(j2objcdistribution)/lib (مرة أخرى، استخدام) المسار الحقيقي).
مكتبات JRE
تنفذ هذه المكتبات الفئات المحددة بواسطة محاكاة JRE لـ J2ObjC.
ملاحظة: تتضمّن مكتبة libjre_core.a
صفوفًا من معظم المجموعات الفرعية الأخرى.
المكتبات. الطريقة المُقترَحة لتقليل حجم التطبيق هي البدء في ربط التطبيق
مع -l jre_core
، ثم إضافة مكتبات المجموعات الفرعية التي تحل أي رموز مفقودة.
على سبيل المثال، تتوفّر فئات java.io
الأكثر استخدامًا في libjre_core.a
،
لذلك يجب تضمين مكتبة libjre_io.a
فقط في حال وجود أخطاء رموز لم يتم حلّها
التي تبدأ أسماؤها بـ JavaIo
.
المكتبة | علامة الرابط | الوصف |
---|---|---|
libjre_core.a | -l jre_core | الحد الأدنى لمجموعة الصفوف مطلوب لمحاكاة JRE لـ J2ObjC، ويشار إليه من جميع ملفات المصدر التي تم إنشاؤها. إذا كانت مصادر 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 | -l 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_ssl |
كل الصفوف
في الحزمتَين javax.net وjavax.net.ssl
|
libjre_time.a | -l jre_time |
كل الصفوف
في حزمة java.time .
|
libjre_util.a | -l jre_util |
عدة صفوف
من حزمة java.util ، بالإضافة إلى
حزمة java.util.logging . معظم صفوف java.util
في jre_core . ومع ذلك، قم بتضمين هذه المكتبة فقط إذا كانت
هي أخطاء رموز JavaUtil* لم يتم حلها
(تتوفّر رموز JavaUtilConcurrent* في
jre_concurrent مكتبة).
|
libjre_xml.a | -l jre_xml |
كل الصفوف
من الحزم المتعلقة بـ XML، بما في ذلك javax.xml.* ،
org.w3c.dom.* ، وorg.xml.sax.* .
|
libjre_zip.a | -l jre_zip |
كل الصفوف
من حزمتَي java.util.zip وjava.util.jar
في حال ربط هذا، ستحتاج أيضًا إلى ربط مكتبة SDK المضغوطة. (يُرجى الاطّلاع على
مكتبات حِزم SDK)
|
libjre_emul.a (-l jre_emul)
تحتوي مكتبة jre_emul
على كل الصفوف المضمَّنة في محاكاة JRE لـ J2ObjC. إذا كان التطبيق
مرتبطة بـ jre_emul
، يجب عدم تضمين أي من مكتبات jre_* الأخرى، وإلا فسيتم تنفيذ
للإبلاغ عن أخطاء الرموز المكررة. ويرجع ذلك إلى أنّ jre_emul
تتضمّن جميع الصفوف المحدّدة في تلك الصفوف.
مكتبات أخرى.
مكتبات J2ObjC الأخرى
يتم تضمين مكتبات Java وفئات استخدام Android في J2ObjC توزيعها كمكتبات ثابتة:
المكتبة | علامة الرابط | الوصف |
---|---|---|
libguava.a | -الجوافة | Guava: مكتبات Google الأساسية للغة Java |
libjavax_inject.a | -l javax_inject | حقن التبعية JSR-330 مكتبة التعليقات التوضيحية. |
libjson.a | -l json | مكتبة تبادل البيانات بتنسيق JSON هذه هي إصدار Android من JSON، والذي يختلف قليلاً عن عمليات التنفيذ الأخرى. |
libjsr305.a | -l jsr305 | تعليقات JSR-305 التوضيحية للبرامج مكتبة كشف العيوب. |
libjunit.a | -l junit -ObjC | إطار عمل اختبار JUnit. |
libmockito.a | -l نماذج -ObjC | إطار عمل Mockito الذي يرسم نموذجًا لاختبار الوحدات في Java. |
libprotobuf_runtime.a | -l protobuf_runtime | مخزن بروتوكول Google المؤقت محسَّن لتطبيقات J2ObjC يجب أن تجمع التطبيقات التي تستخدم النماذج الأوّلية J2ObjC بيانات النموذج الأوّلي باستخدام j2objc_protoc. |
libandroid_util.a | -l android_util | تحتوي مكتبة "android_util" على مجموعة فرعية صغيرة من فئات الأدوات المساعدة لواجهة برمجة تطبيقات Android. وليس الغرض منه توفير محاكاة لبيئة Android، بل هو مجرد وسيلة لمشاركة فئات مفيدة مثل "android.util.Log". |
علامة رابط -ObjC
يتم استخدام علامة -ObjC بشكل متكرر عند ربط تطبيقات iOS، ولكنها لا تكون مطلوبة إلا عندما يكون الهدف
يجب تحميل فئات 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
};