أداة تجميع

bundletool هي الأداة الأساسية التي يستخدمها "استوديو Android" ومكوّن Android Gradle الإضافي وGoogle Play لإنشاء "مجموعة حزمات تطبيق Android". يمكن لـ bundletool تحويل حزمة تطبيق إلى حِزم APK متنوعة يتم نشرها على الأجهزة.

تم إنشاء حِزم تطوير البرامج (SDK) لنظام التشغيل Android (ASBs) وملفات APK باستخدام bundletool. وهو متاح أيضًا كأداة سطر الأوامر، لذا يمكنك إنشاء حِزم تطبيقات وحِزم SDK بنفسك وإعادة إنشاء إصدار Google Play من جهة الخادم لحِزم APK في تطبيقك أو حِزم APK الخاصة بحزمة تطوير البرامج (SDK) التي يتم تفعيلها في وقت التشغيل.

تنزيل bundletool

يمكنك تنزيل "bundletool" من مستودع جيت هب، إذا لم يسبق لك تنزيله.

إنشاء حِزمة تطبيق واختبارها

يمكنك استخدام "استوديو Android" أو أداة سطر الأوامر bundletool لإنشاء مجموعة حزمات تطبيق Android ثم اختبار إنشاء حِزم APK من حِزمة التطبيق هذه.

إنشاء حِزمة تطبيق

استخدِم "استوديو Android" والمكوّن الإضافي لنظام Gradle المتوافق مع Android من أجل إنشاء "مجموعة حزمات تطبيق Android" وتوقيعها. ومع ذلك، إذا لم يكن استخدام بيئة تطوير البرامج (IDE) خيارًا متاحًا، بسبب استخدامك خادم إصدار متواصل مثلاً، يمكنك أيضًا إنشاء حِزمة تطبيقك من سطر الأوامر وتوقيعها باستخدام jarsigner.

لمزيد من المعلومات حول إنشاء حِزم تطبيقات باستخدام "bundletool"، يُرجى الاطّلاع على إنشاء حِزمة تطبيق باستخدام الحزم.

إنشاء مجموعة من حِزم APK من حِزمة تطبيقك

بعد إنشاء "مجموعة حزمات تطبيق Android"، اختبِر طريقة استخدام Google Play لها لإنشاء حِزم 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:

الجدول 1. خيارات الأمر bundletool build-apks

إبلاغ الوصف
--bundle=path (مطلوب) تحدِّد هذه السمة مسار حِزمة التطبيق التي أنشأتها باستخدام "استوديو Android". لمعرفة المزيد من المعلومات، يمكنك الاطّلاع على مقالة إنشاء مشروعك.
--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
تحدِّد هذه السياسة كلمة مرور ملف تخزين المفاتيح. إذا حدّدت كلمة مرور بنص عادي، يمكنك تأهُّلها باستخدام pass:. إذا مررت المسار إلى ملف يحتوي على كلمة المرور، يجب تأهُّله باستخدام file:. إذا حددت ملف تخزين مفاتيح باستخدام العلامة --ks بدون تحديد --ks-pass، يطلب منك bundletool إدخال كلمة مرور من سطر الأوامر.
--ks-key-alias=alias تحدد هذه السمة الاسم المستعار لمفتاح التوقيع الذي تريد استخدامه.
--key-pass=pass:password
أو
--key-pass=file:/path/to/file
تُحدِّد كلمة المرور لمفتاح التوقيع. إذا حدّدت كلمة مرور بنص عادي، يمكنك تأهُّلها باستخدام pass:. إذا مررت المسار إلى ملف يحتوي على كلمة المرور، يجب تأهُّله باستخدام file:.

إذا كانت كلمة المرور هذه مماثلة لكلمة مرور ملف تخزين المفاتيح نفسه، يمكنك حذف هذه العلامة.

--connected-device توجه bundletool إلى إنشاء حِزم APK تستهدف إعداد جهاز متصل. في حال عدم تضمين هذه العلامة، سينشئ bundletool حِزم APK لجميع إعدادات الأجهزة التي يتوافق معها تطبيقك.
--device-id=serial-number إذا كان لديك أكثر من جهاز واحد متصل، استخدِم هذه العلامة لتحديد المعرّف التسلسلي للجهاز الذي تريد نشر التطبيق عليه.
--device-spec=spec_json يوفّر مسارًا لملف .json يحدّد إعداد الجهاز الذي تريد استهدافه. للاطّلاع على مزيد من المعلومات، انتقِل إلى القسم المتعلق بكيفية إنشاء ملفات JSON لمواصفات الجهاز واستخدامها.
--mode=universal لضبط الوضع على universal. استخدِم هذا الخيار إذا كنت تريد من bundletool إنشاء حِزمة APK واحدة تتضمّن جميع رموز تطبيقك وموارده، حتى تتوافق حزمة APK مع جميع إعدادات الأجهزة التي يتوافق معها تطبيقك.

ملاحظة: لا تتضمن bundletool سوى وحدات الميزات التي تحدد <dist:fusing dist:include="true"/> في ملف البيان في حزمة APK عامة. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على بيان وحدة الميزات.

يُرجى العلم أنّ حِزم APK هذه أكبر من تلك المُحسَّنة لإعداد جهاز معيّن. ومع ذلك، من الأسهل مشاركتها مع المختبِرين الداخليين الذين يريدون مثلاً اختبار تطبيقك من خلال عدة إعدادات للأجهزة.

--local-testing يؤدي هذا الإجراء إلى تفعيل ميزة الاختبار المحلي لحِزمة تطبيقك. يتيح الاختبار المحلي إجراء دورات اختبار سريعة وتكرارية بدون الحاجة إلى التحميل إلى خوادم Google Play.

للاطّلاع على مثال حول طريقة اختبار تثبيت الوحدة باستخدام علامة --local-testing، يمكنك الاطّلاع على عمليات تثبيت الوحدات التجريبية محليًا.

نشر حِزم APK على جهاز متصل

بعد إنشاء مجموعة من حِزم APK، يستطيع bundletool نشر المجموعة المناسبة من حِزم APK من هذه المجموعة على جهاز متصل.

على سبيل المثال، إذا كان لديك جهاز متصل يعمل بالإصدار 5.0 من نظام التشغيل Android (المستوى 21 من واجهة برمجة التطبيقات) أو بإصدار أحدث، سيدفع bundletool حِزمة APK الأساسية وحِزم APK لوحدات الميزات وملفات APK للضبط المطلوبة لتشغيل تطبيقك على ذلك الجهاز. بدلاً من ذلك، إذا كان جهازك المتصل يعمل بالإصدار 4.4 من نظام التشغيل Android (المستوى 20 لواجهة برمجة التطبيقات) أو أقل، سيبحث تطبيق 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 باستخدام العلامات التالية:

الجدول 2. خيارات الأمر get-size total

إبلاغ الوصف
--apks=path (مطلوب) لتحديد المسار إلى ملف مجموعة APK الحالي الذي يتم قياس حجم تنزيله.
--device-spec=path تحدّد هذه السياسة المسار إلى ملف مواصفات الجهاز (من get-device-spec أو التي يتم إنشاؤها يدويًا) المطلوب استخدامها للمطابقة. يمكنك تحديد مسار جزئي لتقييم مجموعة من الإعدادات.
--dimensions=dimensions تحدد الأبعاد المستخدمة عند حساب تقديرات الحجم. يتم قبول قائمة مفصولة بفواصل تضم: SDK وABI وSCREEN_DENSITY وLANGUAGE. لإجراء القياس على جميع السمات، حدِّد ALL.
--instant يقيس حجم تنزيل حِزم APK التي تم تفعيل ميزة التطبيقات الفورية فيها بدلاً من حِزم APK القابلة للتثبيت. يقيس bundletool تلقائيًا أحجام تنزيل حِزم APK القابلة للتثبيت.
--modules=modules تُحدِّد هذه السياسة قائمة مفصولة بفواصل من الوحدات في حزمة APK التي يجب أخذها في الاعتبار في القياس. يتضمن الأمر bundletool تلقائيًا أي وحدات تابعة للمجموعة المحددة. يقيس الأمر تلقائيًا حجم التنزيل لجميع الوحدات التي تم تثبيتها أثناء عملية التنزيل الأولى.

إنشاء حِزمة تطبيق تتضمّن حزمة SDK تعتمد على حزمة SDK (إصدار تجريبي)

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

تتضمّن كل وحدة حِزمة تطبيق ملف المخزن المؤقت لبروتوكول الوحدة (.pb) على النحو التالي: runtime_enabled_sdk_config.pb. يتضمّن هذا الملف قائمة حِزم تطوير البرامج (SDK) التي تعتمد عليها وحدة حِزمة التطبيق للحصول على التعريف الكامل لهذا الملف، اطّلِع على ملف runtime_enabled_sdk_config.proto.

لإنشاء حِزمة تطبيق بتبعية حزمة SDK، اتّبِع الخطوات الواردة في القسم المتعلّق بإنشاء حِزمة تطبيق باستخدام الحزم باستخدام أداة الحزم وإضافة ملف runtime_enabled_sdk_config.pb إلى ملف ZIP لكل وحدة تطبيق باستخدام رمز برمجي وموارد مجمّعة.

في ما يلي بعض الحقول البارزة في ملف runtime_enabled_sdk_config.pb:

  • ملخص الشهادة: ملخص SHA-256 للشهادة للمفتاح المستخدم لتوقيع حزم APK لحزمة SDK. ويتوافق هذا مع الشهادة في ملف SdkMetadata.pb في تنسيق أرشيف SDK لنظام التشغيل Android.

  • معرِّف حزمة الموارد: معرِّف الحزمة الذي تتم إعادة تخصيص جميع الموارد في حزمة تطوير البرامج (SDK) هذه إليه عند إنشاء حِزم APK لتضمين حزمة SDK في التطبيق. يؤدي ذلك إلى تفعيل التوافق مع الأنظمة القديمة.

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

إنشاء حِزم APK من حزمة تطبيق تستخدِم حزمة تطوير برامج (SDK) (إصدار تجريبي)

لإنشاء حِزم APK من حِزمة تطبيقك، اتّبِع الخطوات الواردة في القسم المتعلّق بإنشاء مجموعة حِزم APK من حِزمة تطبيقك أو القسم المتعلّق بإنشاء مجموعة حِزم APK خاصة بالجهاز وقدِّم الأمر bundletool build-apks مع حِزم SDK التي يعتمد عليها التطبيق. يمكن توفير حِزم SDK هذه بتنسيق حزمة SDK أو بتنسيق "أرشيف SDK".

يمكنك تقديم حِزم SDK كحِزم SDK من خلال إضافة العلامة --sdk-bundles، على النحو التالي:

bundletool build-apks --bundle=app.aab --sdk-bundles=sdk1.asb,sdk2.asb \
    --output=app.apks

يمكنك تقديم حِزم SDK كأرشيفات SDK من خلال إضافة العلامة --sdk-archives، كما يلي:

bundletool build-apks --bundle=app.aab --sdk-archives=sdk1.asar,sdk2.asar \
    --output=app.apks
إنشاء حِزم APK من حِزمة تطبيق تتضمّن تبعية حزمة SDK للأجهزة التي لا تتوافق مع مكتبة حِزم SDK

لا تتيح الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android تثبيت مكتبات حِزم SDK أو تشغيلها في وقت تشغيل حزمة تطوير البرامج (SDK). تخفي أداة BundleTool مستوى تعقيد التوافق مع الأنظمة القديمة وتنشئ صيغًا متعددة لمجموعة APK من حِزمة التطبيق نفسها عند تشغيل bundletool build-apks باستخدام الخيار --sdk-bundles أو --sdk-archives. تستهدف الصيغ المتعددة أجهزة ذات إمكانات مختلفة:

  • تتوفّر صيغة للأجهزة الأحدث حيث يتم تثبيت حزمة SDK كحزمة منفصلة عن التطبيق ولا تتضمّن حِزم APK الخاصة بالتطبيق أي محتوى SDK.
  • هناك صيغة واحدة أو أكثر للأجهزة القديمة، حيث تتم إضافة حِزم APK الخاصة بحزمة تطوير البرامج (SDK) إلى حِزمة APK للتطبيق التي تم ضبطها كتقسيمات إضافية لحِزم APK. تنتمي حزم APK لحزمة تطوير البرامج (SDK) إلى حزمة التطبيق. وفي هذه الحالة، تتم محاكاة وقت تشغيل حزمة SDK في وقت تشغيل التطبيق على الجهاز.

مثلما تنشئ حِزم APK لحِزم التطبيقات التي لا تعتمد على حِزم SDK، يعرض bundletool extract-apks وbundletool install-apks مجموعة مفلتَرة من حِزم APK من أفضل صيغة للجهاز المتصل أو لإعدادات الجهاز المتوفّرة.

في حالات الاستخدام المتقدّمة التي تهتم فقط بإنشاء تقسيمات حِزم APK من أرشيف حِزم SDK لتطبيق معيّن على الأجهزة القديمة، استخدِم الأمر bundletool build-sdk-apks-for-app على النحو التالي:

bundletool build-sdk-apks-for-app --app-properties=app-properties.json \
    --sdk-archive=sdk.asar --output=sdk.apks

يجب أن يحتوي ملف app-properties على الحقول الموضّحة في ملف runtime_enabled_sdk_config.proto. إليك الشكل الذي يبدو عليه ملف app-properties:

{
  "package_name": "com.my.app",
  "version_code": 1234,
  "min_sdk_version": 21,
  "resources_package_id": 0x7e
}

ينشئ الأمر bundletool build-sdk-apks-for-app مجموعة فرعية من حِزم APK للتطبيق التي تتوافق مع محتوى حزمة تطوير البرامج (SDK) ضمن اسم حزمة التطبيقات. يمكنك دمج حزم APK هذه مع حزم APK أخرى تحتوي على محتوى التطبيق. على سبيل المثال، إذا قمت بإنشائها بشكل منفصل وتزايدي، وتم تثبيتها معًا على جهاز لا يتيح وقت تشغيل SDK.

إنشاء حزمة SDK واختبارها (إصدار تجريبي)

يمكنك استخدام bundletool لإنشاء ASB واختبار إنشاء الملفات اللازمة للتثبيت والتوزيع.

إنشاء حزمة SDK

يمكنك إنشاء ASB من سطر الأوامر وتوقيعه باستخدام jarsigner.

لإنشاء حزمة SDK، يُرجى اتّباع الخطوات التالية:

  1. إنشاء ملف البيان والموارد الخاصة بحزمة SDK بتنسيق نموذج أوّلي من خلال اتّباع الخطوات نفسها المُستخدَمة في حِزمة التطبيق

  2. وضع الموارد والرموز المجمّعة لحزمة تطوير البرامج (SDK) في ملف ZIP أساسي، كما تفعل مع وحدة التطبيق.

  3. أنشِئ ملف SdkModulesConfig.pb.json وملف SdkBundleConfig.pb.json بالتنسيقَين الواردَين في مواصفات حزمة تطوير البرامج (SDK) لنظام التشغيل Android.

  4. يمكنك إنشاء ASB باستخدام الأمر bundletool build-sdk-bundle، على النحو التالي:

bundletool build-sdk-bundle --sdk-bundle-config=SdkBundleConfig.pb.json \
    --sdk-modules-config=SdkModulesConfig.pb.json \
    --modules=base.zip --output=sdk.asb

يوضِّح الجدول التالي بمزيد من التفصيل العلامات والخيارات المختلفة التي يمكنك ضبطها عند استخدام الأمر bundletool build-sdk-bundle.

الجدول 3. خيارات الأمر bundletool build-sdk-bundle

إبلاغ الوصف
--modules (مطلوب): ملف الوحدة الذي تريد إنشاء ASB النهائي منه.
--output (مطلوب) المسار إلى المكان المطلوب إنشاء ASB فيه.
--sdk-modules-config (مطلوب) المسار إلى ملف JSON الذي يصف ضبط وحدات SDK. للتعرّف على طريقة تنسيق ملف JSON، يمكنك الاطّلاع على القسم مواصفات حزمة SDK لنظام التشغيل Android.
--sdk-bundle-config المسار إلى ملف JSON الذي يصف إعدادات حزمة SDK. للتعرّف على طريقة تنسيق ملف JSON، يمكنك الاطّلاع على القسم مواصفات حزمة SDK لنظام التشغيل Android.
--metadata-file يشير ذلك المصطلح إلى الملف المطلوب تضمين بيانات التعريف فيه لنطاق ASB. ويكون تنسيق قيمة العلامة هو <bundle-path>:<physical-file>، حيث يشير <bundle-path> إلى موقع الملف داخل دليل البيانات الوصفية لحزمة SDK و<physical-file> هو ملف حالي يحتوي على البيانات الأولية المطلوب تخزينها. ويمكن تكرار العلم.
--overwrite وفي حال ضبط هذا الخيار، سيحل محل أي إخراج حالي سابق.

إنشاء حِزم APK من حزمة SDK

بعد إنشاء ASB، يمكنك اختبار حزمة SDK محليًا من خلال إنشاء ملفات APK بها باستخدام الأمر bundletool build-sdk-apks، كما هو موضّح في الرمز التالي:

bundletool build-sdk-apks --sdk-bundle=sdk.asb --output=sdk.apks

عندما ينشئ bundletool ملفات APK من حزمة SDK، تتضمّن الأداة حِزم APK في حاوية تُسمى أرشيف مجموعة APK الذي يستخدم إضافة الملف .apks. ينشئ bundletool ملف APK واحدًا مستقلاً من حزمة SDK يستهدف جميع إعدادات الأجهزة.

إذا أردت نشر ASB على أحد الأجهزة، عليك أيضًا تضمين معلومات توقيع تطبيقك، كما هو موضَّح في الأمر التالي:

bundletool build-sdk-apks --sdk-bundle=sdk.asb --output=sdk.apks \
    --ks=keystore.jks \
    --ks-pass=file:/keystore.pwd \
    --ks-key-alias=KeyAlias \
    --key-pass=file:/key.pwd

يوضِّح الجدول التالي بمزيد من التفصيل العلامات والخيارات المختلفة التي يمكنك ضبطها عند استخدام الأمر bundletool build-sdk-apks.

الجدول 4. خيارات الأمر bundletool build-sdk-apks

إبلاغ الوصف
--sdk-bundle (مطلوب) المسار إلى حزمة SDK. ويجب أن تتضمن الإضافة .asb.
--output (مطلوب)، بشكل تلقائي، المسار الذي تريد إنشاء أرشيف مجموعة APK فيه. وفي حال استخدام --output-format=DIRECTORY، يكون هذا هو المسار المؤدي إلى الدليل الذي تريد تخزين حِزم APK التي تم إنشاؤها فيها.
--ks المسار إلى ملف تخزين المفاتيح الذي تريد استخدامه لتوقيع حِزم APK التي تم إنشاؤها.
--ks-key-alias تمثّل هذه السمة الاسم البديل للمفتاح الذي سيتم استخدامه في ملف تخزين المفاتيح لتوقيع حِزم APK التي تم إنشاؤها.
--key-pass

هي كلمة مرور المفتاح في ملف تخزين المفاتيح التي سيتم استخدامها لتوقيع حِزم APK التي تم إنشاؤها.

في حال ضبط كلمة المرور في نص واضح، يجب أن تبدأ القيمة بـ pass:. مثلاً: pass:qwerty إذا كانت كلمة المرور هي السطر الأول من الملف، يجب أن تبدأ القيمة بـ file:. مثلاً: file:/tmp/myPassword.txt

إذا لم يتم ضبط هذه العلامة، تتم تجربة كلمة مرور ملف تخزين المفاتيح. وفي حال تعذّر ذلك، ستطلُب منك الوحدة الطرفية لسطر الأوامر كلمة المرور.

--ks-pass

هي كلمة مرور ملف تخزين المفاتيح الذي سيتم استخدامه لتوقيع حِزم APK التي تم إنشاؤها.

في حال ضبط كلمة المرور في نص واضح، يجب أن تبدأ القيمة بـ pass:. مثلاً: pass:qwerty إذا كانت كلمة المرور هي السطر الأول من الملف، يجب أن تبدأ القيمة بـ file:. مثلاً: file:/tmp/myPassword.txt

في حال عدم ضبط هذه العلامة، ستطلب منك الوحدة الطرفية لسطر الأوامر إدخال كلمة المرور.

