في أغسطس 2021، اتخذت Google قرارًا أدى إلى تغيير جذري في كيفية توزيع تطبيقات Android: يجب أن تستخدم جميع التطبيقات الجديدة المقدمة إلى متجر Google Play تنسيق حزمة تطبيقات Android (AAB) بدلاً من APK التقليدي. أثر هذا التحول على المطورين والمستخدمين والنظام البيئي الكامل لتوزيع تطبيقات الطرف الثالث. ولكن ما هي حزمة التطبيقات بالضبط، وكيف تعمل، ولماذا يجب أن تهتم بها؟
يغطي هذا الدليل كل شيء بدءًا من التفاصيل الفنية الداخلية لتنسيق AAB وحتى الآثار العملية للمستخدمين الذين يرغبون في مشاركة التطبيقات مع الأصدقاء أو تثبيتها على الأجهزة التي لا يمكنها الوصول إلى متجر Play.
ما هي حزمة تطبيقات Android؟
حزمة تطبيقات Android عبارة عن تنسيق نشر يحتوي على كافة التعليمات البرمجية والموارد المجمعة للتطبيق، ولكنها تؤجل إنشاء ملف APK النهائي القابل للتثبيت على Google Play. فكر في الأمر كقالب رئيسي تقوم خوادم Google من خلاله بإنشاء حزم محسنة خاصة بالجهاز بسرعة.
على عكس APK، وهو حزمة جاهزة للتثبيت، لا يمكن تثبيت ملف AAB مباشرة على الجهاز. إنها عبارة عن قطعة أثرية يتم تحميلها على متجر Play، حيث تقوم البنية التحتية لـ Google بمعالجتها وإنشاء ملفات APK مخصصة لكل تكوين جهاز.
امتداد الملف هو .aab، ويستخدم داخليًا تنسيق المخزن المؤقت للبروتوكول مدمجًا مع بنية تشبه ZIP. يحتوي على رمز DEX الفرعي للتطبيق والموارد والأصول والمكتبات الأصلية وملف بيانات تعريف خاص للحزمة يخبر Google Play بكيفية تقسيم المحتوى.
لماذا حزم التطبيقات الإلزامية من Google
الدافع الأساسي وراء حزم التطبيقات هو تقليل أحجام تنزيل التطبيقات. يحتاج تطبيق Android النموذجي إلى دعم كثافات الشاشة المتعددة (mdpi وhdpi وxhdpi وxxhdpi وxxxhdpi) وبنيات وحدة المعالجة المركزية المتعددة (armeabi-v7a وarm64-v8a وx86 وx86_64) ولغات متعددة. في نموذج APK التقليدي، يتم تجميع كل هذه الموارد في ملف واحد، على الرغم من أن أي جهاز معين يحتاج فقط إلى جزء صغير منها.
فكر في لعبة تتضمن مكتبات أصلية لأربعة بنيات لوحدة المعالجة المركزية وأنسجة لخمس كثافات للشاشة. قد يبلغ حجم ملف APK العالمي 200 ميجابايت، لكن الإصدار الخاص بالجهاز الذي يحتوي فقط على البنية والكثافة ذات الصلة يمكن أن يصل حجمه إلى 80 ميجابايت. وهذا يعني انخفاضًا بنسبة 60% في حجم التنزيل.
تشير Google إلى أن التطبيقات التي تستخدم App Bundles أصغر بنسبة 15% في المتوسط من نظيراتها العالمية من ملفات APK. بالنسبة للتطبيقات والألعاب الكبيرة، يمكن أن يكون التوفير أكثر دراماتيكية. تعني التنزيلات الأصغر حجمًا عمليات تثبيت أسرع، واستهلاكًا أقل للنطاق الترددي، وعددًا أقل من عمليات التثبيت المهجورة بسبب مخاوف الحجم.
كيف تعمل حزم التطبيقات داخليًا
هيكل الحزمة
يتم تنظيم ملف AAB في وحدات، حيث تحتوي كل وحدة على التعليمات البرمجية والموارد والأصول الخاصة بها. يتضمن الهيكل الأكثر شيوعًا ما يلي:
- الوحدة الأساسية: يحتوي على رمز التطبيق الأساسي والموارد التي يحتاجها كل جهاز. يتم تثبيت هذا دائمًا.
- تقسيمات التكوين: أقسام منفصلة لموارد اللغة، وموارد كثافة الشاشة، والمكتبات الأصلية لـ ABI (هندسة وحدة المعالجة المركزية).
- وحدات الميزة الديناميكية: وحدات اختيارية يمكن تنزيلها عند الطلب بعد التثبيت الأولي.
- حزم الأصول: أصول كبيرة مثل مستويات اللعبة أو الوسائط التي يمكن تسليمها في وقت التثبيت أو عند الطلب أو في الخلفية.
تقسيم APK الجيل
عندما يقوم مستخدم بتنزيل تطبيق من متجر Play، تقوم خوادم Google بفحص تكوين الجهاز وإنشاء مجموعة من ملفات APK المقسمة المصممة خصيصًا لهذا الجهاز المحدد. قد يتضمن التثبيت النموذجي ما يلي:
- base.apk، رمز التطبيق الأساسي والموارد الأساسية
- split_config.arm64_v8a.apk، المكتبات الأصلية لوحدة المعالجة المركزية للجهاز
- split_config.xxhdpi.apk، موارد لكثافة شاشة الجهاز
- split_config.en.apk، موارد اللغة للإعدادات المحلية للمستخدم
يتم تثبيت ملفات APK المقسمة هذه معًا كتطبيق منطقي واحد. يعاملهم مدير حزم Android كتطبيق واحد، لكنهم عبارة عن ملفات منفصلة فعليًا على الجهاز. هذه هي الآلية التي تمكن من توفير الحجم.
التسليم الديناميكي
إحدى أقوى ميزات حزم التطبيقات هي التسليم الديناميكي. يمكن للمطورين وضع علامة على ميزات معينة على أنها قابلة للتنزيل عند الطلب. على سبيل المثال، قد يتضمن تطبيق تحرير الصور مرشحات متقدمة كوحدة ميزات ديناميكية. المستخدمون الذين لا يستخدمون هذه المرشحات مطلقًا لا يقومون بتنزيلها مطلقًا، مما يوفر مساحة التخزين.
يتم تنزيل وحدات الميزات الديناميكية وتثبيتها من خلال مكتبة Play Core في وقت التشغيل. يمكن للتطبيق التحقق مما إذا كانت الوحدة قد تم تثبيتها وطلب تنزيلها عند الحاجة، بحيث يختبر المستخدم الوظيفة الجديدة كتنزيل صغير داخل التطبيق بدلاً من إعادة التثبيت بالكامل.
AAB vs APK: الاختلافات الرئيسية
يساعد فهم الاختلافات بين هذه التنسيقات في توضيح متى يكون كل منها مناسبًا:
- يمكن تثبيت ملفات APK قابلية التثبيت: مباشرة على أي جهاز يعمل بنظام Android. لا يمكن تثبيت ملفات AAB مباشرةً ويجب معالجتها أولاً.
- الحجم: يحتوي APK العالمي على موارد لجميع التكوينات. يتيح AAB التسليم الخاص بالجهاز، مما يؤدي إلى تنزيلات أصغر.
- التوقيع: باستخدام ملفات APK، يقوم المطور بتوقيع الحزمة النهائية القابلة للتثبيت. باستخدام AABs، يقوم المطور بتوقيع الحزمة، وتعيد Google تسجيل ملفات APK التي تم إنشاؤها باستخدام Play App Signing.
- يمكن توزيع ملفات APK التوزيع: من خلال أي قناة. تم تصميم AABs بشكل أساسي لمتجر Play، على الرغم من أن أدوات مثل Bundletool يمكنها إنشاء ملفات APK منها محليًا.
- إمكانية المشاركة: يمكنك بسهولة مشاركة ملف APK مع شخص آخر. تتطلب مشاركة تطبيق مثبت من AAB جمع كافة ملفات APK المقسمة، وهو أمر أكثر تعقيدًا.
جدل التوقيع
أحد الجوانب الأكثر إثارة للجدل في تفويض AAB هو لعب توقيع التطبيق. عندما يقوم أحد المطورين بتحميل ملف AAB، تحتفظ Google بمفتاح التوقيع المستخدم لتوقيع ملفات APK النهائية التي يتم تسليمها للمستخدمين. وهذا يعني أن Google لديها من الناحية الفنية القدرة على تعديل محتوى APK قبل التوقيع عليه وتسليمه.
تقول Google إن هذا ضروري لأنها تحتاج إلى التوقيع على ملفات APK المقسمة التي تنشئها. يحتفظ المطورون بمفتاح تحميل لمصادقة عمليات التحميل الخاصة بهم، ولكن تتم إدارة مفتاح توقيع التطبيق الفعلي من خلال البنية الأساسية لـ Google.
بالنسبة لمعظم المطورين، تعتبر هذه مقايضة معقولة. توفر Google خدمات النسخ الاحتياطي والاسترداد الرئيسية، كما يتم التخلص من خطر فقدان المفتاح (الذي قد يمنع تحديثات التطبيق بشكل دائم). ومع ذلك، أثار المطورون الذين يركزون على الخصوصية والمدافعون عن المصادر المفتوحة مخاوف بشأن مركزية الثقة هذه.
ماذا يعني هذا بالنسبة للمستخدمين الذين يشاركون التطبيقات
إن التحول إلى حزم التطبيقات له آثار كبيرة على المستخدمين الذين يرغبون في مشاركة التطبيقات خارج متجر Play:
استخراج التطبيقات المثبتة
عند استخراج تطبيق مثبت من AAB، فإنك لا تحصل على ملف APK واحد. وبدلاً من ذلك، ستحصل على مجموعة من ملفات APK المقسمة. هذه الانقسامات خاصة بالجهاز، مما يعني أن التطبيق المستخرج من هاتف بمعالج ARM64 وشاشة xxhdpi لن يعمل على جهاز بتكوين مختلف.
تنسيقات XAPK وAPKS
ولمواجهة التحدي المتمثل في مشاركة ملفات APK المقسمة، تم إنشاء تنسيقات الحاويات مثل XAPK وAPKS. تجمع هذه التنسيقات جميع ملفات APK المقسمة معًا في ملف واحد قابل للتنزيل. عندما تواجه ملف XAPK، فمن المحتمل أن يحتوي على تطبيق تم توزيعه في الأصل كحزمة تطبيقات.
يمكن أن يساعدك محول XAPK إلى APK في استخراج ملف APK الأساسي من تنسيقات الحاويات هذه. ومع ذلك، ضع في اعتبارك أن ملف APK الأساسي وحده قد لا يحتوي على جميع الموارد اللازمة ليعمل التطبيق بشكل صحيح على كل جهاز، نظرًا لأن الكثافة والموارد الخاصة بـ ABI قد تكون موجودة في ملفات APK المقسمة.
باستخدام أداة الحزمة
توفر Google أداة مفتوحة المصدر تسمى bundletool يمكنها إنشاء ملفات APK من ملف AAB محليًا. يمكن للمطورين استخدام هذا لإنشاء ملفات APK عالمية للاختبار أو التوزيع البديل. يبدو الأمر كما يلي:
bundletool build-apks --bundle=app.aab --output=app.apks --mode=universal
يؤدي هذا إلى إنشاء ملف APK عالمي يحتوي على جميع الموارد لجميع التكوينات. سيكون أكبر من إصدار خاص بالجهاز ولكنه يعمل على أي جهاز. هذا هو النهج الذي يستخدمه محول AAB إلى APK لدينا.
التأثير على متاجر التطبيقات البديلة
يؤثر تفويض AAB بشكل أساسي على متجر Google Play. لا يزال بإمكان متاجر التطبيقات البديلة وقنوات التوزيع المباشرة قبول ملفات APK. يمكن للمطورين الذين يرغبون في التوزيع خارج Play الاستمرار في إنشاء ملفات APK عامة جنبًا إلى جنب مع تحميلات AAB الخاصة بهم.
ومع ذلك، يقوم بعض المطورين ببناء AABs فقط ويعتمدون بشكل كامل على Play للتوزيع. وهذا يعني أنه يصعب الحصول على التطبيقات من هؤلاء المطورين خارج النظام البيئي لمتجر Play. تم تكييف مستودعات تطبيقات الطرف الثالث إما عن طريق استضافة مجموعات APK المقسمة (كملفات XAPK أو APKS) أو باستخدام Bundletool لإنشاء ملفات APK عالمية.
وحدات الميزة الديناميكية في الممارسة العملية
تمثل وحدات الميزات الديناميكية إحدى القدرات الأكثر إثارة للاهتمام في تنسيق حزمة التطبيقات. فيما يلي بعض حالات الاستخدام في العالم الحقيقي:
- مميزات الكاميرا: قد يتضمن التطبيق مرشحات الواقع المعزز كوحدة ديناميكية، ويتم تنزيلها فقط عندما يصل المستخدم إلى ميزة الكاميرا لأول مرة.
- حزم اللغات: يمكن تسليم بيانات الترجمة للغات الأقل شيوعًا عند الطلب بدلاً من تجميعها مع كل عملية تثبيت.
- يمكن أن تقدم ألعاب مستويات اللعبة: محتوى إضافيًا مع تقدم اللاعبين، مما يجعل التنزيل الأولي صغيرًا.
- الأدوات المهنية: لا يمكن توفير الميزات المتقدمة في تطبيقات الإنتاجية إلا للمستخدمين الذين يحتاجون إليها.
بالنسبة للمستخدمين، هذا يعني أن الحجم المثبت للتطبيق قد ينمو بمرور الوقت مع تنزيل الوحدات الديناميكية. ويعني ذلك أيضًا أن مشاركة مثل هذا التطبيق تتطلب تضمين جميع الوحدات التي تم تنزيلها، مما يزيد من تعقيد عملية الاستخراج.
أفضل الممارسات للمطورين
إذا كنت تقوم بتطوير تطبيقات Android، فإليك توصيات للتعامل مع حزم التطبيقات بشكل فعال:
- اختبر دائمًا باستخدام Bundletool محليًا قبل التحميل على Play. أنشئ ملفات APK خاصة بالجهاز وتحقق من أنها تعمل بشكل صحيح.
- استخدم مسار الاختبار الداخلي لـ Play Console للتحقق من تثبيت ملفات APK المقسمة وتشغيلها بشكل صحيح على الأجهزة الحقيقية.
- فكر في توفير ملف APK عالمي لقنوات التوزيع البديلة إذا كانت قاعدة المستخدمين الخاصة بك تمتد إلى ما هو أبعد من متجر Play.
- ضع في اعتبارك حدود وحدة الميزات الديناميكية. يجب أن تكون الميزات المستخدمة بشكل متكرر في الوحدة الأساسية، وليس في الوحدات النمطية الديناميكية.
- اختبار على الأجهزة ذات تكوينات مختلفة لضمان إنشاء تقسيمات التكوين بشكل صحيح وعدم فقدان أي موارد.
- حافظ على أمان مفتاح التحميل الخاص بك. بينما تدير Google مفتاح توقيع التطبيق، فإن مفتاح التحميل الخاص بك يصادق على هويتك كمطور البرامج.
مستقبل توزيع التطبيقات
يستمر تنسيق حزمة التطبيقات في التطور. قدمت Google ميزات مثل Play Asset Delivery لأصول الألعاب الكبيرة، وSDK Runtime لحزم SDK الإعلانية، وتحسين الدعم لتكوينات Wear OS وAndroid TV. يتجه الاتجاه نحو تسليم مكونات التطبيق بشكل أكثر تفصيلاً عند الطلب.
بالنسبة للمستخدمين، هذا يعني أن مفهوم ملف تطبيق واحد مستقل أصبح أقل شيوعًا لتطبيقات متجر Play. أصبح فهم التنسيقات مثل XAPK وAPKS والأدوات المتاحة للعمل معها ذا أهمية متزايدة لأي شخص يدير تطبيقات خارج التدفق القياسي لمتجر Play.
متى يجب الاحتفاظ بـ AAB مقابل متى يتم إنشاء ملف APK عالمي
تمثل Android App Bundle تحولًا أساسيًا في كيفية تجميع التطبيقات وتسليمها. في حين أنه يجلب فوائد حقيقية من حيث حجم التنزيل وكفاءة التسليم، فإنه يقدم أيضًا تعقيدًا للمستخدمين الذين يشاركون التطبيقات أو يقومون بتثبيتها من مصادر بديلة. إن فهم كيفية عمل AABs، وكيفية إنشاء ملفات APK المقسمة، والأدوات المتاحة للتحويل بين التنسيقات يمنحك ما تحتاجه لاختيار التنسيق الصحيح والتحويل بينهما بثقة.
يتواصل المطورون مع AAB لتحسين كيفية تسليم التطبيق؛ يواجهها معظم المستخدمين العاديين فقط عندما يحاولون تثبيت شيء ما على جهاز لا يمكنه الوصول إلى متجر Play. وفي كلتا الحالتين، الشيء الذي يستحق التذكر بسيط: AAB هو تنسيق نشر، وليس تنسيق تثبيت، وهناك أدوات تعمل على سد الفجوة بين الاثنين.