bundletool ابزار اساسی است که اندروید استودیو، افزونه اندروید گریدل و گوگل پلی برای ساخت یک بسته نرمافزاری اندروید از آن استفاده میکنند. bundletool میتواند یک بسته نرمافزاری را به فایلهای APK مختلفی که در دستگاهها مستقر میشوند، تبدیل کند.
بستههای نرمافزاری اندروید (ASB) و فایلهای APK آنها با bundletool ساخته میشوند. این ابزار همچنین به عنوان یک ابزار خط فرمان در دسترس است، بنابراین میتوانید بستههای نرمافزاری و بستههای SDK را خودتان بسازید و نسخه سمت سرور Google Play از APKهای برنامه یا APKهای SDK با قابلیت اجرا را دوباره ایجاد کنید.
دانلود bundletool
اگر هنوز bundletool دانلود نکردهاید، آن را از مخزن گیتهاب دانلود کنید.
ساخت و آزمایش یک بسته نرمافزاری
شما میتوانید از اندروید استودیو یا ابزار خط فرمان bundletool برای ساخت بسته نرمافزاری اندروید خود استفاده کنید و سپس تولید APKها را از این بسته نرمافزاری آزمایش کنید.
ساخت یک بسته نرمافزاری
از اندروید استودیو و افزونهی اندروید گریدل برای ساخت و امضای یک بستهی نرمافزاری اندروید استفاده کنید. با این حال، اگر استفاده از IDE امکانپذیر نیست - مثلاً به دلیل استفاده از یک سرور ساخت مداوم - میتوانید بستهی نرمافزاری خود را از خط فرمان نیز بسازید و با استفاده از jarsigner آن را امضا کنید.
برای اطلاعات بیشتر در مورد ساخت بستههای برنامه با bundletool ، به بخش ساخت بسته برنامه با استفاده از bundletool مراجعه کنید.
مجموعهای از فایلهای APK را از بسته برنامه خود تولید کنید
بعد از اینکه بسته نرمافزاری اندروید خود را ساختید، آزمایش کنید که گوگل پلی چگونه از آن برای تولید APK استفاده میکند و این APKها هنگام استقرار در یک دستگاه چگونه رفتار میکنند.
دو راه برای آزمایش بستهی اپلیکیشن شما وجود دارد:
- از ابزار خط فرمان
bundletoolبه صورت محلی استفاده کنید. - بسته خود را از طریق گوگل پلی و با استفاده از یک مسیر آزمایشی در کنسول پلی آپلود کنید .
این بخش نحوه استفاده از bundletool برای تست بسته برنامه شما به صورت محلی را توضیح میدهد.
وقتی bundletool از بسته برنامه شما فایلهای APK تولید میکند، این فایلهای APK تولید شده را در ظرفی به نام آرشیو مجموعه APK قرار میدهد که از پسوند فایل .apks استفاده میکند. برای تولید یک مجموعه APK برای تمام پیکربندیهای دستگاهی که برنامه شما از بسته برنامه شما پشتیبانی میکند، از دستور bundletool build-apks استفاده کنید، همانطور که نشان داده شده است:
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
اگر میخواهید APKها را روی یک دستگاه مستقر کنید، باید اطلاعات امضای برنامه خود را نیز، همانطور که در دستور زیر نشان داده شده است، وارد کنید. اگر اطلاعات امضا را مشخص نکنید، bundletool تلاش میکند APKهای شما را با یک کلید اشکالزدایی برای شما امضا کند.
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks --ks=/MyApp/keystore.jks --ks-pass=file:/MyApp/keystore.pwd --ks-key-alias=MyKeyAlias --key-pass=file:/MyApp/key.pwd
جدول زیر پرچمها و گزینههای مختلفی را که میتوانید هنگام استفاده از دستور bundletool build-apks تنظیم کنید، با جزئیات بیشتر شرح میدهد:
جدول ۱. گزینههای دستور bundletool build-apks
| پرچم | توضیحات |
|---|---|
--bundle= path | (الزامی) مسیر بستهی برنامهای که با استفاده از اندروید استودیو ساختهاید را مشخص میکند. برای کسب اطلاعات بیشتر، بخش «ساخت پروژه» را مطالعه کنید. |
--output= path | (الزامی) نام فایل خروجی .apks را مشخص میکند که شامل تمام مصنوعات APK برای برنامه شما است. برای آزمایش مصنوعات موجود در این فایل روی یک دستگاه، مراحل موجود در بخش نحوه استقرار APKها در یک دستگاه متصل را دنبال کنید. |
--overwrite | هر فایل خروجی موجود را با مسیری که با استفاده از گزینه --output مشخص میکنید، رونویسی میکند. اگر این پرچم را وارد نکنید و فایل خروجی از قبل وجود داشته باشد، با خطای ساخت مواجه خواهید شد. |
--aapt2= path | یک مسیر سفارشی به AAPT2 مشخص میکند. به طور پیشفرض، bundletool نسخه مخصوص به خود از AAPT2 را در خود جای داده است. |
--ks= path | (اختیاری) مسیر کلید اصلی استقرار مورد استفاده برای امضای APKها را مشخص میکند. اگر این پرچم را وارد نکنید، bundletool تلاش میکند APKهای شما را با یک کلید امضای اشکالزدایی امضا کند. |
--ks-pass=pass: passwordیا --ks-pass=file: /path/to/file | رمز عبور keystore شما را مشخص میکند. اگر رمز عبور را به صورت متن ساده مشخص میکنید، آن را با pass: مشخص کنید. اگر مسیر فایلی را که حاوی رمز عبور است ارسال میکنید، آن را با file: مشخص کنید. اگر یک keystore را با استفاده از پرچم --ks بدون مشخص کردن --ks-pass مشخص کنید، bundletool از شما رمز عبور را از خط فرمان درخواست میکند. |
--ks-key-alias= alias | نام مستعار کلید امضایی که میخواهید استفاده کنید را مشخص میکند. |
--key-pass=pass: passwordیا --key-pass=file: /path/to/file | رمز عبور کلید امضا را مشخص میکند. اگر رمز عبور را به صورت متن ساده مشخص میکنید، آن را با pass: مشخص کنید. اگر مسیر فایلی را که حاوی رمز عبور است ارسال میکنید، آن را با file: مشخص کنید.اگر این رمز عبور با رمز عبور خودِ keystore یکسان است، میتوانید این علامت را حذف کنید. |
--connected-device | به bundletool دستور میدهد تا APKهایی بسازد که پیکربندی یک دستگاه متصل را هدف قرار میدهند. اگر این پرچم را وارد نکنید، bundletool APKهایی را برای تمام پیکربندیهای دستگاهی که برنامه شما پشتیبانی میکند، تولید میکند. |
--device-id= serial-number | اگر بیش از یک دستگاه متصل دارید، از این پرچم برای مشخص کردن شناسه سریال دستگاهی که میخواهید برنامه خود را روی آن مستقر کنید، استفاده کنید. |
--device-spec= spec_json | مسیری به یک فایل .json ارائه میدهد که پیکربندی دستگاه مورد نظر شما را مشخص میکند. برای کسب اطلاعات بیشتر، به بخش نحوه تولید و استفاده از فایلهای JSON مشخصات دستگاه مراجعه کنید. |
--mode=universal | حالت را روی universal تنظیم میکند. اگر میخواهید bundletool یک APK واحد بسازد که شامل تمام کد و منابع برنامه شما باشد، از این گزینه استفاده کنید تا APK با تمام پیکربندیهای دستگاهی که برنامه شما پشتیبانی میکند سازگار باشد. نکته: به خاطر داشته باشید که این APKها از فایلهایی که برای یک پیکربندی خاص دستگاه بهینه شدهاند، بزرگتر هستند. با این حال، اشتراکگذاری آنها با آزمایشکنندگان داخلی که مثلاً میخواهند برنامه شما را روی پیکربندیهای مختلف دستگاه آزمایش کنند، آسانتر است. |
--local-testing | بسته برنامه شما را برای آزمایش محلی فعال میکند. آزمایش محلی امکان چرخههای آزمایش سریع و تکراری را بدون نیاز به آپلود در سرورهای Google Play فراهم میکند. برای مثالی از نحوه آزمایش نصب ماژول با استفاده از پرچم |
نصب فایلهای APK روی دستگاه متصل
پس از اینکه مجموعهای از APKها را ایجاد کردید، bundletool میتواند ترکیب مناسبی از APKها را از آن مجموعه به یک دستگاه متصل منتقل کند.
برای مثال، اگر دستگاه متصل شما اندروید ۵.۰ (سطح API ۲۱) یا بالاتر را اجرا میکند، bundletool فایل APK پایه، فایلهای APK ماژول ویژگی و فایلهای APK پیکربندی مورد نیاز برای اجرای برنامه شما روی آن دستگاه را ارسال میکند. از طرف دیگر، اگر دستگاه متصل شما اندروید ۴.۴ (سطح API ۲۰) یا پایینتر را اجرا میکند، bundletool به دنبال یک فایل APK چندگانه سازگار برای استقرار در دستگاه شما میگردد.
برای نصب برنامه خود از یک مجموعه APK، از دستور install-apks استفاده کنید و مسیر مجموعه APK را با استفاده از پرچم --apks= /path/to/apks مشخص کنید، همانطور که در دستور زیر نشان داده شده است. اگر چندین دستگاه متصل دارید، با اضافه کردن پرچم --device-id= serial-id یک دستگاه هدف را مشخص کنید.
bundletool install-apks --apks=/MyApp/my_app.apks
مجموعهای از APKهای مخصوص دستگاه تولید کنید
اگر نمیخواهید مجموعهای از APKها را برای تمام پیکربندیهای دستگاهی که برنامه شما پشتیبانی میکند، بسازید، میتوانید APKهایی بسازید که فقط پیکربندی یک دستگاه متصل را با استفاده از گزینه --connected-device ، همانطور که در دستور زیر نشان داده شده است، هدف قرار دهند. اگر چندین دستگاه متصل دارید، با وارد کردن پرچم --device-id= serial-id ، یک دستگاه هدف را مشخص کنید.
bundletool build-apks --connected-device --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
تولید و استفاده از فایلهای JSON مشخصات دستگاه
bundletool میتواند مجموعهای از APKها را تولید کند که پیکربندی دستگاه مشخصشده توسط یک فایل JSON را هدف قرار میدهد. برای تولید اولیه یک فایل JSON برای یک دستگاه متصل، دستور زیر را اجرا کنید:
bundletool get-device-spec --output=/tmp/device-spec.json
bundletool یک فایل JSON برای دستگاه شما در دایرکتوری ابزار ایجاد میکند. سپس میتوانید این فایل را به bundletool ارسال کنید تا مجموعهای از APKها تولید شود که فقط پیکربندی شرح داده شده در آن فایل JSON را هدف قرار میدهند، به شرح زیر:
bundletool build-apks --device-spec=/MyApp/pixel2.json --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
ایجاد دستی مشخصات دستگاه به صورت JSON
اگر به دستگاهی که میخواهید برای آن یک مجموعه APK هدفمند بسازید دسترسی ندارید - مثلاً اگر میخواهید برنامه خود را با دستگاهی که در دسترس ندارید امتحان کنید - میتوانید با استفاده از فرمت زیر، یک فایل JSON به صورت دستی ایجاد کنید:
{
"supportedAbis": ["arm64-v8a", "armeabi-v7a"],
"supportedLocales": ["en", "fr"],
"screenDensity": 640,
"sdkVersion": 27
}
سپس میتوانید این JSON را همانطور که در بخش قبل توضیح داده شد، به دستور bundle extract-apks ارسال کنید.
استخراج فایلهای APK مخصوص دستگاه از یک مجموعه APK موجود
اگر یک مجموعه APK موجود دارید و میخواهید زیرمجموعهای از APKهایی را که پیکربندی دستگاه خاصی را هدف قرار میدهند از آن استخراج کنید، میتوانید از دستور extract-apks استفاده کنید و یک فایل JSON با مشخصات دستگاه را به صورت زیر مشخص کنید:
bundletool extract-apks --apks=/MyApp/my_existing_APK_set.apks --output-dir=/MyApp/my_pixel2_APK_set.apks --device-spec=/MyApp/bundletool/pixel2.json
اندازه تخمینی دانلود فایلهای APK در یک مجموعه APK را اندازهگیری کنید
برای اندازهگیری حجم تخمینی دانلود فایلهای APK در یک مجموعه APK، همانطور که به صورت فشرده از طریق سیم ارائه میشوند، از دستور get-size total استفاده کنید:
bundletool get-size total --apks=/MyApp/my_app.apks
شما میتوانید رفتار دستور get-size total را با استفاده از پرچمهای زیر تغییر دهید:
جدول ۲. گزینههای دستور get-size total
| پرچم | توضیحات |
|---|---|
--apks= path | (الزامی) مسیر فایل مجموعه APK موجود که حجم دانلود آن اندازهگیری میشود را مشخص میکند. |
--device-spec= path | مسیر فایل مشخصات دستگاه (از get-device-spec یا ساخته شده به صورت دستی) را برای استفاده جهت تطبیق مشخص میکند. میتوانید یک مسیر جزئی را برای ارزیابی مجموعهای از پیکربندیها مشخص کنید. |
--dimensions= dimensions ابعاد مورد استفاده هنگام محاسبه تخمین اندازه را مشخص میکند. لیستی از موارد زیر را که با کاما از هم جدا شدهاند، میپذیرد: SDK ، ABI ، SCREEN_DENSITY و LANGUAGE . برای اندازهگیری در تمام ابعاد، ALL را مشخص کنید. | |
--instant | به جای APK های قابل نصب، حجم دانلود APK های دارای قابلیت Instant را اندازه گیری می کند. به طور پیش فرض، bundletool حجم دانلود APK های قابل نصب را اندازه گیری می کند. |
--modules= modules | لیستی از ماژولهای جدا شده با کاما در مجموعه APK را برای در نظر گرفتن در اندازهگیری مشخص میکند. دستور bundletool به طور خودکار هر ماژول وابستهای را برای مجموعه مشخص شده در نظر میگیرد. به طور پیشفرض، این دستور حجم دانلود تمام ماژولهای نصب شده در طول اولین دانلود را اندازهگیری میکند. |
منابع اضافی
برای کسب اطلاعات بیشتر در مورد استفاده از bundletool ، App Bundles: Testing bundles with bundletool و Play Console را تماشا کنید.