AAB (Android App Bundle) هو تنسيق نشر لتطبيقات أندرويد حل محل APK في Google Play منذ عام 2021. على عكس APK، AAB ليس ملف تثبيت — بل هو حاوية يقوم Google Play من خلالها بإنشاء APK محسّنة ديناميكياً لكل جهاز. وفقاً لـ Android Developers, 2026، يقلل هذا التنسيق من حجم التطبيق الذي يتم تنزيله بمعدل 15% من خلال استبعاد الموارد غير المستخدمة.
النقاط الرئيسية
AAB (Android App Bundle) هو تنسيق نشر طورته Google كبديل لـ APK للتوزيع عبر Google Play. داخل AAB يوجد أرشيف ZIP بامتداد .aab يحتوي على كود مجمّع وموارد وبيانات وصفية. الفرق الرئيسي: لا يتم تثبيت AAB مباشرة على الجهاز.
يقوم المطور برفع AAB إلى Google Play Console. عندما يحاول المستخدم تثبيت التطبيق، يحلل Google Play تكوين الجهاز: كثافة الشاشة (DPI)، بنية المعالج (CPU)، اللغة وإصدار أندرويد. بناءً على هذا التحليل، يتم إنشاء APK أدنى يحتوي فقط على المكونات الضرورية.
قدمت Google AAB في عام 2018 في مؤتمر I/O. منذ أغسطس 2021، أصبح التنسيق إلزامياً لجميع التطبيقات الجديدة على Google Play. يمكن للتطبيقات الحالية الاستمرار في استخدام APK، ولكن يجب نشر التطبيقات الجديدة فقط بتنسيق AAB.
الفرق بين AAB و APK جوهري: APK هو ملف تثبيت كامل جاهز للتثبيت. AAB هو حاوية تحتوي على مكونات مصدرية تتطلب معالجة.
| المعامل | APK | AAB |
|---|---|---|
| النوع | ملف تثبيت | حاوية نشر |
| التثبيت | مباشرة على الجهاز | عبر Google Play |
| الحجم | أرشيف كامل | مكونات مصدرية |
| الوحدات | الكل في ملف واحد | وحدات منفصلة |
| التوقيع | المطور | Google Play |
| التوزيع | أي قناة | Google Play |
APK مناسب للتوزيع خارج Google Play — عبر المواقع الإلكترونية أو البريد الإلكتروني أو أنظمة MDM للشركات. AAB مرتبط ببنية Google Play التحتية ولا يمكن تثبيته مباشرة. لاختبار AAB، يتم استخدام أداة bundletool التي تحاكي إنشاء APK على جهاز محلي.
الهيكل الداخلي لـ AAB يشبه APK لكنه يحتوي على أدلة وملفات إضافية لوصف الوحدات وتبعياتها.
| الملف/الدليل | الغرض |
|---|---|
| base/ | الوحدة الأساسية: الكود، الموارد، البيان (manifest) |
| BundleConfig.pb | تكوين الحزمة بتنسيق protobuf |
| Bundle-metadata/ | بيانات وصفية حول إصدارات الوحدات |
| feature/ | وحدات ديناميكية (حسب الطلب) |
| assets/ | أصول التطبيق |
| manifest/ | بيانات (manifest) لكل وحدة |
الوحدة الأساسية هي مكون إلزامي في AAB. تحتوي على الكود الرئيسي والموارد وبيان التطبيق. بدون الوحدة الأساسية، لا يمكن بناء التطبيق. جميع الوحدات الأخرى اختيارية ويتم ربطها عبر Dynamic Delivery.
يستخدم تكوين AAB Protocol Buffers (protobuf) بدلاً من XML. ملفات .pb أكثر ضغطاً ويتم تحليلها بشكل أسرع بواسطة البنية التحتية لخوادم Google. تقوم أداة bundletool بتحويل protobuf إلى تنسيق قابل للقراءة لتصحيح الأخطاء.
Dynamic Delivery هي التقنية الرئيسية التي يقوم عليها AAB. تتيح توصيل أجزاء التطبيق التي تتوافق مع جهاز المستخدم ولغته فقط، وكذلك تحميل وحدات إضافية حسب الطلب.
يتم تحميل وحدات Install-time مع APK الأساسي أثناء التثبيت. يتم تسليم وحدات Conditional فقط عند استيفاء الشروط — على سبيل المثال، وحدة تحتوي على مواد للشاشات بدقة 4K. يتم تحميل وحدات On-demand بناءً على طلب المستخدم داخل التطبيق.
بالنسبة للموارد الكبيرة (حتى 2 جيجابايت)، يتم استخدام Play Asset Delivery بدلاً من ملفات OBB. يدعم PAD نفس أوضاع التسليم الثلاثة: install-time و fast-follow (مباشرة بعد التثبيت) و on-demand.
// تحميل الوحدة حسب الطلب عبر SplitInstallManager
val manager = SplitInstallManagerFactory
.create(context)
val request = SplitInstallRequest
.newBuilder()
.addModule("level_pack_3")
.build()
manager.startInstall(request)
.addOnSuccessListener {
Log.d("AAB", "Module installed")
}
يتم وصف كل وحدة ديناميكية في ملف build.gradle منفصل مع تحديد نوع التسليم. يمكن أن تحتوي الوحدة على مواردها وكودها وبيانها الخاص، المستقلة عن التطبيق الأساسي.
يتم بناء AAB من خلال Android Gradle Plugin باستخدام مهمة bundleRelease (أو bundleDebug). النتيجة هي ملف .aab في دليل build/outputs/bundle/.
لا يتطلب بناء AAB أي تكوين خاص — يدعم Android Gradle Plugin الحزم (bundles) افتراضياً. يكفي تحديد مهمة bundle بدلاً من assemble.
// build.gradle.kts — بناء AAB مع التوقيع
android {
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
}
// المهمة: ./gradlew bundleRelease
توفر Google أداة bundletool لإنشاء APK من AAB على جهاز محلي. الأمر `bundletool build-apks --bundle=app.aab --output=app.apks` ينشئ مجموعة من APK للاختبار على تكوينات أجهزة مختلفة.
يمكن لـ bundletool أيضاً فك ضغط AAB وعرض تكوينه والتحقق من سلامة التوقيع قبل الرفع إلى Google Play Console. لتصحيح الأخطاء، يتم استخدام الأمر `bundletool dump manifest --bundle=app.aab` الذي يعرض بيان الوحدة الأساسية.
افتراضياً، يقوم AAB بتقسيم الموارد عبر ثلاثة أبعاد: اللغة وكثافة الشاشة (density) وبنية المعالج (abi). يمكن للمطور تعطيل أي تقسيم في build.gradle — على سبيل المثال، إذا كان التطبيق يدعم اللغة الإنجليزية فقط. تعطيل التقسيم يعني أن موارد جميع المتغيرات ستدخل في APK الأساسي.
تحسين الموارد — يقوم AAB تلقائياً بتحويل PNG إلى WebP دون فقدان الجودة، ويضغط الموارد غير المستخدمة ويزيل السلاسل المكررة. يتم تطبيق هذه التحسينات على جانب Google Play عند إنشاء APK النهائي. ونتيجة لذلك، يحصل المستخدم على APK أصغر بنسبة 15–25% من الأرشيف الكامل.
عملية نشر AAB في Google Play Console تختلف عن APK فقط في تنسيق الملف الذي يتم رفعه. تقبل الكونسول ملف .aab، وتتحقق من هيكله وتوقيعه وتكوين الوحدات، ثم تنشئ APK لكل نوع جهاز.
عند رفع AAB، تتولى Google Play إدارة مفاتيح التوقيع. يقوم المطور برفع حزمة موقعة بمفتاح upload، وتقوم Google بإعادة توقيع APK المنشأة بمفتاحها الخاص. هذا يبسط تدوير المفاتيح واستعادة الوصول في حالة فقدان keystore.
توفر Google Play Console اختباراً مدمجاً لـ AAB: يمكنك تنزيل APK المنشأة لجهاز معين أو تشغيل اختبار داخلي عبر مسارات Internal Testing و Closed Alpha و Open Beta.
الانتقال إلى AAB قد يسبب مشكلات، خاصة في المشاريع التي تحتوي على العديد من الوحدات الديناميكية أو تكوين موارد معقد.
إذا كانت وحدة ديناميكية تشير إلى موارد الوحدة الأساسية باسم غير صحيح، فإن Google Play يرفض AAB في مرحلة التحقق. الحل — استخدام فحص lint قبل البناء واختبار جميع الوحدات عبر bundletool محلياً.
قد يؤدي التقسيم حسب اللغة إلى إبطاء بدء تشغيل التطبيق إذا تم تحميل موارد الإعدادات الإقليمية الحالية ديناميكياً. توصية Google هي عدم تقسيم اللغات إذا كان عددها أقل من 10، أو استخدام install-time للغات الأكثر شيوعاً.
تتطلب بعض SDKs (التحليلات، الإعلانات، الخرائط) الوصول إلى البيان والموارد الكامل. التحقق من التوافق مع AAB هو خطوة إلزامية قبل الترحيل. معظم SDKs الكبرى (Firebase، Google Ads، Crashlytics) تدعم AAB بالكامل منذ عام 2022. للتحقق من التوافق، يتم استخدام bundletool مع العلم --validate الذي يحاكي إنشاء APK من جانب الخادم.
يستخدم AAB versionCode من بيان الوحدة الأساسية. على عكس APK، يدعم AAB أيضاً versionCode لكل وحدة على حدة — مما يسمح بتحديث أجزاء فردية من التطبيق دون إعادة تثبيت كاملة. يتتبع Dynamic Delivery الوحدات المثبتة ويقوم بتوصيل المكونات المعدلة فقط أثناء التحديثات عبر Google Play.
توفر Google Play Console تحليلات مفصلة لكل AAB: كم عدد APK التي تم إنشاؤها، وما هي التقسيمات المطلوبة، وما هو متوسط حجم التنزيل لكل جهاز. يُظهر Android Vitals مقاييس أداء APK المنشأة. تساعد هذه البيانات في تحسين تكوين التقسيمات وتقليل حجم التنزيل لفئات الأجهزة المختلفة.
الأسئلة الشائعة
لا، AAB غير مخصص للتثبيت المباشر. يقوم Google Play بتحويله إلى APK لجهاز معين. للاختبار على الهاتف، يتم استخدام bundletool الذي ينشئ APK من AAB محلياً.
Google Play ينشئ APK فقط مع الموارد المطابقة لجهاز المستخدم: كثافة شاشة واحدة، بنية معالج واحدة، لغة واحدة. لا يتم تضمين الموارد للتكوينات الأخرى، مما يوفر 15–30% من حركة التنزيل.
لا، يمكن للتطبيقات الحالية الاستمرار في نشر APK. متطلب AAB ينطبق فقط على التطبيقات الجديدة. توصي Google بتحديث المشاريع الحالية إلى AAB ولكن لا تطلبه.
قم بتغيير مهمة البناء من assembleRelease إلى bundleRelease، وتحقق من توافق جميع SDKs، وقم بتكوين App Signing في Google Play Console، وارفع أول AAB عبر مسار موجود.
نعم، يتضمن AAB مكتبات أصلية في الوحدات. يقوم Google Play بتوصيل ملفات .so فقط وفقاً لبنية معالج الجهاز. هذا مهم بشكل خاص للألعاب على Unity و Unreal Engine ذات البناءات الأصلية الكبيرة.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا