ابزار بسته بندی

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 از بسته برنامه شما فایل‌های 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 با تمام پیکربندی‌های دستگاهی که برنامه شما پشتیبانی می‌کند سازگار باشد.

نکته: bundletool فقط شامل ماژول‌های ویژگی است که در یک APK جهانی، <dist:fusing dist:include="true"/> در مانیفست خود مشخص می‌کنند. برای کسب اطلاعات بیشتر، درباره مانیفست ماژول ویژگی مطالعه کنید.

به خاطر داشته باشید که این APKها از فایل‌هایی که برای یک پیکربندی خاص دستگاه بهینه شده‌اند، بزرگ‌تر هستند. با این حال، اشتراک‌گذاری آنها با آزمایش‌کنندگان داخلی که مثلاً می‌خواهند برنامه شما را روی پیکربندی‌های مختلف دستگاه آزمایش کنند، آسان‌تر است.

--local-testing بسته برنامه شما را برای آزمایش محلی فعال می‌کند. آزمایش محلی امکان چرخه‌های آزمایش سریع و تکراری را بدون نیاز به آپلود در سرورهای Google Play فراهم می‌کند.

برای مثالی از نحوه آزمایش نصب ماژول با استفاده از پرچم --local-testing ، به Locally test module installs مراجعه کنید.

نصب فایل‌های 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 را تماشا کنید.