AAB (Android App Bundle) — قالبی برای انتشار برنامههای اندروید است که از سال ۲۰۲۱ جایگزین APK در Google Play شده است. برخلاف APK، AAB یک فایل نصبی نیست — این یک محفظه است که Google Play بهصورت پویا APKهای بهینهشده برای هر دستگاه از آن تولید میکند. طبق دادههای Android Developers، ۲۰۲۶، این قالب با حذف منابع استفادهنشده اندازه برنامه قابلدانلود را به طور متوسط ۱۵٪ کاهش میدهد.
نکات اصلی
AAB (Android App Bundle) — قالبی برای انتشار است که توسط Google به عنوان جایگزین APK برای توزیع از طریق Google Play توسعه یافته است. داخل AAB یک بایگانی ZIP با پسوند .aab شامل کد کامپایلشده، منابع و فراداده است. تفاوت کلیدی: AAB مستقیماً روی دستگاه نصب نمیشود.
توسعهدهنده AAB را در Google Play Console بارگذاری میکند. وقتی کاربر سعی میکند برنامه را نصب کند، Google Play پیکربندی دستگاه را تجزیه و تحلیل میکند: تراکم صفحه (DPI)، معماری CPU، زبان و نسخه اندروید. بر اساس این تحلیل، یک APK حداقلی حاوی فقط اجزای ضروری تولید میشود.
Google AAB را در سال ۲۰۱۸ در کنفرانس I/O معرفی کرد. از آگوست ۲۰۲۱، این قالب برای همه برنامههای جدید در 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/ | ماژول پایه: کد، منابع، مانیفست |
| BundleConfig.pb | پیکربندی باندل در قالب protobuf |
| Bundle-metadata/ | فراداده درباره نسخههای ماژول |
| feature/ | ماژولهای پویا (on-demand) |
| assets/ | داراییهای برنامه |
| manifest/ | مانیفست هر ماژول |
ماژول base — یک جزء اجباری AAB است. این ماژول شامل کد اصلی، منابع و مانیفست برنامه است. بدون ماژول base برنامه نمیتواند ساخته شود. همه ماژولهای دیگر اختیاری هستند و از طریق Dynamic Delivery متصل میشوند.
پیکربندی AAB به جای XML از Protocol Buffers (protobuf) استفاده میکند. فایلهای .pb فشردهتر هستند و توسط زیرساخت سرور Google سریعتر تجزیه میشوند. ابزار bundletool protobuf را برای اشکالزدایی به قالبی خوانا تبدیل میکند.
Dynamic Delivery — فناوری کلیدی است که AAB بر اساس آن ساخته شده است. این فناوری به کاربر فقط آن بخشهایی از برنامه را تحویل میدهد که با دستگاه و زبان او مطابقت دارد و همچنین امکان بارگذاری ماژولهای اضافی را بر اساس درخواست فراهم میکند.
ماژولهای Install-time همراه با APK پایه در هنگام نصب بارگذاری میشوند. ماژولهای Conditional فقط در صورت تحقق شرایط تحویل داده میشوند — مثلاً ماژولی با مواد برای صفحهنمایشهای ۴K. ماژولهای On-demand به درخواست کاربر در داخل برنامه بارگذاری میشوند.
برای منابع بزرگ (تا ۲ گیگابایت) به جای فایلهای OBB از Play Asset Delivery استفاده میشود. PAD از همان سه حالت تحویل پشتیبانی میکند: install-time، fast-follow (بلافاصله پس از نصب) و on-demand.
// بارگذاری ماژول on-demand از طریق SplitInstallManager
val manager = SplitInstallManagerFactory
.create(context)
val request = SplitInstallRequest
.newBuilder()
.addModule("level_pack_3")
.build()
manager.startInstall(request)
.addOnSuccessListener {
Log.d("AAB", "ماژول نصب شد")
}
هر ماژول پویا با یک فایل build.gradle جداگانه با تعیین نوع تحویل توصیف میشود. ماژول میتواند منابع، کد و مانیفست مستقل خود را داشته باشد که از برنامه پایه مستقل هستند.
ساخت AAB از طریق Android Gradle Plugin با وظیفه bundleRelease (یا bundleDebug) انجام میشود. نتیجه — یک فایل .aab در دایرکتوری build/outputs/bundle/.
برای ساخت AAB به تنظیمات خاصی نیاز نیست — Android Gradle Plugin به طور پیشفرض از باندلها پشتیبانی میکند. کافی است به جای assemble وظیفه bundle را مشخص کنید.
// 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 منابع را بر اساس سه بعد تقسیم میکند: زبان (language)، تراکم صفحه (density) و معماری CPU (abi). توسعهدهنده میتواند هر تقسیمی را در build.gradle غیرفعال کند — مثلاً اگر برنامه فقط از زبان انگلیسی پشتیبانی میکند. غیرفعال کردن تقسیم به این معنی است که منابع برای همه گزینهها در APK پایه قرار میگیرند.
Resource optimisation — AAB به طور خودکار PNG را بدون افت کیفیت به WebP تبدیل میکند، منابع استفادهنشده را فشرده میکند و رشتههای تکراری را حذف میکند. این بهینهسازیها در سمت Google Play هنگام تولید APK نهایی اعمال میشوند. در نتیجه کاربر APK را ۱۵–۲۵٪ کوچکتر از بایگانی کامل دریافت میکند.
فرآیند انتشار AAB در Google Play Console فقط از نظر فرمت فایل بارگذاریشده با APK متفاوت است. کنسول .aab را میپذیرد، ساختار، امضا و پیکربندی ماژولهای آن را بررسی میکند و سپس برای هر نوع دستگاه APK تولید میکند.
هنگام بارگذاری AAB، Google Play مدیریت کلیدهای امضا را بر عهده میگیرد. توسعهدهنده بسته امضا شده با کلید upload را بارگذاری میکند و Google APKهای تولید شده را با کلید خود دوباره امضا میکند. این کار چرخش کلیدها و بازیابی دسترسی در صورت گم شدن keystore را ساده میکند.
Google Play Console یک آزمایش داخلی AAB ارائه میدهد: میتوان APK تولید شده برای یک دستگاه خاص را دانلود کرد یا آزمایش داخلی را از طریق trackهای Internal Testing، Closed Alpha و Open Beta اجرا کرد.
انتقال به AAB ممکن است بهویژه در پروژههای با تعداد زیادی ماژول پویا یا پیکربندی پیچیده منابع مشکلاتی ایجاد کند.
اگر یک ماژول پویا به منابع ماژول پایه با نام نادرست ارجاع دهد، Google Play AAB را در مرحله بررسی رد میکند. راهحل — استفاده از بررسی lint قبل از ساخت و آزمایش همه ماژولها از طریق bundletool به صورت محلی.
تقسیم بر اساس زبان میتواند راهاندازی برنامه را کند کند اگر منابع برای منطقه فعلی به صورت پویا بارگذاری شوند. توصیه Google — اگر زبانها کمتر از ۱۰ عدد هستند تقسیم نکنید یا برای محبوبترین زبانها از install-time استفاده کنید.
برخی SDKها (تحلیل، تبلیغات، نقشهها) نیاز به دسترسی به مانیفست کامل و منابع دارند. بررسی سازگاری با AAB یک گام اجباری قبل از مهاجرت است. اکثر SDKهای بزرگ (Firebase، Google Ads، Crashlytics) از سال ۲۰۲۲ به طور کامل از AAB پشتیبانی میکنند. برای بررسی سازگاری از 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 استفاده میشود که به صورت محلی از AAB APK تولید میکند.
Google Play APK را فقط با منابع مطابق با دستگاه کاربر تولید میکند: یک تراکم صفحه، یک معماری CPU، یک زبان. منابع برای پیکربندیهای دیگر شامل نمیشوند که باعث صرفهجویی ۱۵–۳۰٪ در ترافیک هنگام دانلود میشود.
خیر، برنامههای موجود میتوانند به انتشار APK ادامه دهند. الزام AAB فقط برای برنامههای جدید اعمال میشود. Google توصیه میکند اما الزام نمیکند پروژههای موجود را به AAB بهروزرسانی کنید.
وظیفه ساخت را از assembleRelease به bundleRelease تغییر دهید، سازگاری همه SDKها را بررسی کنید، App Signing را در Google Play Console پیکربندی کنید و اولین AAB را از طریق track موجود بارگذاری کنید.
بله، AAB شامل کتابخانههای بومی در ماژولها است. Google Play فقط فایلهای .so متناسب با معماری CPU دستگاه را تحویل میدهد. این به ویژه برای بازیهای Unity و Unreal Engine با مجموعههای بومی بزرگ مهم است.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید