أداة AAPT2

إنّ AAPT2 (أداة تجميع مواد العرض في Android) هي أداة تصميم تتيح لك نستخدمه المكوّن الإضافي لنظام Gradle المتوافق مع Android لتجميع وتجميع محتوى تطبيقك الموارد. تحليلات وفهارس AAPT2 وتجمع الموارد في تنسيق ثنائي تم تحسينه نظام Android الأساسي.

يعمل الإصدار 3.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث على تفعيل AAPT2 تلقائيًا. إِنْتَ عادةً لا تحتاج إلى استدعاء aapt2 بنفسك. ومع ذلك، إذا كنت تفضّل استخدام الوحدة الطرفية ونظام التصميم بدلاً من "استوديو Android"، يمكنك استخدام AAPT2 من سطر الأوامر. يمكنك أيضًا تصحيح أخطاء الإصدار المتعلقة بـ AAPT2 من سطر الأوامر. للقيام بذلك، ابحث عن AAPT2 كأداة مستقلة في أدوات إنشاء حزمة تطوير البرامج (SDK) لنظام التشغيل Android 26.0.2 والإصدارات الأحدث.

لتنزيل أدوات إنشاء حزمة تطوير البرامج (SDK) لنظام التشغيل Android من سطر الأوامر، استخدِم sdkmanager وشغِّل الأمر التالي:

sdkmanager "build-tools;build-tools-version"

بعد تنزيل أدوات إنشاء حزمة SDK، ابحث عن AAPT2 في android_sdk/build-tools/version/

لأنّه لم يتم إصدار النُسخ السابقة من "أدوات إنشاء حزمة تطوير البرامج (SDK) لنظام التشغيل Android". في أغلب الأحيان، قد لا يكون إصدار AAPT2 المضمّن في أدوات إنشاء حزمة تطوير البرامج (SDK) لديك الأحدث. للحصول على أحدث إصدار من AAPT2، نزِّل AAPT2 من Google Maven.

لاستخدام AAPT2 من سطر الأوامر على نظام التشغيل Linux أو Mac، شغِّل الأمر aapt2. على نظام التشغيل Windows، شغِّل الأمر aapt2.exe.

تدعم AAPT2 تجميعًا أسرع للموارد عن طريق تمكين المستخدمين المتزايد التحويل البرمجي. لإنجاز التجميع التزايدي، تتم معالجة الموارد منفصلة إلى خطوتين:

  • التجميع: يجمع ملفات الموارد في تنسيقات ثنائية.
  • الرابط: يدمج هذا النموذج كل الملفات المجمّعة ويجمعها في ملف واحد طرد.

يساعد هذا الفصل في تحسين الأداء لعمليات الإنشاء التدريجية. على سبيل المثال: وإذا كانت هناك تغييرات في ملف واحد، فستحتاج إلى إعادة التحويل البرمجي لهذا الملف فقط.

تنزيل AAPT2 من Google Maven

للحصول على أحدث إصدار من AAPT2 غير المضمّن في أدوات التصميم، فنزِّل AAPT2 من مستودع Maven التابع لـ Google على النحو التالي:

  1. في فهرس المستودع، انتقل إلى إلى com.android.tools.build > aapt2.
  2. انسخ اسم أحدث إصدار من AAPT2.
  3. أدرِج اسم النسخة التي نسختها في عنوان URL التالي وحدِّد نظام التشغيل المستهدف: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ aapt2-version/aapt2-aapt2-version- [windows | linux | osx].jar

    على سبيل المثال، لتنزيل الإصدار 3.2.0-alpha18-4804415 لنظام التشغيل Windows، استخدم: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ 3.2.0-alpha18-4804415/aapt2-3.2.0-alpha18-4804415-window.jar

  4. انتقِل إلى عنوان URL في متصفّح. سيبدأ تنزيل AAPT2 بعد قليل.

  5. ألغِ حزمة ملف JAR الذي نزّلته للتو.

    يجب أن يحتوي ملف JAR على ملف aapt2 قابل للتنفيذ وبعض المكتبات التي قابل للتنفيذ يعتمد عليه.

التجميع

تدعم AAPT2 تجميع كل أنواع موارد Android، مثل القابلة للرسم وملفات XML. عند استدعاء AAPT2 للتجميع، مرر ملف مورد واحد كمدخلات لكل استدعاء. يحلّل AAPT2 الملف بعد ذلك وتنشئ ملفًا ثنائيًا متوسطًا بامتداد .flat.

عند تمرير الأدلة بأكملها، يعيد AAPT2 تجميع كل الملفات في الدليل. حتى عند تغيير مورد واحد فقط. وعلى الرغم من أنّه يمكنك تمرير الموارد دلائل تحتوي على أكثر من ملف موارد واحد لـ AAPT2 باستخدام --dir فلن تحصل على فوائد تجميع الموارد التزايدي بهذه الطريقة.

قد تختلف أنواع ملفات الإخراج بناءً على الإدخال الذي تقدمه للتجميع، كما هو موضح في الجدول التالي:

الجدول 1. ملف الإدخال والإخراج أنواع التجميع

الإدخال الإخراج
مثل ملفات موارد XML، مثل سلسلة النمط، موجود في الدليل res/values/ جدول الموارد مع الإضافة *.arsc.flat.
جميع ملفات الموارد الأخرى.

جميع الملفات باستثناء الملفات ضمن الدليل res/values/ يتم تحويلها إلى ملفات XML ثنائية بامتدادات *.flat.

بالإضافة إلى ذلك، يتم كسر جميع ملفات PNG تلقائيًا واعتماد امتدادات *.png.flat . إذا اخترت عدم ضغط ملفات PNG، يمكنك استخدام --no-crunch أثناء التجميع.

تعتبر الملفات الناتجة عن AAPT2 غير قابلة للتنفيذ، ويجب تضمينها لاحقًا الملفات الثنائية كإدخال في مرحلة الربط لإنشاء حزمة APK. ومع ذلك، ملف APK الذي تم إنشاؤه ليس ملفًا قابلاً للتنفيذ يمكنك نشره على Android. الجهاز على الفور، لأنه لا يحتوي على ملفات DEX لم يتم التوقيع عليه.

بنية التجميع

في ما يلي البنية العامة لاستخدام compile:

aapt2 compile path-to-input-files [options] -o output-directory/

في المثال التالي، تجمع AAPT2 ملفات الموارد المسماة values.xml myImage.png حساب فردي:

aapt2 compile project_root/module_root/src/main/res/values-en/strings.xml -o compiled/
aapt2 compile project_root/module_root/src/main/res/drawable/myImage.png -o compiled/

كما هو موضح في الجدول 1، يعتمد اسم ملف الإخراج على المُدخل اسم الملف واسم الدليل الأصلي.

بالنسبة إلى المثال السابق مع إدخال ملف strings.xml، aapt2 تلقائيًا لتسمية ملف الإخراج باسم values-en_strings.arsc.flat. ومع ذلك، فإن القيم الملف القابل للرسم والمخزن في الدليل القابل للرسم باسم drawable_img.png.flat.

خيارات التجميع

تتوفر عدة خيارات يمكنك استخدامها مع الأمر compile على النحو الموضّح. في الجدول 2:

الجدول 2. خيارات تجميع الأوامر

Option الوصف
-o path

تحدّد مسار الإخراج للموارد التي تم تجميعها.

هذه علامة مطلوبة، لأنه يجب تحديد مسار إلى حيث يمكن لـ AAPT2 إخراج الموارد المجمّعة وتخزينها.

--dir directory

تحدِّد هذه السياسة الدليل المطلوب فحصه بحثًا عن موارد.

على الرغم من أنّه يمكنك استخدام هذه العلامة لتجميع ملفات موارد متعددة باستخدام أمر واحد، سيتم إيقاف مزايا التجميع التزايدي. لذلك، يجب عدم استخدام هذه العلامة في المشاريع الكبيرة.

--pseudo-localize تؤدي إلى إنشاء لغة مترجمة زائفة هي إصدارات السلاسل التلقائية، مثل en-XA وen-XB.
--no-crunch لإيقاف معالجة PNG.

يمكنك استخدام هذا الخيار إذا سبق لك معالجة ملفات PNG أو إذا كنت تنشئ إصدارات لتصحيح الأخطاء ولا تتطلّب تقليل حجم الملف. يؤدي تفعيل هذا الخيار إلى تنفيذ أسرع، لكنّه يزيد من النتائج. حجم الملف.

--legacy يتم التعامل مع الأخطاء المسموح بها عند استخدام الإصدارات السابقة من AAPT على أنها الجديدة.

يجب استخدام هذه العلامة عند حدوث أخطاء غير متوقعة في وقت التجميع. الحل تغييرات السلوك المعروفة التي قد تحدث أثناء استخدام AAPT2، وقراءة التغييرات في السلوك عند استخدام AAPT2

-zip file file هو ملف ZIP يحتوي على الدليل res المطلوب البحث عنه الموارد.
-output-text-symbols file تنشئ ملفًا نصيًا يحتوي على رموز الموارد في file.
-preserve-visibility-of-styleables سيتم تطبيق قواعد مستوى الرؤية نفسها على العناصر القابلة للأنماط في حال تحديدها. لجميع الموارد الأخرى. وبخلاف ذلك، تكون جميع عناصر النمط علنية.
-visibility [public|private|default|] تعيين مستوى رؤية الموارد المجمعة على المستوى المحدد.
-trace-folder folder إنشاء جزء تتبُّع JSON للرمز systrace في المجلد المحدَّد
-source-path path تضبط مسار الملف المصدر لملف المورد المجمَّع على path.
-h عرض مساعدة الأدوات.
-v لتفعيل التسجيل المطوَّل.

في مرحلة الارتباط، تدمج AAPT2 جميع الملفات الوسيطة التي هذه العناصر، مثل جداول الموارد، وملفات XML الثنائية، وملفات PNG التي تتم معالجتها الملفات، ثم حزم الملفات في حزمة APK واحدة. بالإضافة إلى ذلك، يمكن إنشاء ملفات إضافية، مثل ملفات قواعد R.java وProGuard. خلال هذه المرحلة. يُرجى العِلم أنّ حزمة APK التي تم إنشاؤها لا تحتوي على رمز بايت DEX بدون توقيع. لا يمكنك نشر حزمة APK هذه على أي جهاز.

إذا كنت لا تستخدم المكوّن الإضافي لنظام Gradle المتوافق مع Android إنشاء تطبيقك من سطر الأوامر، يمكنك استخدام أدوات سطر الأوامر الأخرى، مثل d8 لتجميع رمز بايت Java إلى رمز بايت DEX وapksigner لتوقيع ملف APK.

في ما يلي البنية العامة لاستخدام link:

aapt2 link path-to-input-files [options] -o
outputdirectory/outputfilename.apk --manifest AndroidManifest.xml

في المثال التالي، تدمج AAPT2 ملفين متوسطين، drawable_Image.flat وvalues_values.arsc.flat، ملف AndroidManifest.xml. يربط AAPT2 النتيجة بـ android.jar يحتوي على الموارد المحددة في حزمة android:

 aapt2 link -o output.apk
 -I android_sdk/platforms/android_version/android.jar
    compiled/res/values_values.arsc.flat
    compiled/res/drawable_Image.flat --manifest /path/to/AndroidManifest.xml -v

يمكنك استخدام الخيارات التالية مع الأمر link:

الجدول 3. خيارات أمر الربط

Option الوصف
-o path

تحدِّد مسار الإخراج لحِزمة APK الخاصة بالمورد المرتبط.

هذه علامة مطلوبة، لأنه يجب تحديد المسار حزمة APK الناتجة التي يمكنها الاحتفاظ بالموارد المرتبطة.

--manifest file

تحدِّد المسار إلى ملف بيان Android المطلوب إنشاؤه.

هذه علامة مطلوبة، لأن ملف البيان يتضمّن. معلومات أساسية حول تطبيقك، مثل اسم الحزمة والتطبيق رقم التعريف

-I

يوفر المسار إلى android.jar للنظام الأساسي أو حِزم APK أخرى، مثل framework-res.apk، والتي قد تكون مفيدة أثناء إنشاء الجديدة.

هذه العلامة مطلوبة إذا كنت تستخدم سمات مع السمة مساحة الاسم android في ملفات الموارد.
-A directory تحدِّد هذه السياسة دليل مواد العرض المطلوب تضمينه في حزمة APK.

ويمكنك استخدام هذا الدليل لتخزين الملفات الأصلية التي لم تتم معالجتها. إلى معرفة المزيد، قراءة الوصول إلى الملفات الأصلية:

-R file تمرير ملف .flat فردي إلى link، باستخدام دلالات overlay بدون استخدام العلامة <add-resource>.

عند توفير ملف موارد يظهر على سطح ملف حالي، استخدام آخر مورد متضارب تم تقديمه.

--package-id package-id تُحدِّد رقم تعريف الحزمة المطلوب استخدامها لتطبيقك.

يجب أن يكون معرّف الحزمة الذي تحدده أكبر من أو يساوي 0x7f ما لم يتم استخدامه مع --allow-reserved-package-id

--allow-reserved-package-id

يسمح باستخدام معرّف حزمة محجوز.

أرقام تعريف الحِزم المحجوزة هي أرقام تعريف يتم تخصيصها عادةً للحِزم التي تتم مشاركتها. وفي النطاق من 0x02 إلى 0x7e، ضمنًا. باستخدام --allow-reserved-package-id، يمكنك تحديد أرقام تعريف تقع. في نطاق معرّفات الحزمة المحجوزة.

يجب استخدام هذا الخيار فقط للحِزم التي تتضمّن إصدارًا من min-sdk 26 أو أقل.

--java directory تحدِّد هذه السياسة الدليل الذي سيتم إنشاء R.java فيه.
--proguard proguard_options تنشئ هذه السياسة ملف المخرجات لقواعد ProGuard.
--proguard-conditional-keep-rules تنشئ هذه الدالة ملف الإخراج لقواعد ProGuard لرمز DEX الرئيسي.
--no-auto-version لإيقاف الإصدارات التلقائية لحزمة تطوير البرامج (SDK) للتصميم والتنسيق.
--no-version-vectors لإيقاف تحديد الإصدارات التلقائية للعناصر القابلة للرسم المتجهة. لا تستخدم هذه العلامة إلا عند إنشاء ملف APK باستخدام ملف Vector Drawable المكتبة.
--no-version-transitions لإيقاف تحديد الإصدارات التلقائية لموارد النقل. لا يمكنك استخدام هذه العلامة إلا عند إنشاء ملف APK باستخدام مكتبة دعم النقل.
--no-resource-deduping إيقاف إلغاء التكرار التلقائي للموارد ذات القيم المتطابقة على مستوى الإعدادات المتوافقة.
--enable-sparse-encoding تمكين ترميز الإدخالات المتفرقة باستخدام شجرة بحث ثنائي. يفيد ذلك في تحسين حجم حِزمة APK ولكن على حساب تكلفة الموارد. أداء الاسترداد.
-z يتطلب أقلمة السلاسل التي تحمل علامة "مقترح".
-c config يتم توفير قائمة بعمليات الإعداد مفصولة بفواصل.

على سبيل المثال، إذا كانت لديك تبعيات على مكتبة الدعم، تحتوي على ترجمات بلغات متعددة، يمكنك فلترة الموارد لتكوين اللغة المحدد، مثل الإنجليزية أو الإسبانية.

عليك تحديد إعدادات اللغة من خلال معيار ISO 639-1 المكوّن من حرفَين رمز اللغة، متبوعًا بحرفين وفقًا لمعيار ISO 3166-1-alpha-2 رمز المنطقة مسبوقًا بحرف صغير "r". على سبيل المثال، en-rUS.

--preferred-density density يسمح هذا الخيار لـ AAPT2 باختيار أقرب كثافة مطابقة وشريط. كل الآخرين.

هناك العديد من مؤهِّلات كثافة وحدات البكسل المتاحة للاستخدام في تطبيقك، مثل ldpi وhdpi وxhdpi. عند تحديد كثافة مفضلة، تختار AAPT2 وتخزِّن أقرب كثافة مطابقة في المورد. وإزالة جميع العناصر الأخرى.

--output-to-dir إخراج محتوى حزمة APK إلى دليل محدّد من خلال -o

إذا واجهتك أي أخطاء عند استخدام هذه العلامة، يمكنك حلها من خلال الترقية إلى الإصدار 28.0.0 من أدوات إنشاء حزمة تطوير البرامج (SDK) لنظام التشغيل Android أو أعلى.

--min-sdk-version min-sdk-version تحدِّد هذه السياسة الحد الأدنى التلقائي لإصدار حزمة تطوير البرامج (SDK) لاستخدامه في AndroidManifest.xml
--target-sdk-version target-sdk-version تحدِّد هذه السياسة إصدار حزمة تطوير البرامج (SDK) المستهدَف التلقائي لاستخدامه في AndroidManifest.xml
--version-code version-code يحدد رمز الإصدار المراد إدخاله فيه AndroidManifest.xml في حال عدم توفّر أي منها.
--version-name version-name يحدد اسم الإصدار المراد إدخاله فيه AndroidManifest.xml في حال عدم توفّر أي منها.
--revision-code revision-code تحديد رمز المراجعة المطلوب إدخالها AndroidManifest.xml في حال عدم توفّر ملف.
--replace-version إذا كانت --version-code أو --version-name أو تم تحديد --revision-code، وستحل هذه القيم محل أي قيمة الموجودة بالفعل في البيان. بشكل تلقائي، لن يحدث أي تغيير إذا كان البيان تحدد هذه السمات بالفعل.
--compile-sdk-version-nacodeme compile-sdk-version-name يحدد رمز الإصدار المراد إدخاله فيه AndroidManifest.xml في حال عدم توفّر ملف.
--compile-sdk-version-name compile-sdk-version-name يحدد اسم الإصدار المراد إدخاله فيه AndroidManifest.xml في حال عدم توفّر ملف.
--proto-format تنشئ موارد مجمعة بتنسيق Protobuf.

مناسبة كمدخل إلى bundletool لإنشاء "مجموعة حزمات تطبيق Android".

--non-final-ids تنشئ هذه الدالة R.java باستخدام أرقام تعريف الموارد غير النهائية. مراجع إلى أرقام التعريف من رمز التطبيق ليست مضمَّنة خلال kotlinc أو javac التحويل البرمجي.
--emit-ids path يصدر ملف في المسار المحدد مع قائمة بأسماء أنواع الموارد وتعيينات الهوية الخاصة بهم. هذه الخطوة مناسبة للاستخدام مع --stable-ids.
--stable-ids outputfilename.ext يستهلك هذا الملف الذي تم إنشاؤه مع --emit-ids ويحتوي على قائمة بأسماء أنواع الموارد والمعرفات المخصصة لها.

