تنسيق مجموعة حزمات تطبيق Android

"مجموعة حزمات تطبيق Android" عبارة عن ملف (بامتداد الملف .aab) يمكنك تحميله إلى Google Play.

إنّ حِزم التطبيقات عبارة عن برامج ثنائية الموقعة تنظّم رمز تطبيقك وموارده في وحدات، كما هو موضّح في الشكل 1. يتم تنظيم التعليمات البرمجية والموارد لكل وحدة على نحو مشابه لما قد تجده في حزمة APK، وذلك منطقي لأنّ كل وحدة من هذه الوحدات قد يتم إنشاؤها كملفات APK منفصلة. ويستخدم Google Play بعد ذلك حِزمة التطبيق لإنشاء حِزم APK متنوعة يتم عرضها للمستخدمين، مثل حزمة APK الأساسية وحِزم APK للميزات وحِزم APK للإعدادات (للأجهزة التي لا تتوافق مع حِزم APK المقسّمة). تمثّل الأدلة الملونة باللون الأزرق، مثل أدلة drawable/ وvalues/ وlib/، الرموز والموارد التي يستخدمها Google Play لإنشاء حِزم APK للإعدادات لكل وحدة.

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

الشكل 1. محتوى تنسيق Android App Bundle الذي يتضمّن وحدة أساسية واحدة ووحدتَي ميزات وحِزمتَي مواد عرض

تصف القائمة التالية بعض ملفات حزمة التطبيقات ودلائلها بمزيد من التفصيل:

  • base/ وfeature1/ ، وfeature2/: يمثّل كل دليل من هذه الأدلة ذات المستوى الأعلى وحدة مختلفة من تطبيقك. وتتوفّر الوحدة الأساسية لتطبيقك دائمًا في دليل base لحزمة التطبيق. ومع ذلك، يتم إعطاء الدليل لكل وحدة من وحدات الخصائص الاسم الذي تحدده السمة split في بيان الوحدة. لمعرفة المزيد من المعلومات، يُرجى الاطّلاع على بيان وحدة الميزات.
  • asset_pack_1/ and asset_pack_2/: بالنسبة إلى التطبيقات أو الألعاب الكبيرة التي تتطلب رسومات بيانية، يمكنك تقسيم مواد العرض إلى حِزم مواد عرض. وتُعد حِزم مواد العرض مثالية للألعاب نظرًا لحدود الحجم الكبيرة. يمكنك تخصيص طريقة ووقت تنزيل كل حزمة مواد عرض على جهاز وفقًا لثلاثة أوضاع تسليم: وقت التثبيت والمتابعة السريعة وعند الطلب. تتم استضافة جميع حِزم مواد العرض على Google Play وتقديمها من خلال Google Play. للحصول على مزيد من المعلومات حول كيفية إضافة حِزم مواد العرض إلى حِزمة تطبيقك، يمكنك الاطّلاع على نظرة عامة على عرض المواد في Play.
  • BUNDLE-metaDATA/: يتضمّن هذا الدليل ملفات بيانات وصفية تتضمّن معلومات مفيدة للأدوات أو متاجر التطبيقات. وقد تتضمن ملفات البيانات الوصفية هذه تعيينات ProGuard والقائمة الكاملة لملفات DEX الخاصة بتطبيقك. ولا يتم تجميع الملفات الواردة في هذا الدليل في حِزم APK لتطبيقك.
  • ملفات مخزن بروتوكولات الوحدة (*.pb): توفِّر هذه الملفات بيانات وصفية تساعد في وصف محتوى كل وحدة تطبيق في متاجر التطبيقات، مثل Google Play. على سبيل المثال، تقدِّم BundleConfig.pb معلومات حول الحِزمة نفسها، مثل إصدار أدوات الإصدار الذي تم استخدامه لإنشاء حِزمة التطبيق، وتصف native.pb وresources.pb الرموز البرمجية والموارد في كل وحدة، وهو ما يكون مفيدًا عندما يحسِّن Google Play حِزم APK لتتناسب مع إعدادات الأجهزة المختلفة.
  • manifest/: على عكس حِزم APK، تخزِّن حِزم التطبيقات ملف AndroidManifest.xml لكل وحدة في هذا الدليل المنفصل.
  • dex/: على عكس ملفات APK، تخزِّن حِزم التطبيقات ملفات DEX لكل وحدة في هذا الدليل المنفصل.
  • res/, lib/, and asset/: تتطابق هذه الأدلة مع تلك الواردة في حزمة APK عادية. عند تحميل حِزمة التطبيق، يفحص Google Play هذه الأدلة ويجمع فقط الملفات التي تتوافق مع إعدادات الجهاز المستهدَف، مع الاحتفاظ بمسارات الملفات.
  • root/: يخزِّن هذا الدليل الملفات التي تم تغيير موقعها لاحقًا إلى جذر أي حزمة APK تتضمّن الوحدة النمطية التي يقع فيها هذا الدليل. على سبيل المثال، قد يتضمن دليل base/root/ لحزمة تطبيق موارد مستندة إلى لغة Java ويحمِّلها تطبيقك باستخدام Class.getResource(). وسيتم لاحقًا تغيير موقع هذه الملفات إلى الدليل الجذري لحزمة APK الأساسية لتطبيقك وكل ملف APK متعدد الملفات ينشئه Google Play. يتم أيضًا الاحتفاظ بالمسارات داخل هذا الدليل. وهذا يعني أنه يتم أيضًا تغيير موقع الأدلة (والأدلة الفرعية) الخاصة بها إلى جذر APK.

