Jack هي سلسلة أدوات إنشاء Android التلقائية للإصدارات من Android 6.0 إلى 8.1
جاك هو سلسلة أدوات Android جمّعت مصدر Java إلى Android dex رمز البايت. ليس عليك فعل أي شيء بشكل مختلف لاستخدام جاك - ما عليك سوى استخدام أوامر makefile القياسية لتجميع الشجرة أو مشروعك. الإصدار 8.1 من نظام التشغيل Android هو الإصدار الأخير الذي يستخدم Jack.
لمحة عن جاك
كما هو موضح في الشكل 1.
الشكل 1. نظرة عامة حول Jack.
تنسيق مكتبة Jack
لدى Jack تنسيق ملف .jack
خاص به يحتوي على رمز dex مجمع مسبقًا.
للمكتبة، ما يتيح تجميع الملفات بشكل أسرع (ex-dex).
الشكل 2. محتوى ملف مكتبة Jack
جيل
كما هو موضح في الشكل التالي، تقوم أداة جيل بترجمة الكلمات الرئيسية
.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
كدليل سابق
عند التجميع، يُعيد جاك استخدام مكتبة سابقة من كل مكتبة. جميع المكتبات
البيانات السابقة.
الشكل 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 ألف طريقة