يسمح هذا الخيار ببقاء المعرّفات التي تم تعيينها ثابتة حتى عند الحذف. أو إضافة مصادر جديدة أثناء عملية الربط

--custom-package package_name تُحدِّد هذه السياسة حزمة Java المخصَّصة لإنشاء R.java ضمنها.
--extra-packages package_name ينشئ ملف R.java نفسه، ولكن مع حزمة مختلفة. الأسماء.
--add-javadoc-annotation annotation إضافة تعليق توضيحي لـ JavaDoc إلى جميع فئات Java التي تم إنشاؤها
--output-text-symbols path إنشاء ملف نصي يحتوي على رموز الموارد لفئة R في الملف المحدد.

يجب تحديد المسار إلى ملف الإخراج.

--auto-add-overlay للسماح بإضافة موارد جديدة في تراكبات بدون استخدام العلامة <add-resource>
--rename-manifest-package manifest-package لإعادة تسمية الحزمة في ملف AndroidManifest.xml.
--rename-instrumentation-target-package instrumentation- target-package تغير اسم الحزمة المستهدفة instrumentation

يجب استخدام هذا الخيار مع --rename-manifest-package

-0 extension

يحدِّد امتدادات الملفات التي لا تريد ضغطها.

--split path:config[,config[..]] يقسم الموارد استنادًا إلى مجموعة من الإعدادات لإنشاء حساب لحزمة APK.

يجب تحديد المسار إلى ملف APK الناتج مع مجموعة الإعدادات.