نظرة عامة على حِزم APK المجزّأة

تُعدّ آلية حزمة APK المجزّأة المتوفّرة في الإصدار Android 5.0 (المستوى 21 من واجهة برمجة التطبيقات) والإصدارات الأحدث جزءًا أساسيًا من عرض التطبيقات المحسَّنة. تتشابه حِزم APK المقسّمة إلى حد كبير مع حِزم APK العادية، فهي تتضمّن رمز بايت DEX مجمّع وموارد وبيان Android. ومع ذلك، يمكن لنظام Android الأساسي التعامل مع عدة حِزم APK مجزّأة تم تثبيتها باعتبارها تطبيقًا واحدًا. بمعنى آخر، يمكنك تثبيت عدة حِزم APK مجزّأة ويمكنها الوصول إلى الرموز والموارد الشائعة، وتظهر كتطبيق واحد مثبَّت على الجهاز.

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

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

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

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

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

تظهر حزمة APK الأساسية في رأس الشجرة إذا كانت حِزم APK لوحدة الميزات
        تعتمد عليها. إنّ حِزم APK للتهيئة التي تتضمن رموزًا
 خاصة بإعدادات الجهاز ومواردها للقاعدة
 وكل حزمة APK لوحدة ميزات
 تشكِّل العقد التفصيلية لشجرة التبعية.

الشكل 1. شجرة التبعية لتطبيق يتم عرضه باستخدام حِزم APK مجزّأة

تجدر الإشارة إلى أنّك لست بحاجة إلى إنشاء حِزم APK هذه بنفسك، إذ إنّ Google Play يُنشئها بالنيابة عنك باستخدام حِزمة تطبيق موقَّعة واحدة تنشئها باستخدام "استوديو Android". للاطّلاع على مزيد من المعلومات حول تنسيق حِزمة التطبيق وكيفية إنشاء حزمة تطبيقات، يمكنك الانتقال إلى إنشاء "مجموعة حزمات تطبيق Android" ونشرها وتحميلها.

الأجهزة التي تعمل بنظام التشغيل Android 4.4 (المستوى 19 لواجهة برمجة التطبيقات) والإصدارات الأقدم

لا تتيح الأجهزة التي تعمل بالإصدار 4.4 من نظام التشغيل Android (المستوى 19 من واجهة برمجة التطبيقات) والإصدارات الأقدم تنزيل حِزم APK المقسّمة وتثبيتها، يعرض Google Play بدلاً من ذلك حزمة APK واحدة لتلك الأجهزة تُعرف باسم حِزم APK متعدّدة، ويتم تحسينه للتوافق مع إعدادات الجهاز. وهذا يعني أنّ حِزم APK المتعدّدة تمثّل تجربة التطبيق الكاملة، ولكنها لا تتضمّن رموزًا وموارد غير ضرورية، مثل وحدات كثافة الشاشة الأخرى وبِنى وحدة المعالجة المركزية (CPU).

ولكنها تتضمن أيضًا موارد لجميع اللغات التي يدعمها تطبيقك. على سبيل المثال، يمكن للمستخدمين تغيير إعدادات اللغة المفضّلة في تطبيقك بدون الحاجة إلى تنزيل ملف APK متعدّدة.

ولا يمكن لحِزم APK المتعدّدة تنزيل وحدات الميزات عند الطلب لاحقًا. لتضمين وحدة ميزات في حزمة APK هذه، يجب إمّا إيقاف ميزة عند الطلب أو تفعيل ميزة الدمج عند إنشاء وحدة الميزات.

تجدر الإشارة إلى أنّك لن تحتاج عند استخدام حِزم التطبيقات إلى إنشاء حِزم APK وتوقيعها وتحميلها وإدارتها، وذلك لكل إعداد جهاز يتوافق مع تطبيقك. ما زلت تنشئ وتحميلًا حزمة تطبيق واحدة فقط لتطبيقك بالكامل، وسيتولى Google Play باقي المهام نيابةً عنك. وسواء كنت تنوي دعم الأجهزة التي تعمل بالإصدار 4.4 من نظام التشغيل Android أو الإصدارات الأقدم، فإن Google Play يقدم آلية عرض مرنة لك ولمستخدميك.

تغييرات لغة المستخدم

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

عندما يبدِّل المستخدم لغته في إعدادات الجهاز، قد يحتاج Google Play إلى تنزيل وتثبيت بعض حِزم APK المجزّأة الإضافية وتثبيتها حتى يتمكّن من عرض التطبيق باللغة الجديدة.

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

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

إذا كان تطبيقك يتطلب تنزيل لغات إضافية بشكل مستقل عن لغات المستخدم المحددة في إعدادات الجهاز، مثل استخدام أداة اختيار اللغة داخل التطبيق، يمكنك استخدام مكتبة Play الأساسية لتنزيلها عند الطلب.