Jack هي سلسلة أدوات إنشاء Android التلقائية للإصدارات من Android 6.0 إلى 8.1
Jack هو سلسلة أدوات Android التي تُجمِّع رمز مصدر Java إلى رمز برمجي bytecode لنظام التشغيل Android. لن تضطر إلى القيام بأي شيء مختلف لاستخدام Jack - ما عليك سوى استخدام أوامر ملفات makefile القياسية لتجميع الشجرة أو مشروعك. Android 8.1 هو الإصدار الأخير الذي يستخدم Jack.
لمحة عن جاك
يعمل جاك كما هو موضّح في الشكل 1.
الشكل 1. نظرة عامة حول Jack.
تنسيق مكتبة Jack
لدى Jack تنسيق ملف .jack
خاص به يحتوي على رمز dex تم تجميعه مسبقًا للمكتبة، ما يتيح تجميع الملفات بشكل أسرع (pre-dex).
الشكل 2. محتوى ملف مكتبة Jack
جيل
كما هو موضّح في الشكل التالي، تُحوّل أداة Jill مكتبات
.jar
الحالية إلى تنسيق المكتبة الجديد.
الشكل 3. سير العمل لاستيراد مكتبة .jar
حالية.
خادم تجميع المقبس
عند استخدام Jack لأول مرة، تم تشغيل خادم تجميع Jack محلي على جهاز الكمبيوتر. هذا الخادم:
- يوفر تسريعًا أساسيًا لأنه يتجنب بدء تشغيل JRE JVM للمضيف الجديد، وتحميل رمز المقبس، وتهيئة المقبس، وتجهيز ملف JIT في كل تجميع. وهي توفر أيضًا أوقاتًا جيدة جدًا لتجميع المحتوى خلال مقاطع صغيرة (على سبيل المثال، في وضع التزايد).
- هو حلّ قصير المدى للتحكّم في عدد عمليات تجميع Jack المتوازية. يتجنب الخادم التحميل الزائد على جهاز الكمبيوتر (مشكلة في الذاكرة أو القرص) لأنه يحد من عدد عمليات التجميع المتوازية.
يوقف خادم Jack نفسه بعد فترة من عدم النشاط بدون أي عملية تجميع.
فهو يستخدم منفذين من بروتوكولات TCP على واجهة المضيف المحلي ولا تتوفر
خارجيًا. يمكن تعديل جميع المعلمات (عدد التجميعات المتوازية، والمهلة، ورقم المنافذ، وما إلى ذلك) من خلال تعديل ملف $HOME/.jack
.
ملف $HOME/.jack
يحتوي ملف $HOME/.jack
على الإعدادات التالية لمتغيّرات Jack
server في بنية 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}
الأمر التلقائي المستخدَم لبدء تشغيل Java Virtual Machine (آلة Java الافتراضية) على المضيف. وبشكل تلقائي، يمكن تحميل هذا المتغير بشكل زائد عن طريق متغير البيئة.
تحديد وحلّ المشاكل في الفيديوهات المجمّعة لـ Jack
المشكلة | الإجراء |
---|---|
لا يستجيب جهاز الكمبيوتر أثناء عملية التجميع أو تتعذّر عمليات تجميع Jack بسبب خطأ "تعذّر توفّر ذاكرة" | يمكنك تقليل عدد تجميعات المقبس المتزامنة
من خلال تعديل $HOME/.jack وتغيير
SERVER_NB_COMPILE إلى قيمة أقل. |
تعذّر تشغيل عمليات التجميع على لا يمكن تشغيل خادم الخلفية | السبب الأكثر ترجيحًا هو أنّ منافذ TCP سبق أن تم استخدامها على جهاز الكمبيوتر. يمكنك تغيير
التقارير من خلال تعديل $HOME/.jack (المتغيّرانSERVER_PORT_SERVICE و
SERVER_PORT_ADMIN ). لإزالة حظر الموقف، يمكنك إيقاف خادم التجميع من Jack عن طريق تعديل $HOME/.jack وتغيير
SERVER إلى false . يؤدي هذا الإجراء إلى إبطاء عملية التجميع بشكل كبير وقد يفرض عليك إطلاق make -j بميزة التحكم في التحميل (الخيار -l من make ). |
تتعذّر عملية التجميع بدون أي تقدّم | لإزالة حظر الموقف، عليك إنهاء خادم الخلفية Jack باستخدام
jack-admin kill-server ) ثم إزالة الأدلة المؤقتة
المتوفرة في jack-$USER من الدليل المؤقت
(/tmp أو $TMPDIR ). |
العثور على سجلّ Jack
إذا نفّذت الأمر make
مع هدف dist، يمكن العثور على سجلّ 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"
استخدِم أوامر ملف الإنشاء العادية لتجميع الشجرة (أو مشروعك) وإرفاق الإخراج العادي والخطأ. لإزالة سجلّات الإصدار التفصيلية، شغِّل:
unset ANDROID_JACK_EXTRA_ARGS
قيود المقبس
بشكل افتراضي، يمكن استخدام خادم Jack بواسطة مستخدم واحد فقط على جهاز الكمبيوتر. لإتاحة استخدام الخدمة لمستخدمين إضافيين، اختَر أرقام منافذ مختلفة لكل
مستخدم وعدِّل SERVER_NB_COMPILE
وفقًا لذلك. يمكنك أيضًا إيقاف
خادم Jack من خلال ضبط SERVER=false
في $HOME/.jack
.
تجميع CTS بطيء بسبب عملية دمج vm-tests-tf
الحالية.
لا تتوفّر أدوات التلاعب بالرمز الثنائي (مثل JaCoCo).
استخدام Jack
يتوافق Jack مع لغة البرمجة Java 1.7 ويدمج الخصائص الإضافية الموضّحة أدناه.
سابقة سابقة
عند إنشاء ملف مكتبة Jack، يتم إنشاء .dex
للمكتبة
وتخزينه داخل ملف مكتبة .jack
كدليل سابق.
عند الترجمة، يعيد جاك استخدام ملف pre-dex من كل مكتبة. تتم معالجة جميع المكتبات
مسبقًا.
الشكل 4. ربط المكتبات باستخدام أداة pre-dex
لا يعيد "جاك" استخدام مكتبة pre-dex في حال استخدام تصغير أو تشويش أو إعادة تعبئة في عملية التجميع.
تجميع متزايد
يعني التجميع التزايدي أنه لا تتم إعادة تجميع سوى المكونات التي تم التطرق إليها منذ آخر تجميع (وتبعياتها). ويمكن أن يكون التجميع التدريجي أسرع بكثير من التجميع الكامل عندما تقتصر التغييرات على مجموعة من المكوّنات.
يكون التجميع المتزايد غير مفعَّل تلقائيًا (ويتم إيقافه تلقائيًا عند تفعيل التقليل أو التشويش أو إعادة الحزمة أو حزمة multi-dex القديمة). لتفعيل الإصدارات التزايدية، أضِف السطر التالي إلى ملف Android.mk
الخاص بالمشروع الذي تريد إنشاءه بشكل تدريجي:
LOCAL_JACK_ENABLED := incremental
تقليص وتشويش
يستخدم جاك ملفات إعدادات ProGuard لتفعيل التقليل والتشويه.
تشمل الخيارات الشائعة ما يلي:
@
-include
-basedirectory
-injars
-outjars
(تتوفّر حزمة jar واحدة فقط للإخراج)-libraryjars
-keep
-keepclassmembers
-keepclasseswithmembers
-keepnames
-keepclassmembernames
-keepclasseswithmembernames
-printseeds
تشمل خيارات التصغير ما يلي:
-dontshrink
تشمل خيارات التشويش ما يلي:
-dontobfuscate
-printmapping
-applymapping
-obfuscationdictionary
-classobfuscationdictionary
-packageobfuscationdictionary
-useuniqueclassmembernames
-dontusemixedcaseclassnames
-keeppackagenames
-flattenpackagehierarchy
-repackageclasses
-keepattributes
-adaptclassstrings
وتشمل الخيارات التي يتم تجاهلها ما يلي:
-dontoptimize
(لا يُحسِّن "جاك")-dontpreverify
(لا يُجري Jack عملية التحقّق المُسبَق)-skipnonpubliclibraryclasses
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-keepdirectories
-target
-forceprocessing
-printusage
-whyareyoukeeping
-optimizations
-optimizationpasses
-assumenosideeffects
-allowaccessmodification
-mergeinterfacesaggressively
-overloadaggressively
-microedition
-verbose
-dontnote
-dontwarn
-ignorewarnings
-printconfiguration
-dump
إعادة إنشاء حزمة
يستخدم Jack ملفات إعداد jarjar لإعادة إنشاء الحزم. على الرغم من توافق Jack مع أنواع قواعد "القواعد"، فإنّه غير متوافق مع أنواع القواعد "zap" أو "keep".
دعم Multidex
يوفِّر Jack دعمًا متعدّدًا قديمًا ومدمجًا. بما أنّ ملفات dex محدودة بـ 65 ألف طريقة، يجب تقسيم التطبيقات التي تحتوي على أكثر من 65 ألف طريقة إلى ملفات dex متعدّدة. لمزيد من التفاصيل، يُرجى الاطّلاع على مقالة تفعيل حزمة multidex للتطبيقات التي تحتوي على أكثر من 64 ألف طريقة.