التجميع باستخدام Jack (AOSP 6.0 - 8.1)

Jack هي سلسلة أدوات إنشاء Android التلقائية للإصدارات من Android 6.0 إلى 8.1

جاك هو سلسلة أدوات Android جمّعت مصدر Java إلى Android dex رمز البايت. ليس عليك فعل أي شيء بشكل مختلف لاستخدام جاك - ما عليك سوى استخدام أوامر makefile القياسية لتجميع الشجرة أو مشروعك. الإصدار 8.1 من نظام التشغيل Android هو الإصدار الأخير الذي يستخدم Jack.

لمحة عن جاك

كما هو موضح في الشكل 1.

نظرة عامة حول Jack.

الشكل 1. نظرة عامة حول Jack.

تنسيق مكتبة Jack

لدى Jack تنسيق ملف .jack خاص به يحتوي على رمز dex مجمع مسبقًا. للمكتبة، ما يتيح تجميع الملفات بشكل أسرع (ex-dex).

محتوى ملف مكتبة Jack

الشكل 2. محتوى ملف مكتبة Jack

جيل

كما هو موضح في الشكل التالي، تقوم أداة جيل بترجمة الكلمات الرئيسية .jar مكتبة في تنسيق المكتبة الجديد

سير العمل لاستيراد مكتبة "jar." حالية.

الشكل 3. سير العمل لاستيراد مكتبة .jar حالية.

خادم تجميع المقبس

عند استخدام Jack، لأول مرة، يطلق خادم التجميع المحلي Jack على جهاز الكمبيوتر. يقوم الخادم بما يلي:

  • يضفي تسريعًا أساسيًا لأنه يتجنب إطلاق مضيف جديد JRE JVM، تحميل كود Jack، وتهيئة Jack، وتجهيز JIT في كل التحويل البرمجي. كما أنها توفر أوقات تجميع جيدة جدًا خلال الفيديوهات التجميعات (على سبيل المثال، في الوضع التزايدي).
  • هو حل قصير المدى للتحكم في عدد أدوات الأسلاك المتوازية التجميعات. يتجنب الخادم التحميل الزائد على جهاز الكمبيوتر (مشكلة في الذاكرة أو القرص) لأنّه يحدّ من عدد الفيديوهات المجمّعة بشكل متوازٍ

يتم إيقاف تشغيل خادم Jack تلقائيًا بعد وقت الخمول بدون أي تجميع. إنه يستخدم منفذين TCP على واجهة المضيف المحلي ولا تتوفر خارجيًا. جميع المعلمات (عدد عمليات التجميع المتوازية والمهلة والمنافذ وما إلى ذلك) من خلال تعديل ملف $HOME/.jack.

ملف $Home/.jack

يحتوي ملف $HOME/.jack على الإعدادات التالية لـ Jack متغيرات الخادم في بنية bash كاملة:

  • يفعّل SERVER=true ميزة الخادم الخاصة بـ Jack.
  • يضبط SERVER_PORT_SERVICE=8072 رقم منفذ TCP للخادم. لأغراض التجميع.
  • يضبط SERVER_PORT_ADMIN=8073 رقم منفذ TCP للخادم. لأغراض إدارية.
  • SERVER_COUNT=1 غير مستخدَم.
  • يحدد SERVER_NB_COMPILE=4 أقصى عدد مسموح به من البيانات المتوازية التجميعات. يضبط SERVER_TIMEOUT=60 عدد الثواني التي يستغرقها الخادم في وضع عدم النشاط. يجب أن ينتظر بدون أي تجميع قبل أن يتم إيقافه. SERVER_LOG=${SERVER_LOG:=$SERVER_DIR/jack-$SERVER_PORT_SERVICE.log} لضبط الملف الذي تتم كتابة سجلات الخادم فيه. وبشكل افتراضي، يمكن أن يكون هذا المتغير محمّلة بشكل زائد بمتغير بيئة.
  • يتم ضبط الخيار التلقائي من قِبل JACK_VM_COMMAND=${JACK_VM_COMMAND:=java}. المستخدم لتشغيل JVM على المضيف. وبشكل افتراضي، يمكن أن يكون هذا المتغير محمّلة بشكل زائد بمتغير البيئة.

تحديد وحلّ المشاكل المتعلّقة بالفيديوهات المجمّعة التي يملكها جاك

المشكلة الإجراء
يصبح الكمبيوتر غير مستجيب أثناء التحويل البرمجي أو تواجه مشكلة يتعذّر تجميع فيديوهات جاك في خطأ متعلق بنفاد الذاكرة تقليل عدد أجهزة المقبس المتزامنة الفيديوهات المجمّعة من خلال تعديل $HOME/.jack وتغيير SERVER_NB_COMPILE إلى قيمة أقل.
تعذّر تشغيل عمليات التجميع على لا يمكن تشغيل خادم الخلفية السبب الأكثر احتمالاً هو استخدام منافذ TCP على جهاز الكمبيوتر بالفعل. تغيير المنافذ عن طريق تعديل $HOME/.jack (SERVER_PORT_SERVICE و SERVER_PORT_ADMIN متغيّر). لإزالة حظر الموقف، عليك إيقاف خادم التجميع الخاص بالمقبس من خلال تعديل $HOME/.jack وتغيير من SERVER إلى false. لسوء الحظ، سينخفض هذا الأمر بشكل كبير الفيديو المجمّع وقد يفرض عليك إطلاق "make -j" مع تحميل عنصر التحكم (الخيار -l من make).
يتعذّر على التحويل البرمجي بدون أي تقدم لإلغاء حظر الموقف، عليك إنهاء خادم الخلفية Jack باستخدام jack-admin kill-server) ثم أزِل الأدلة المؤقتة. الواردة في jack-$USER من الدليل المؤقت (/tmp أو $TMPDIR)

العثور على سجلّ Jack

في حال تشغيل أمر make مع هدف مستهدَف، سيكون سجلّ Jack الموجودة في $ANDROID_BUILD_TOP/out/dist/logs/jack-server.log. وبخلاف ذلك، يمكنك العثور على السجلّ من خلال تشغيل jack-admin server-log. في حالة إخفاقات Jack القابلة للتكرار، يمكنك الحصول على سجل أكثر تفصيلاً من خلال إعداد المتغير التالي:

export ANDROID_JACK_EXTRA_ARGS="--verbose debug --sanity-checks on -D sched.runner=single-threaded"

استخدم أوامر makefile القياسية لتجميع الشجرة (أو مشروعك) إرفاق الناتج القياسي والخطأ. لإزالة سجلّات الإصدار التفصيلية، شغِّل:

unset ANDROID_JACK_EXTRA_ARGS

قيود المقبس

بشكل افتراضي، لا يمكن استخدام خادم Jack سوى مستخدم واحد على جهاز كمبيوتر. لإتاحة المزيد من المستخدمين، اختَر أرقام منافذ مختلفة لكل منها. وتعديل SERVER_NB_COMPILE وفقًا لذلك. ويمكنك أيضًا إيقاف خادم المقبس من خلال ضبط SERVER=false في $HOME/.jack. تجميع CTS بطيء بسبب عملية دمج vm-tests-tf الحالية. أدوات معالجة رموز البايت (مثل JaCoCo) غير متاحة.

استخدام Jack

يدعم جاك لغة البرمجة 1.7 في Java ويدمج الإصدار الإضافي الميزات الموضحة أدناه.

سابقة سابقة

عند إنشاء ملف مكتبة Jack، يتم إنشاء .dex للمكتبة إنشاء وتخزين داخل ملف مكتبة .jack كدليل سابق عند التجميع، يُعيد جاك استخدام مكتبة سابقة من كل مكتبة. جميع المكتبات البيانات السابقة.

