AAPT2 (ابزار بسته بندی دارایی اندروید) یک ابزار ساخت است که Android Studio و پلاگین Android Gradle از آن برای کامپایل و بسته بندی منابع برنامه شما استفاده می کنند. AAPT2 منابع را در قالبی باینری که برای پلتفرم اندروید بهینه شده است، تجزیه، نمایه سازی و کامپایل می کند.
پلاگین Android Gradle نسخه 3.0.0 و بالاتر AAPT2 را به طور پیش فرض فعال می کند. معمولاً نیازی نیست خودتان aapt2
فراخوانی کنید. با این حال، اگر ترجیح می دهید از ترمینال و سیستم ساخت خود به جای Android Studio استفاده کنید، می توانید از AAPT2 از خط فرمان استفاده کنید. همچنین می توانید خطاهای ساخت مربوط به AAPT2 را از خط فرمان رفع اشکال کنید. برای انجام این کار، AAPT2 را به عنوان یک ابزار مستقل در Android SDK Build Tools نسخه 26.0.2 و بالاتر پیدا کنید.
برای دانلود Android SDK Build Tools از خط فرمان، از sdkmanager
استفاده کنید و دستور زیر را اجرا کنید:
sdkmanager "build-tools;build-tools-version"
پس از دانلود SDK Build Tools، AAPT2 را در android_sdk /build-tools/ version /
پیدا کنید.
از آنجایی که بازبینیهای ابزارهای ساخت SDK Android اغلب منتشر نمیشوند، نسخه AAPT2 موجود در ابزار ساخت SDK شما ممکن است جدیدترین نسخه نباشد. برای دریافت آخرین نسخه AAPT2، AAPT2 را از Google Maven دانلود کنید .
برای استفاده از AAPT2 از خط فرمان در لینوکس یا مک، دستور aapt2
اجرا کنید. در ویندوز، دستور 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] .جار
به عنوان مثال، برای دانلود نسخه 3.2.0-alpha18-4804415 برای ویندوز، از: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ 3.2.0-alpha18- استفاده کنید. 4804415 /aapt2- 3.2.0-alpha18-4804415 - windows .jar
در یک مرورگر به آدرس URL بروید. دانلود AAPT2 به زودی آغاز می شود.
فایل JAR را که به تازگی دانلود کرده اید از بسته بندی خارج کنید.
فایل JAR باید حاوی یک فایل اجرایی
aapt2
و تعدادی کتابخانه باشد که فایل اجرایی به آنها بستگی دارد.
کامپایل
AAPT2 از کامپایل انواع منابع اندروید مانند فایل های ترسیمی و XML پشتیبانی می کند. هنگامی که AAPT2 را برای کامپایل فراخوانی می کنید، یک فایل منبع واحد را به عنوان ورودی در هر فراخوانی ارسال کنید. سپس AAPT2 فایل را تجزیه می کند و یک فایل باینری میانی با پسوند .flat
تولید می کند.
هنگام ارسال کل دایرکتوری ها، AAPT2 همه فایل های موجود در فهرست را دوباره کامپایل می کند، حتی زمانی که تنها یک منبع تغییر کرده باشد. اگرچه میتوانید دایرکتوریهای منابع حاوی بیش از یک فایل منبع را با استفاده از پرچم --dir
به AAPT2 منتقل کنید، اما از این طریق از مزایای کامپایل منابع افزایشی بهره نمیبرید.
همانطور که در جدول زیر نشان داده شده است، انواع فایل های خروجی بر اساس ورودی هایی که برای کامپایل ارائه می کنید، متفاوت است:
ورودی | خروجی |
---|---|
فایلهای منبع XML، مانند String و Style ، که در دایرکتوری res/values/ قرار دارند | جدول منابع با *.arsc.flat به عنوان پسوند آن. |
همه فایل های منبع دیگر | همه فایلهای غیر از فایلهای زیر دایرکتوری علاوه بر این، همه فایلهای PNG بهطور پیشفرض فشرده میشوند و پسوندهای |
خروجیهای فایلهای AAPT2 قابل اجرا نیستند و بعداً باید این فایلهای باینری را به عنوان ورودی در فاز پیوند وارد کنید تا یک APK ایجاد کنید. با این حال، فایل APK تولید شده یک فایل اجرایی نیست که بتوانید فوراً آن را در دستگاه اندرویدی مستقر کنید، زیرا حاوی فایلهای 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 نشان داده شده است:
گزینه | توضیحات |
---|---|
-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 | در صورت مشخص شدن، قوانین قابل مشاهده یکسانی را برای styleable ها اعمال می کند که برای همه منابع دیگر استفاده می شود. در غیر این صورت، همه استایلها عمومی میشوند. |
-visibility [ public | private | default |] | قابلیت مشاهده منابع کامپایل شده را در سطح مشخص شده تنظیم می کند. |
-trace-folder folder | یک قطعه ردیابی systrace JSON به قسمت مشخص شده ایجاد می کند |
-source-path path | مسیر فایل منبع فایل منبع کامپایل شده را روی آن تنظیم می کند |
-h | راهنمای ابزار را نمایش می دهد. |
-v | گزارش دقیق را فعال می کند. |
پیوند
در مرحله پیوند، AAPT2 همه فایلهای میانی را که فاز کامپایل تولید میکند، مانند جداول منبع، فایلهای XML باینری و فایلهای PNG پردازش شده، ادغام میکند و سپس فایلها را در یک APK بسته بندی میکند. علاوه بر این، فایلهای کمکی دیگری مانند فایلهای قوانین R.java
و ProGuard میتوانند در این مرحله تولید شوند. با این حال، APK تولید شده حاوی بایت کد DEX نیست و بدون امضا است. شما نمی توانید این APK را در دستگاهی مستقر کنید.
اگر از پلاگین Android Gradle برای ساخت برنامه خود از خط فرمان استفاده نمیکنید، میتوانید از ابزارهای خط فرمان دیگری مانند d8 برای کامپایل بایت کد جاوا در بایت کد 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
می توانید از گزینه های زیر استفاده کنید:
گزینه | توضیحات |
---|---|
-o path | مسیر خروجی را برای APK منبع پیوند شده مشخص می کند. این یک پرچم الزامی است، زیرا باید مسیر APK خروجی را که میتواند منابع مرتبط را نگه دارد، مشخص کنید. |
--manifest file | مسیر فایل مانیفست اندروید برای ساخت را مشخص می کند. این یک پرچم ضروری است، زیرا فایل مانیفست اطلاعات ضروری در مورد برنامه شما، مانند نام بسته و شناسه برنامه را در بر می گیرد. |
-I | مسیر android در فایل های منبع خود استفاده می کنید، این پرچم ضروری است. |
-A directory | یک فهرست دارایی را مشخص می کند تا در APK گنجانده شود. می توانید از این دایرکتوری برای ذخیره فایل های اصلی و پردازش نشده استفاده کنید. برای کسب اطلاعات بیشتر، دسترسی به فایلهای اصلی را بخوانید. |
-R file | یک فایل .flat منفرد را با استفاده از معناشناسی overlay بدون استفاده از تگ <add-resource> به link ارسال می کند.وقتی یک فایل منبعی ارائه میکنید که روی یک فایل موجود همپوشانی دارد، آخرین منبع متناقض داده شده استفاده میشود. |
--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 خود با کتابخانه قابل ترسیم برداری استفاده کنید. |
--no-version-transitions | نسخه خودکار منابع انتقال را غیرفعال می کند. از این پرچم فقط هنگام ساختن APK خود با کتابخانه پشتیبانی انتقال استفاده کنید. |
--no-resource-deduping | حذف خودکار منابع با مقادیر یکسان در پیکربندیهای سازگار را غیرفعال میکند. |
--enable-sparse-encoding | رمزگذاری ورودی های پراکنده را با استفاده از درخت جستجوی باینری فعال می کند. این برای بهینه سازی اندازه APK مفید است اما به قیمت عملکرد بازیابی منابع. |
-z | نیاز به محلی سازی رشته هایی با علامت "پیشنهاد شده" دارد. |
-c config | فهرستی از پیکربندی ها را که با کاما جدا شده اند ارائه می دهد. به عنوان مثال، اگر وابستگی به کتابخانه پشتیبانی دارید که حاوی ترجمه برای چندین زبان است، می توانید منابع را فقط برای پیکربندی زبان داده شده مانند انگلیسی یا اسپانیایی فیلتر کنید. شما باید پیکربندی زبان را با یک کد زبان دو حرفی ISO 639-1، به صورت اختیاری با یک کد منطقه ای ISO 3166-1-1-alpha-2 دو حرفی که قبل از آن با حروف کوچک "r" قرار می گیرد، تعریف کنید. به عنوان مثال، en-rUS. |
--preferred-density density | به AAPT2 اجازه میدهد تا نزدیکترین چگالی منطبق را انتخاب کند و بقیه را حذف کند. چندین واجد شرایط تراکم پیکسلی برای استفاده در برنامه شما وجود دارد، مانند ldpi، hdpi، و xhdpi. وقتی یک چگالی ترجیحی را مشخص میکنید، AAPT2 نزدیکترین چگالی منطبق را در جدول منبع انتخاب و ذخیره میکند و بقیه را حذف میکند. |
--output-to-dir | محتویات APK را به دایرکتوری مشخص شده با -o خروجی می دهد.اگر با استفاده از این پرچم خطایی دریافت کردید، میتوانید با ارتقا به Android SDK Build Tools نسخه 28.0.0 یا بالاتر آن را برطرف کنید. |
--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 | بسته جاوای سفارشی را برای تولید R.java در زیر مشخص می کند. |
--extra-packages package_name | همان فایل R.java را تولید می کند، اما با نام های بسته متفاوت. |
--add-javadoc-annotation annotation | یک حاشیه نویسی JavaDoc به تمام کلاس های جاوا تولید شده اضافه می کند. |
--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 | یک کتابخانه مشترک زمان اجرا اندروید ایجاد می کند. |
--static-lib | یک کتابخانه اندروید ثابت تولید می کند. |
--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 | قطعه ردیابی systrace JSON را در 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 Container (APC) تولید شده در طول کامپایل را چاپ می کند. |
badging | اطلاعات استخراج شده از مانیفست APK را چاپ می کند. |
configurations | هر پیکربندی استفاده شده توسط یک منبع در APK را چاپ می کند. |
overlayable | منابع قابل پوشش APK را چاپ می کند. |
packagename | نام بسته APK را چاپ می کند. |
permissions | مجوزهای استخراج شده از مانیفست APK را چاپ می کند. |
strings | محتویات مجموعه رشته های جدول منبع APK را چاپ می کند. |
styleparents | والدین سبک های استفاده شده در APK را چاپ می کند. |
resources | محتویات جدول منابع APK را چاپ می کند. |
xmlstrings | رشته ها را از XML کامپایل شده APK چاپ می کند. |
xmltree | درختی از XML کامپایل شده APK را چاپ می کند. |
گزینه های تخلیه
از گزینه های زیر با dump
استفاده کنید:
گزینه | توضیحات |
---|---|
--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
بهینه سازی گزینه ها
برای optimize
می توانید از گزینه های زیر استفاده کنید:
گزینه | توضیحات |
---|---|
-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 | راهنمای ابزار را نمایش می دهد. |
تبدیل کنید
به طور پیشفرض، دستور compile
AAPT منابع را در قالب باینری که برای 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
از گزینه های زیر استفاده کنید:
گزینه | توضیحات |
---|---|
-o path | مسیر خروجی را برای APK منبع پیوند شده مشخص می کند. این یک پرچم الزامی است، زیرا باید مسیر APK خروجی را که میتواند منابع مرتبط را نگه دارد، مشخص کنید. | --output-format [proto|binary] | فرمت خروجی مقادیر پذیرفته شده proto و binary هستند. در صورت تنظیم نشدن، پیشفرض روی binary است. |
--enable-sparse-encoding | رمزگذاری ورودی های پراکنده را با استفاده از درخت جستجوی باینری فعال می کند. این گزینه برای بهینه سازی اندازه APK مفید است اما به قیمت عملکرد بازیابی منابع. |
--keep-raw-values | مقادیر صفت خام را در فایل های XML حفظ می کند. |
-v | پرحرفی خروجی را افزایش می دهد. |
-h | راهنمای ابزار را نمایش می دهد. |
حالت دیمون
AAPT نسخه 2.19 حالت دیمون را برای صدور دستورات معرفی کرد. حالت Daemon به شما امکان می دهد چندین دستور را در یک جلسه AAPT وارد کنید.
نحو دیمون
حالت Daemon را با دستور زیر شروع کنید:
aapt2 daemon
هنگامی که حالت دیمون اجرا می شود، می توانید دستورات را وارد کنید. هر آرگومان دستور باید در یک خط جداگانه قرار گیرد و یک خط خالی در انتهای دستور باشد. با تایپ Control+D از حالت daemon خارج شوید.
دستورات 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/
این دستورات را می توان در حالت daemon به صورت زیر وارد کرد:
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
گزینه های حالت دیمون
تنها گزینه برای حالت daemon --trace-folder folder
است که یک قطعه ردیابی systrace
JSON را در folder مشخص ایجاد می کند.
نسخه
نسخه AAPT2 مورد استفاده خود را با دستور version
تعیین کنید:
aapt2 version Android Asset Packaging Tool (aapt) 2.19-8678579
هنگام استفاده از AAPT2 رفتار تغییر می کند
قبل از AAPT2، AAPT نسخه پیشفرض ابزار بستهبندی دارایی Android بود که اکنون منسوخ شده است. اگرچه AAPT2 باید فوراً با پروژههای قدیمیتر کار کند، این بخش برخی از تغییرات رفتاری را توضیح میدهد که باید از آنها آگاه باشید.
سلسله مراتب عناصر در مانیفست اندروید
در نسخههای قبلی 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
پیکربندی نادرست کتابخانه ها
اگر برنامه شما به کتابخانه شخص ثالثی که با استفاده از نسخههای قدیمیتر Android SDK Build Tools ساخته شده است، وابستگی دارد، ممکن است برنامه شما در زمان اجرا بدون نمایش هیچ گونه خطا یا هشداری از کار بیفتد. این خرابی ممکن است رخ دهد زیرا در طول ایجاد کتابخانه، فیلدهای R.java
final
اعلام می شوند. در نتیجه، تمام شناسه های منبع در کلاس های کتابخانه به صورت خطی قرار می گیرند.
AAPT2 بر این تکیه میکند که میتواند هنگام ساخت برنامه شما، شناسهها را دوباره به منابع کتابخانه اختصاص دهد. اگر کتابخانه فرض کند شناسهها final
هستند و آنها را در کتابخانه DEX درونبندی کند، عدم تطابق زمان اجرا وجود دارد.
برای رفع این خطا، با نویسنده کتابخانه تماس بگیرید تا کتابخانه را با استفاده از آخرین نسخه Android SDK Build Tools بازسازی کند و کتابخانه را دوباره منتشر کنید.