--aapt2 المسار إلى البرنامج الثنائي AAPT2 المطلوب استخدامه.
--output-format تنسيق الإخراج لحِزم APK التي تم إنشاؤها يتم ضبط هذا الخيار تلقائيًا على APK_SET، ويؤدي ذلك إلى إخراج حِزم APK في أرشيف مجموعة APK الذي يتم إنشاؤه. في حال ضبطها على DIRECTORY، سيتم إخراج ملفات APK في الدليل الذي يحدّده --output.
--verbose في حال ضبط هذا الخيار، يطبع معلومات إضافية حول تنفيذ الأمر في الإخراج العادي.
--version-code رمز إصدار حزمة تطوير البرامج (SDK). هذا هو رمز الإصدار الذي يستخدمه نظام Android الأساسي لتثبيت حزمة APK وليس إصدار حزمة تطوير البرامج (SDK). يمكن ضبط هذا الخيار على قيمة عشوائية. وفي حال تم ترك هذه السياسة بدون ضبط، سيتم ضبط القيمة التلقائية على 0.
--overwrite وفي حال ضبط هذا الخيار، سيحل محل أي إخراج حالي سابق.

نشر حِزم APK لحزمة تطوير البرامج (SDK) واستخراجها وقياس حجمها

يمكنك اتّباع الخطوات نفسها المستخدمة في التطبيقات لنشر حِزم APK على جهاز متصل واستخراج حِزم APK خاصة بالجهاز من مجموعة حِزم APK حالية وقياس أحجام التنزيل المقدَّرة لملفات APK في مجموعة حِزم APK.

إنشاء أرشيف SDK من حزمة SDK

بعد تحميل ASB إلى قناة التوزيع، مثل Google Play، يتم تحويل ASB إلى أرشيف SDK لنظام التشغيل Android (.asar) لتوزيعه على مطوّري التطبيقات من خلال Maven. للحصول على مزيد من التفاصيل حول التنسيق، يمكنك الاطّلاع على القسم حول مواصفات تنسيق أرشيف SDK.

بعد إنشاء ASB، يمكنك اختبار إنشاء أرشيف SDK لنظام التشغيل Android محليًا باستخدام الأمر bundletool build-sdk-asar، كما هو موضّح في الرمز التالي:

bundletool build-sdk-asar --sdk-bundle=sdk.asb --output=sdk.asar \
    --apk-signing-key-certificate=keycert.txt

يوضِّح الجدول التالي بمزيد من التفصيل العلامات والخيارات المختلفة التي يمكنك ضبطها عند استخدام الأمر bundletool build-sdk-asar.

الجدول 5. خيارات الأمر bundletool build-sdk-asar

إبلاغ الوصف
--apk-signing-key-certificate (مطلوب) المسار إلى شهادة توقيع حزمة تطوير البرامج (SDK) APK. هذه هي الشهادة المقابلة للمفتاح الذي استخدمته لتوقيع حِزم APK في الأمر build-sdk-apks.
--output (مطلوب) المسار الذي تريد إنشاء ملف .asar فيه.
--sdk-bundle (مطلوب) المسار إلى حزمة SDK. ويجب أن تتضمن الإضافة .asb.
--overwrite وفي حال ضبط هذا الخيار، سيحل محل أي إخراج حالي سابق.

تنسيقات حِزم تطوير البرامج (SDK) التي يتم تفعيلها في وقت التشغيل (إصدار تجريبي)

تقدّم حِزم تطوير البرامج (SDK) التي يتم تفعيلها في وقت التشغيل تنسيقَين لملفات Android:

تنسيق حزمة تطوير البرامج (SDK) لنظام التشغيل Android

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

حزمة تطوير البرامج (SDK) لنظام التشغيل Android (ASB) هي ملف ZIP موقَّع بالامتداد .asb. يتم تنظيم رموز حزمة SDK والموارد فيها على نحو يشبه ما قد تجده في حزمة APK. يحتوي ASB أيضًا على العديد من ملفات الإعداد التي تساعد في إنشاء حِزم APK قابلة للتثبيت.

الشكل 1. محتوى حزمة تطوير البرامج (SDK) لنظام التشغيل Android:

تصف القائمة التالية بعض ملفات ASB بمزيد من التفصيل:

  • SdkBundleConfig.pb: ملف إعداد بتنسيق Proto يحتوي على قائمة حِزم SDK التي يتم تفعيلها في وقت التشغيل والتي تعتمد عليها حزمة SDK. للحصول على التعريف الكامل، يُرجى الاطّلاع على ملف sdk_bundle_config.proto.

  • modules.resm: ملف ZIP يحتوي على جميع البيانات اللازمة لإنشاء حِزم APK من حزمة تطوير البرامج (SDK).

  • SdkModulesConfig.pb: ملف إعداد بتنسيق Proto يحتوي هذا الملف على اسم حزمة SDK وإصدارها واسم فئة نقطة إدخال حزمة SDK لإطار العمل (SandboxedSdkProvider). للاطّلاع على التعريف الكامل، يُرجى الاطّلاع على ملف sdk_modules_config.proto.

  • base/: الوحدة الوحيدة التي تحتوي على رمز حزمة SDK وموارده

    • manifest/: بيان حزمة تطوير البرامج (SDK) بتنسيق Proto
    • dex/: الرمز المجمَّع بتنسيق DEX. يمكن توفير عدة ملفات DEX.
    • res/ وlib/ وassets/: هذه الأدلة مماثلة لتلك الموجودة في حزمة APK نموذجية. يتم الاحتفاظ بالمسارات في هذه الأدلة عند إنشاء حِزم APK لحزمة تطوير البرامج (SDK).
    • root/: يخزِّن هذا الدليل الملفات التي تم تغيير موقعها لاحقًا إلى جذر حِزم APK الخاصة بحزمة تطوير البرامج (SDK). على سبيل المثال، قد تتضمن الموارد المستندة إلى Java التي تحمِّلها حزمة SDK باستخدام الطريقة Class.getResource(). ويتم أيضًا حفظ المسارات ضمن هذا الدليل.
  • BUNDLE-METADATA: يشتمل هذا الدليل على ملفات بيانات وصفية تحتوي على معلومات مفيدة للأدوات أو متاجر التطبيقات. وقد تتضمّن ملفات البيانات الوصفية هذه تعيينات ProGuard والقائمة الكاملة لملفات DEX الخاصة بحزمة SDK. لم يتم تجميع الملفات الواردة في هذا الدليل في حِزم APK الخاصة بحزمة تطوير البرامج (SDK).

تنسيق أرشيف حزمة تطوير البرامج (SDK) لنظام التشغيل Android

أرشيف SDK لنظام التشغيل Android هو تنسيق لتوزيع حزمة SDK التي يتم تفعيلها في وقت التشغيل على Maven. وهو ملف ZIP بامتداد الملف .asar. يحتوي الملف على جميع المعلومات اللازمة لـ "أدوات إصدار التطبيق" لإنشاء "مجموعة حزمات تطبيق Android" استنادًا إلى حزمة تطوير البرامج (SDK) التي يتم تفعيلها في وقت التشغيل.

الشكل 2. محتوى حزمة SDK لنظام التشغيل Android أرشيف

توضِّح القائمة التالية بعض ملفات أرشيف SDK لنظام التشغيل Android بمزيد من التفاصيل:

  • SdkMetadata.pb: ملف إعداد بتنسيق Proto يحتوي على اسم حزمة SDK وإصدارها وملخص الشهادة للمفتاح المستخدَم لتوقيع حِزم APK التي تم إنشاؤها لحزمة تطوير البرامج (SDK) هذه. للحصول على التعريف الكامل، اطّلِع على ملف sdk_metadata.proto.

  • modules.resm: ملف ZIP يحتوي على جميع البيانات اللازمة لإنشاء حِزم APK من حزمة تطوير البرامج (SDK). وهذا الملف مماثل لملف .resm المتوفّر في مجموعة حزمات تطوير البرامج (SDK) لنظام التشغيل Android.

  • AndroidManifest.xml: ملف بيان حزمة تطوير البرامج (SDK) بتنسيق XML نصي

مراجع إضافية

للمزيد من المعلومات حول استخدام "bundletool"، يمكنك مشاهدة الفيديو حِزم التطبيق: اختبار الحِزم مع أداة الحزم وأداة Play Console.