مكتبات Jack باستخدام دليل مبدئي

الشكل 4. مكتبات Jack باستخدام دليل مبدئي

لا يعيد جاك استخدام التحقق المسبق من المكتبة في حالة تقليص أو تشويش أو المستخدمة في التجميع العنقودي.

تجميع متزايد

يعني التجميع التدريجي أن المكونات التي تم لمسها فقط منذ آخر التحويل البرمجي (وتبعياته). يمكن أن ينتج عن التجميع التزايدي أسرع بكثير من التجميع الكامل عندما تقتصر التغييرات على مجموعة من المكونات.

يتم إيقاف التجميع التدريجي تلقائيًا (ويتم تشغيله تلقائيًا) عند تقليص حجم البيانات أو إخفاء مفاتيح فك التشفير أو إعادة إنشاء حزمة محتوى التطبيق أو عملية الدمج القديمة مفعَّلة). لتفعيل الإصدارات التزايدية، أضِف السطر التالي إلى العنصر ملف واحد (Android.mk) للمشروع الذي تريد إنشاءه بشكل تدريجي:

LOCAL_JACK_ENABLED := incremental

تقليص وتشويش

يستخدم جاك ملفات تهيئة ProGuard لتفعيل تقليص التشويش.

تشمل الخيارات الشائعة ما يلي:

  • @
  • -include
  • -basedirectory
  • -injars
  • -outjars (يمكن استخدام وعاء إخراج واحد فقط)
  • -libraryjars
  • -keep
  • -keepclassmembers
  • -keepclasseswithmembers
  • -keepnames
  • -keepclassmembernames
  • -keepclasseswithmembernames
  • -printseeds

تشمل خيارات تقليص القيم ما يلي:

  • -dontshrink

وتشمل خيارات إخفاء مفاتيح فك التشفير ما يلي:

  • -dontobfuscate
  • -printmapping
  • -applymapping
  • -obfuscationdictionary
  • -classobfuscationdictionary
  • -packageobfuscationdictionary
  • -useuniqueclassmembernames
  • -dontusemixedcaseclassnames
  • -keeppackagenames
  • -flattenpackagehierarchy
  • -repackageclasses
  • -keepattributes
  • -adaptclassstrings

وتشمل الخيارات التي يتم تجاهلها ما يلي:

  • -dontoptimize (لا يُحسِّن "جاك")
  • -dontpreverify (لا يُكمل "جاك" عملية إثبات الملكية مُسبقًا)
  • -skipnonpubliclibraryclasses
  • -dontskipnonpubliclibraryclasses
  • -dontskipnonpubliclibraryclassmembers
  • -keepdirectories
  • -target
  • -forceprocessing
  • -printusage
  • -whyareyoukeeping
  • -optimizations
  • -optimizationpasses
  • -assumenosideeffects
  • -allowaccessmodification
  • -mergeinterfacesaggressively
  • -overloadaggressively
  • -microedition
  • -verbose
  • -dontnote
  • -dontwarn
  • -ignorewarnings
  • -printconfiguration
  • -dump

إعادة إنشاء حزمة

يستخدم Jack ملفات إعداد jarjar لإعادة إنشاء الحزم. عندما يكون جاك متوافقة مع "rule" أنواع القواعد، فهي غير متوافقة مع "zap" أو "الحفاظ" وأنواع القواعد.

دعم Multidex

يوفِّر Jack دعمًا متعدّدًا قديمًا ومدمجًا. لأنّ ملفات dex محدودة إلى 65 ألف طريقة، إذ يجب تقسيم التطبيقات التي تتضمّن أكثر من 65 ألف طريقة إلى الملفات. لمزيد من التفاصيل، يُرجى الرجوع إلى تفعيل ميزة "الفهرسة المتعدّدة" للتطبيقات التي تضم أكثر من 64 ألف طريقة