إنّ 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 على النحو التالي:
- في فهرس المستودع، انتقل إلى إلى com.android.tools.build > aapt2.
- انسخ اسم أحدث إصدار من AAPT2.
أدرِج اسم النسخة التي نسختها في عنوان 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
انتقِل إلى عنوان URL في متصفّح. سيبدأ تنزيل AAPT2 بعد قليل.
ألغِ حزمة ملف JAR الذي نزّلته للتو.
يجب أن يحتوي ملف JAR على ملف
aapt2
قابل للتنفيذ وبعض المكتبات التي قابل للتنفيذ يعتمد عليه.
التجميع
تدعم AAPT2 تجميع كل
أنواع موارد Android، مثل
القابلة للرسم وملفات XML. عند استدعاء AAPT2 للتجميع، مرر
ملف مورد واحد كمدخلات لكل استدعاء. يحلّل AAPT2 الملف بعد ذلك
وتنشئ ملفًا ثنائيًا متوسطًا بامتداد .flat
.
عند تمرير الأدلة بأكملها، يعيد AAPT2 تجميع كل الملفات في الدليل.
حتى عند تغيير مورد واحد فقط. وعلى الرغم من أنّه يمكنك تمرير الموارد
دلائل تحتوي على أكثر من ملف موارد واحد لـ AAPT2 باستخدام --dir
فلن تحصل على فوائد تجميع الموارد التزايدي بهذه الطريقة.
قد تختلف أنواع ملفات الإخراج بناءً على الإدخال الذي تقدمه للتجميع، كما هو موضح في الجدول التالي:
الإدخال | الإخراج |
---|---|
مثل ملفات موارد XML، مثل
سلسلة
النمط،
موجود في الدليل res/values/
|
جدول الموارد مع الإضافة *.arsc.flat .
|
جميع ملفات الموارد الأخرى. |
جميع الملفات باستثناء الملفات ضمن الدليل
بالإضافة إلى ذلك، يتم كسر جميع ملفات PNG تلقائيًا واعتماد امتدادات |
تعتبر الملفات الناتجة عن 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:
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
|
تنشئ ملفًا نصيًا يحتوي على رموز الموارد في
|
-preserve-visibility-of-styleables
|
سيتم تطبيق قواعد مستوى الرؤية نفسها على العناصر القابلة للأنماط في حال تحديدها. لجميع الموارد الأخرى. وبخلاف ذلك، تكون جميع عناصر النمط علنية. |
-visibility [public|private|default|]
|
تعيين مستوى رؤية الموارد المجمعة على المستوى المحدد. |
-trace-folder folder
|
إنشاء جزء تتبُّع JSON للرمز systrace في |
-source-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
:
Option | الوصف |
---|---|
-o path
|
تحدِّد مسار الإخراج لحِزمة APK الخاصة بالمورد المرتبط. هذه علامة مطلوبة، لأنه يجب تحديد المسار حزمة APK الناتجة التي يمكنها الاحتفاظ بالموارد المرتبطة. |
--manifest file
|
تحدِّد المسار إلى ملف بيان Android المطلوب إنشاؤه. هذه علامة مطلوبة، لأن ملف البيان يتضمّن. معلومات أساسية حول تطبيقك، مثل اسم الحزمة والتطبيق رقم التعريف |
-I
|
يوفر المسار إلى android في ملفات الموارد.
|
-A directory
|
تحدِّد هذه السياسة دليل مواد العرض المطلوب تضمينه في حزمة APK.
ويمكنك استخدام هذا الدليل لتخزين الملفات الأصلية التي لم تتم معالجتها. إلى معرفة المزيد، قراءة الوصول إلى الملفات الأصلية: |
-R file
|
تمرير ملف .flat فردي إلى link ، باستخدام دلالات overlay
بدون استخدام العلامة <add-resource> .
عند توفير ملف موارد يظهر على سطح ملف حالي، استخدام آخر مورد متضارب تم تقديمه. |
--package-id package-id
|
تُحدِّد رقم تعريف الحزمة المطلوب استخدامها لتطبيقك.
يجب أن يكون معرّف الحزمة الذي تحدده أكبر من أو يساوي 0x7f
ما لم يتم استخدامه مع
|
--allow-reserved-package-id
|
يسمح باستخدام معرّف حزمة محجوز. أرقام تعريف الحِزم المحجوزة هي أرقام تعريف يتم تخصيصها عادةً للحِزم التي تتم مشاركتها.
وفي النطاق من 0x02 إلى 0x7e، ضمنًا. باستخدام
يجب استخدام هذا الخيار فقط للحِزم التي تتضمّن إصدارًا من |
--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.
مناسبة كمدخل إلى
|
--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
يجب استخدام هذا الخيار مع
|
-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
:
أمر فرعي | الوصف |
---|---|
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
":
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
":
Option | الوصف |
---|---|
-o path
|
تحدِّد هذه السياسة مسار الإخراج لحِزمة APK الخاصة بالمورد المرتبط.
هذه علامة مطلوبة، لأنه يجب تحديد المسار حزمة APK الناتجة التي يمكنها الاحتفاظ بالموارد المرتبطة. |
-d directory
|
تحدّد المسار إلى دليل الإخراج للتقسيمات. |
-x path
|
تُحدِّد المسار إلى ملف الإعداد بتنسيق XML. |
-p
|
طباعة عناصر APK المتعددة والخروج. |
--target-densities density[,density[..]]
|
تحدِّد هذه السياسة قائمة مفصولة بفواصل تتضمّن كثافات الشاشة التي يتضمّنها ملف APK. التي تم تحسينها. تشمل جميع الموارد التي ستكون غير مستخدمة على أجهزة تتم إزالة الكثافات المحددة من حزمة APK. |
--resources-config-path path
|
تُحدِّد المسار إلى ملف تنسيق الملف: 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
":
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، وإعادة نشر المكتبة.