--proguard-main-dex file ملف إخراج لقواعد ProGuard التي تم إنشاؤها لنظام DEX الرئيسي.
--proguard-minimal-keep-rules تنشئ مجموعة بسيطة من قواعد احتفاظ ProGuard.
--no-resource-removal لإيقاف الإزالة التلقائية للموارد بدون الإعدادات التلقائية. استخدام هذا الخيار فقط عند إنشاء حزم تراكب موارد وقت التشغيل.
-x علامة قديمة تحدد استخدام معرّف الحزمة 0x01.
--product products-list تُحدِّد قائمة بأسماء المنتجات المطلوب الاحتفاظ بها مفصولة بفواصل.
--no-xml-namespaces يزيل معلومات بادئة مساحة اسم XML ومعلومات معرّف الموارد المنتظم (URI) من AndroidManifest.xml ملف ثنائي ملف وXML في res/*
--shared-lib إنشاء مكتبة مشتركة لوقت تشغيل Android
--static-lib تنشئ هذه الدالة مكتبة Android ثابتة.
--no-static-lib-packages يدمج هذا الزر جميع موارد المكتبة ضمن حزمة التطبيق.
--no-proguard-location-reference يمنع ملفات قواعد ProGuard من الإشارة إلى الملف المصدر.
--private-symbols package-name تحدّد السمة package-name اسم الحزمة المطلوب استخدامها عند إنشاء R.java للرموز الخاصة. إذا لم يتم تحديده، فسيتم اختيار "عامة" تستخدم الرموز الخاصة اسم حزمة التطبيق.
--override-styles-instead-of-overlaying يؤدي إلى استبدال التعريفات السابقة بأنماط محدّدة في موارد -R بدلاً من دمجها.
--rename-resources-package package-name لإعادة تسمية الحزمة في جدول الموارد إلى package-name.
--no-compress لا يضغط أي موارد.
--keep-raw-values يحتفظ بقيم السمات الأولية في ملفات XML.
--no-compress-regex regular-expression لا يضغط الإضافات التي تتطابق مع regular-expression. استخدِم الرمز $ في نهاية السطر. تستخدم قواعد التعبير العادي ECMAScript والحساسة لحالة الأحرف.
--warn-manifest-validation يتم التعامل مع أخطاء التحقّق من صحة البيان كتحذيرات.
--exclude-configs qualifier[,qualifier[..]] يتم استبعاد قيم الموارد التي تحتوي إعداداتها على القيم المحددة المؤهِّلات.
--debug-mode إدراج android:debuggable="true" في عقدة التطبيق من البيان، مما يجعل التطبيق قابلاً للتصحيح حتى في مرحلة الإنتاج الأجهزة.
--strict-visibility لا يسمح باستخدام العناصر المركّبة ذات مستويات الرؤية المختلفة.
--exclude-sources عدم إجراء تسلسل لمعلومات الملف المصدر عند إنشاء موارد بتنسيق تنسيق Protobuf.
--trace-folder folder تنشئ هذه الدالة جزء تتبُّع JSON بقيمة systrace إلى السمة folder المحدَّدة.
--merge-only دمج الموارد فقط بدون التحقق من مراجع الموارد هذا النمط يجب عدم استخدام هذه العلامة إلا مع --static-lib. .
-h عرض قائمة المساعدة.
-v تؤدي هذه السياسة إلى تفعيل زيادة الإسهاب في الناتج.

نسخ

يتم استخدام dump لطباعة معلومات حول ملف APK الذي أنشأته باستخدام الأمر link.

بنية تفريغ

في ما يلي البنية العامة لاستخدام dump:

aapt2 dump sub-command filename.apk [options]

يقوم المثال التالي بطباعة محتوى من جدول الموارد الخاص حزمة APK:

aapt2 dump resources output.apk

تفريغ الأوامر الفرعية

حدِّد أحد الأوامر الفرعية التالية باستخدام الأمر dump:

الجدول 4. تفريغ الأوامر الفرعية

أمر فرعيالوصف
apc يطبع محتوى حاوية AAPT2 (APC) التي تم إنشاؤها أثناء التحويل البرمجي.
badging يطبع المعلومات المستخرجة من ملف بيان حزمة APK.
configurations يطبع كل إعداد يستخدمه مورد في APK.
overlayable يطبع موارد APK القابلة للتراكب.
packagename يطبع اسم حزمة APK.
permissions يطبع الأذونات المستخرجة من ملف بيان حزمة APK.
strings تطبع محتوى مجموعة سلاسل جدول الموارد في حزمة APK.
styleparents لطباعة قيم أصلية للأنماط المستخدمة في ملف APK.
resources يطبع محتوى جدول موارد حزمة APK.
xmlstrings تطبع السلاسل من ملف XML الذي تم تجميعه في حزمة APK.
xmltree لعرض شجرة تتضمّن ملف XML الذي تم تجميعه في حزمة APK.

خيارات تفريغ البيانات

استخدِم الخيارات التالية مع "dump":

الجدول 5: خيارات تفريغ البيانات

Optionالوصف
--no-values لإيقاف مخرجات القيم عند عرض المورد.
--file file تحدِّد هذه السياسة ملفًا كوسيطة سيتم تفريغها من حزمة APK.
-v تؤدي إلى زيادة وضوح الناتج.

الاختلاف

استخدِم diff للمقارنة بين ملفَي APK وتحديد أي اختلافات بينهما.

بنية الاختلاف

في ما يلي البنية العامة لاستخدام diff:

aapt2 diff first.apk second.apk

ولا توجد خيارات للأمر diff.

تحسين

يتم استخدام optimize لتنفيذ التحسينات على الموارد المدمجة resources.arsc قبل أن يتم تجميعها في حزمة APK. هذا التحسين يمكن أن تقلل حجم APK بنسبة من 1 إلى 3% تقريبًا، اعتمادًا على حجم وعدد والموارد المستخدمة.

بنية "أدوات تحسين الأداء"

في ما يلي البنية العامة لاستخدام optimize:

aapt2 optimize options file[,file[..]]

يعمل المثال التالي على تحسين الموارد المتوفّرة في input.apk وإنشاء عنصر جديد ملف APK محسَّن في output.apk. يستبدل تمثيل الجدول الثابت المعتاد باستخدام شجرة أكثر إحكامًا للبحث الثنائي، مما ينتج عنه حجم حزمة APK أصغر في تكلفة أداء الاسترجاع:

aapt2 optimize -o output.apk --enable-sparse-encoding input.apk

خيارات "أدوات تحسين الأداء من Google"

يمكنك استخدام الخيارات التالية مع "optimize":

الجدول 6. خيارات "أدوات تحسين الأداء من Google"

Optionالوصف
-o path تحدِّد هذه السياسة مسار الإخراج لحِزمة APK الخاصة بالمورد المرتبط.

هذه علامة مطلوبة، لأنه يجب تحديد المسار حزمة APK الناتجة التي يمكنها الاحتفاظ بالموارد المرتبطة.

-d directory تحدّد المسار إلى دليل الإخراج للتقسيمات.
-x path تُحدِّد المسار إلى ملف الإعداد بتنسيق XML.
-p طباعة عناصر APK المتعددة والخروج.
--target-densities density[,density[..]] تحدِّد هذه السياسة قائمة مفصولة بفواصل تتضمّن كثافات الشاشة التي يتضمّنها ملف APK. التي تم تحسينها. تشمل جميع الموارد التي ستكون غير مستخدمة على أجهزة تتم إزالة الكثافات المحددة من حزمة APK.
--resources-config-path path

تُحدِّد المسار إلى ملف resources.cfg الذي يحتوي على قائمة والموارد والتوجيهات لكل مورد.

تنسيق الملف: type/resource_name#[directive][,directive]

-c config[,config[..]] تُحدِّد هذه السياسة قائمة بعمليات الضبط المفصولة بفواصل لتضمينها. الإعداد الافتراضي هو كل الإعدادات.
--split path:config[,config[..]] يقسم الموارد استنادًا إلى مجموعة من الإعدادات لإنشاء حساب لحزمة APK.

يجب تحديد المسار إلى ملف APK الناتج مع مجموعة الإعدادات.

--keep-artifacts artifact[,artifact[..]] تحدّد هذه السياسة قائمة بالعناصر المطلوب الاحتفاظ بها مفصولة بفواصل. إذا لم يتم تحديد أي منها، الاحتفاظ بجميع الأدوات.
--enable-sparse-encoding تمكين ترميز الإدخالات المتفرقة باستخدام شجرة بحث ثنائي. يفيد هذا الخيار في تحسين حجم حِزمة APK ولكن على حساب أداء استرجاع الموارد.
--collapse-resource-names لتصغير أسماء الموارد إلى قيمة واحدة في مجموعة سلاسل المفاتيح. يتم استثناء الموارد باستخدام التوجيه no_collapse في ملف محدد من قِبل --resources-config-path.
--shorten-resource-paths تقصير مسارات الموارد داخل حزمة APK
--resource-path-shortening-map path تحدّد المسار لإخراج خريطة مسارات الموارد القديمة إلى مسارات مختصرة.
-v تؤدي إلى زيادة وضوح الناتج.
-h تعرض مساعدة الأداة.

الجذب

يجمع أمر AAPT compile الموارد تلقائيًا بتنسيق ثنائي. المناسبة لحِزم APK. من الممكن أيضًا تحديد تنسيق Protobuf التي تناسب AAB من خلال تحديد --proto-format. convert الأمر الذي يحوِّل ملفات APK بين التنسيقين.

تحويل البنية

في ما يلي البنية العامة لـ convert:

aapt2 convert -o output-file options file[,file[..]]

يُحوِّل المثال التالي الموارد المتوفّرة في input.apk وينشئ تصنيفًا جديدًا، حزمة APK في output.apk تحتوي على موارد بتنسيق protobuf. يحل محل المعتاد جدول مسطح باستخدام شجرة بحث ثنائي أكثر إحكامًا، مما يؤدي إلى في حزمة APK أصغر حجمًا على حساب أداء الاسترداد:

aapt2 convert -o output.apk --output-format proto --enable-sparse-encoding input.apk

خيارات التحويل

استخدِم الخيارات التالية مع "convert":

الجدول 7: خيارات التحويل

Optionالوصف
-o path

تحدِّد مسار الإخراج لحِزمة APK الخاصة بالمورد المرتبط.

هذه علامة مطلوبة، لأنه يجب تحديد المسار حزمة APK الناتجة التي يمكنها الاحتفاظ بالموارد المرتبطة.

--output-format [proto|binary] تنسيق الإخراج: القيم المقبولة هي proto binary وعند ترك هذه السياسة بدون ضبط، يتم ضبطها تلقائيًا على "binary".
--enable-sparse-encoding تمكين ترميز الإدخالات المتفرقة باستخدام شجرة بحث ثنائي. يفيد هذا الخيار في تحسين حجم حِزمة APK ولكن على حساب أداء استرجاع الموارد.
--keep-raw-values يحتفظ بقيم السمات الأولية في ملفات XML.
-v تؤدي إلى زيادة وضوح الناتج.
-h تعرض مساعدة الأداة.

وضع الخفي

وفّر الإصدار 2.19 من AAPT وضعًا خفيًا لإصدار الأوامر. يتيح لك وضع الخفي يمكنك إدخال أوامر متعددة في جلسة AAPT واحدة.

بنية البرنامج الخفي

يمكنك بدء وضع البرنامج الخفي باستخدام الأمر التالي:

aapt2 daemon

بعد تفعيل الوضع الخفي، يمكنك إدخال الأوامر. كل وسيطة في الأمر على سطر منفصل، مع وجود سطر فارغ في نهاية الأمر. يمكنك الخروج من وضع البرنامج الخفي من خلال كتابة Control+D.

ضَع في اعتبارك أوامر compile الفردية التالية:

aapt2 compile project_root/module_root/src/main/res/values-en/strings.xml -o compiled/
aapt2 compile project_root/module_root/src/main/res/drawable/myImage.png -o compiled/

يمكن إدخال هذه الأوامر في الوضع الخفي على النحو التالي:

aapt2 daemon
Ready
compile
project_root/module_root/src/main/res/values-en/strings.xml
-o
compiled/

Done
compile
project_root/module_root/src/main/res/drawable/myImage.png
-o
compiled/

Done
^D
Exiting daemon

خيارات وضع الخفي

الخيار الوحيد للوضع الخفي هو --trace-folder folder الذي ينشئ systrace JSON تتبّع الجزء إلى folder المحدّد.

الإصدار

حدد إصدار AAPT2 الذي تستخدمه من خلال الأمر version:

aapt2 version
Android Asset Packaging Tool (aapt) 2.19-8678579

تغييرات السلوك عند استخدام AAPT2

قبل استخدام AAPT2، كان AAPT الإصدار التلقائي من "أداة تجميع مواد العرض في Android". التي تم إيقافها الآن. على الرغم من أن AAPT2 يجب أن يعمل على الفور مع على المشروعات القديمة، يصف هذا القسم بعض التغييرات السلوكية التي ينبغي على دراية بها.

التدرّجات الهرمية للعناصر في بيان Android

في الإصدارات السابقة من AAPT، كانت العناصر المتداخلة في عقد غير صحيحة في تم تجاهل ملف واحد (AndroidManifest.xml) أو تم إصدار تحذير بحقه. على سبيل المثال، إليك المثال التالي:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.myname.myapplication">
   <application
       ...
       <activity android:name=".MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
           <action android:name="android.intent.action.CUSTOM" />
       </activity>
   </application>
</manifest>

ستتجاهل الإصدارات السابقة من AAPT علامة <action> في غير موضعها.

مع AAPT2، ستتلقّى الخطأ التالي:

AndroidManifest.xml:15: error: unknown element <action> found.

لحلّ هذه المشكلة، تأكَّد من دمج عناصر البيان بشكل صحيح. لمزيد من المعلومات، يُرجى الاطّلاع على نظرة عامة على بيان التطبيق

بيان الموارد

لم يعُد بإمكانك الإشارة إلى نوع مورد من خلال السمة name. يوضح المثال التالي بشكل غير صحيح عنصر مورد attr:

<style name="childStyle" parent="parentStyle">
    <item name="attr/my_attr">@color/pink</item>
</style>

يؤدي تعريف نوع مورد بهذه الطريقة إلى حدوث خطأ الإصدار التالي:

Error: style attribute 'attr/attr/my_attr (aka my.package:attr/attr/my_attr)'
not found.

لحل هذا الخطأ، يجب الإفصاح عن النوع بشكل صريح باستخدام type="attr":

<style name="childStyle" parent="parentStyle">
  <item type="attr" name="my_attr">@color/pink</item>
</style>

بالإضافة إلى ذلك، عند الإعلان عن عنصر <style>، يجب أن يكون عنصره الرئيسي أيضًا علامة نوع مورد النمط. بخلاف ذلك، سيظهر لك خطأ مشابه لما يلي:

Error: (...) invalid resource type 'attr' for parent of style

استخدام غير صحيح للرموز المرجعية للمورد @

يعرض AAPT2 أخطاء إنشاء عند حذف مورد أو وضعه بشكل غير صحيح الرموز المرجعية (@). على سبيل المثال، إذا قمت بحذف الرمز عند تحديد سمة النمط:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  ...
  <!-- Note the missing '@' symbol when specifying the resource type. -->
  <item name="colorPrimary">color/colorPrimary</item>
</style>

عند إنشاء الوحدة، تعرض AAPT2 خطأ الإصدار التالي:

ERROR: expected color but got (raw string) color/colorPrimary

بالإضافة إلى ذلك، إذا قمت بتضمين الرمز بشكل غير صحيح عند الوصول إلى مورد من مساحة الاسم android:

...
<!-- When referencing resources from the 'android' namespace, omit the '@' symbol. -->
<item name="@android:windowEnterAnimation"/>

عند إنشاء الوحدة، تعرض AAPT2 خطأ الإصدار التالي:

Error: style attribute '@android:attr/windowEnterAnimation' not found

ضبط المكتبات بشكل غير صحيح

إذا كان تطبيقك يعتمد على مكتبة تابعة لجهة خارجية تم إنشاؤها باستخدام مكتبة قديمة أدوات إنشاء حزمة تطوير البرامج (SDK) لنظام التشغيل Android، قد يتعطّل التطبيق في وقت التشغيل بدون عرض أي أخطاء أو تحذيرات. هذا العُطل قد تحدث لأنه أثناء إنشاء المكتبة، يتم عرض الحقول R.java تم الإعلان عن final. ونتيجةً لذلك، يتم تضمين جميع معرّفات الموارد في دروس المكتبة.

تعتمد AAPT2 على القدرة على إعادة تعيين معرفات لموارد المكتبة عند إنشاء تطبيقك. إذا افترضت المكتبة أنّ المعرّفات هي final وضمّنتها في ملف DEX للمكتبة، يكون هناك عدم تطابق في بيئة التشغيل.

لحل هذا الخطأ، اتصل بمؤلف المكتبة لإعادة إنشاء المكتبة باستخدام أحدث إصدار من أدوات إنشاء حزمة تطوير البرامج (SDK) لنظام التشغيل Android، وإعادة نشر المكتبة.