AAB چیست، تفاوت با APK و نحوه عملکرد

نویسنده: IT Sectr منتشر شده: 2026-04-15 زمان مطالعه: 8 دقیقه

AAB (Android App Bundle) — قالبی برای انتشار برنامه‌های اندروید است که از سال ۲۰۲۱ جایگزین APK در Google Play شده است. برخلاف APK، AAB یک فایل نصبی نیست — این یک محفظه است که Google Play به‌صورت پویا APKهای بهینه‌شده برای هر دستگاه از آن تولید می‌کند. طبق داده‌های Android Developers، ۲۰۲۶، این قالب با حذف منابع استفاده‌نشده اندازه برنامه قابل‌دانلود را به طور متوسط ۱۵٪ کاهش می‌دهد.

نکات اصلی

  • AAB — قالبی برای انتشار برنامه‌های اندروید که Google Play از آن برای هر دستگاه APK تولید می‌کند.
  • Dynamic Delivery — مکانیزم تحویل فقط آن دسته از ماژول‌ها و منابعی که برای یک دستگاه خاص لازم است.
  • اجباری بودن — از آگوست ۲۰۲۱ Google Play برای همه برنامه‌های جدید AAB را الزامی کرده است.
  • صرفه‌جویی — اندازه دانلود با حذف منابع اضافی ۱۵–۳۰٪ کاهش می‌یابد.
  • دارایی‌ها — AAB از طریق ماژول‌های Play Asset Delivery تا ۲ گیگابایت بدون فایل‌های OBB پشتیبانی می‌کند.

AAB چیست

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

تفاوت بین AAB و APK اساسی است: APK یک فایل نصبی کامل و آماده نصب است. AAB یک محفظه با اجزای منبع است که نیاز به پردازش دارد.

پارامترAPKAAB
نوعفایل نصبیمحفظه انتشار
نصبمستقیماً روی دستگاهاز طریق Google Play
اندازهبایگانی کاملاجزای منبع
ماژول‌هاهمه در یک فایلماژول‌های جداگانه
امضاتوسعه‌دهندهGoogle Play
توزیعهر کانالیGoogle Play

APK برای توزیع خارج از Google Play مناسب است — از طریق وب‌سایت‌ها، ایمیل یا سیستم‌های MDM سازمانی. AAB به زیرساخت Google Play وابسته است و مستقیماً نصب نمی‌شود. برای آزمایش AAB از ابزار bundletool استفاده می‌شود که تولید APK را روی ماشین محلی شبیه‌سازی می‌کند.

ساختار فایل AAB

ساختار داخلی AAB شبیه APK است، اما شامل دایرکتوری‌ها و فایل‌های اضافی برای توصیف ماژول‌ها و وابستگی‌های آنهاست.

فایل/دایرکتوریهدف
base/ماژول پایه: کد، منابع، مانیفست
BundleConfig.pbپیکربندی باندل در قالب protobuf
Bundle-metadata/فراداده درباره نسخه‌های ماژول
feature/ماژول‌های پویا (on-demand)
assets/دارایی‌های برنامه
manifest/مانیفست هر ماژول

ماژول پایه (base)

ماژول base — یک جزء اجباری AAB است. این ماژول شامل کد اصلی، منابع و مانیفست برنامه است. بدون ماژول base برنامه نمی‌تواند ساخته شود. همه ماژول‌های دیگر اختیاری هستند و از طریق Dynamic Delivery متصل می‌شوند.

فرمت protobuf

پیکربندی AAB به جای XML از Protocol Buffers (protobuf) استفاده می‌کند. فایل‌های .pb فشرده‌تر هستند و توسط زیرساخت سرور Google سریع‌تر تجزیه می‌شوند. ابزار bundletool protobuf را برای اشکال‌زدایی به قالبی خوانا تبدیل می‌کند.

Dynamic Delivery و ماژول‌های برنامه

Dynamic Delivery — فناوری کلیدی است که AAB بر اساس آن ساخته شده است. این فناوری به کاربر فقط آن بخش‌هایی از برنامه را تحویل می‌دهد که با دستگاه و زبان او مطابقت دارد و همچنین امکان بارگذاری ماژول‌های اضافی را بر اساس درخواست فراهم می‌کند.

انواع ماژول‌ها

ماژول‌های Install-time همراه با APK پایه در هنگام نصب بارگذاری می‌شوند. ماژول‌های Conditional فقط در صورت تحقق شرایط تحویل داده می‌شوند — مثلاً ماژولی با مواد برای صفحه‌نمایش‌های ۴K. ماژول‌های On-demand به درخواست کاربر در داخل برنامه بارگذاری می‌شوند.

Play Asset Delivery (PAD)

برای منابع بزرگ (تا ۲ گیگابایت) به جای فایل‌های OBB از Play Asset Delivery استفاده می‌شود. PAD از همان سه حالت تحویل پشتیبانی می‌کند: install-time، fast-follow (بلافاصله پس از نصب) و on-demand.

kotlin
// بارگذاری ماژول on-demand از طریق SplitInstallManager
val manager = SplitInstallManagerFactory
    .create(context)

val request = SplitInstallRequest
    .newBuilder()
    .addModule("level_pack_3")
    .build()

manager.startInstall(request)
    .addOnSuccessListener {
        Log.d("AAB", "ماژول نصب شد")
    }

پیکربندی ماژول در Gradle

هر ماژول پویا با یک فایل build.gradle جداگانه با تعیین نوع تحویل توصیف می‌شود. ماژول می‌تواند منابع، کد و مانیفست مستقل خود را داشته باشد که از برنامه پایه مستقل هستند.

ساخت AAB از طریق Gradle

ساخت AAB از طریق Android Gradle Plugin با وظیفه bundleRelease (یا bundleDebug) انجام می‌شود. نتیجه — یک فایل .aab در دایرکتوری build/outputs/bundle/.

پیکربندی ساخت

برای ساخت AAB به تنظیمات خاصی نیاز نیست — Android Gradle Plugin به طور پیش‌فرض از باندل‌ها پشتیبانی می‌کند. کافی است به جای assemble وظیفه bundle را مشخص کنید.

kotlin
// build.gradle.kts — ساخت AAB با امضا
android {
    bundle {
        language {
            enableSplit = true
        }
        density {
            enableSplit = true
        }
        abi {
            enableSplit = true
        }
    }
}
// وظیفه: ./gradlew bundleRelease

آزمایش محلی از طریق bundletool

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

به طور پیش‌فرض، AAB منابع را بر اساس سه بعد تقسیم می‌کند: زبان (language)، تراکم صفحه (density) و معماری CPU (abi). توسعه‌دهنده می‌تواند هر تقسیمی را در build.gradle غیرفعال کند — مثلاً اگر برنامه فقط از زبان انگلیسی پشتیبانی می‌کند. غیرفعال کردن تقسیم به این معنی است که منابع برای همه گزینه‌ها در APK پایه قرار می‌گیرند.

Resource optimisation — AAB به طور خودکار PNG را بدون افت کیفیت به WebP تبدیل می‌کند، منابع استفاده‌نشده را فشرده می‌کند و رشته‌های تکراری را حذف می‌کند. این بهینه‌سازی‌ها در سمت Google Play هنگام تولید APK نهایی اعمال می‌شوند. در نتیجه کاربر APK را ۱۵–۲۵٪ کوچک‌تر از بایگانی کامل دریافت می‌کند.

انتشار AAB در Google Play

فرآیند انتشار AAB در Google Play Console فقط از نظر فرمت فایل بارگذاری‌شده با APK متفاوت است. کنسول .aab را می‌پذیرد، ساختار، امضا و پیکربندی ماژول‌های آن را بررسی می‌کند و سپس برای هر نوع دستگاه APK تولید می‌کند.

App Signing by Google Play

هنگام بارگذاری AAB، Google Play مدیریت کلیدهای امضا را بر عهده می‌گیرد. توسعه‌دهنده بسته امضا شده با کلید upload را بارگذاری می‌کند و Google APKهای تولید شده را با کلید خود دوباره امضا می‌کند. این کار چرخش کلیدها و بازیابی دسترسی در صورت گم شدن keystore را ساده می‌کند.

آزمایش قبل از انتشار

Google Play Console یک آزمایش داخلی AAB ارائه می‌دهد: می‌توان APK تولید شده برای یک دستگاه خاص را دانلود کرد یا آزمایش داخلی را از طریق trackهای Internal Testing، Closed Alpha و Open Beta اجرا کرد.

مشکلات رایج با AAB و راه‌حل آنها

انتقال به AAB ممکن است به‌ویژه در پروژه‌های با تعداد زیادی ماژول پویا یا پیکربندی پیچیده منابع مشکلاتی ایجاد کند.

خطاهای پیکربندی ماژول

اگر یک ماژول پویا به منابع ماژول پایه با نام نادرست ارجاع دهد، Google Play AAB را در مرحله بررسی رد می‌کند. راه‌حل — استفاده از بررسی lint قبل از ساخت و آزمایش همه ماژول‌ها از طریق bundletool به صورت محلی.

تقسیمات زبانی و کاهش عملکرد

تقسیم بر اساس زبان می‌تواند راه‌اندازی برنامه را کند کند اگر منابع برای منطقه فعلی به صورت پویا بارگذاری شوند. توصیه Google — اگر زبان‌ها کمتر از ۱۰ عدد هستند تقسیم نکنید یا برای محبوب‌ترین زبان‌ها از install-time استفاده کنید.

سازگاری با SDKهای شخص ثالث

برخی SDKها (تحلیل، تبلیغات، نقشه‌ها) نیاز به دسترسی به مانیفست کامل و منابع دارند. بررسی سازگاری با AAB یک گام اجباری قبل از مهاجرت است. اکثر SDKهای بزرگ (Firebase، Google Ads، Crashlytics) از سال ۲۰۲۲ به طور کامل از AAB پشتیبانی می‌کنند. برای بررسی سازگاری از bundletool با پرچم --validate استفاده می‌شود که تولید APK سمت سرور را شبیه‌سازی می‌کند.

نسخه‌گذاری AAB

AAB از versionCode از مانیفست ماژول پایه استفاده می‌کند. برخلاف APK، AAB همچنین از versionCode جداگانه برای هر ماژول پشتیبانی می‌کند — این امکان به‌روزرسانی بخش‌های جداگانه برنامه را بدون نصب کامل فراهم می‌کند. Dynamic Delivery ماژول‌های نصب شده را ردیابی می‌کند و فقط اجزای تغییر یافته را هنگام به‌روزرسانی از طریق Google Play تحویل می‌دهد.

مانیتورینگ و تحلیل AAB

Google Play Console تحلیل دقیقی برای هر AAB ارائه می‌دهد: چه تعداد APK تولید شده، کدام تقسیمات مورد نیاز بوده، میانگین اندازه دانلود بر اساس دستگاه‌ها چقدر است. Android Vitals معیارهای عملکرد APKهای تولید شده را نشان می‌دهد. این داده‌ها به بهینه‌سازی پیکربندی تقسیمات و کاهش اندازه دانلود برای دسته‌های مختلف دستگاه کمک می‌کند.

سوالات متداول

آیا می‌توان AAB را مستقیماً روی تلفن نصب کرد؟

خیر، AAB برای نصب مستقیم طراحی نشده است. Google Play آن را برای دستگاه خاص به APK تبدیل می‌کند. برای آزمایش روی تلفن از bundletool استفاده می‌شود که به صورت محلی از AAB APK تولید می‌کند.

AAB چگونه اندازه برنامه را کاهش می‌دهد؟

Google Play APK را فقط با منابع مطابق با دستگاه کاربر تولید می‌کند: یک تراکم صفحه، یک معماری CPU، یک زبان. منابع برای پیکربندی‌های دیگر شامل نمی‌شوند که باعث صرفه‌جویی ۱۵–۳۰٪ در ترافیک هنگام دانلود می‌شود.

آیا AAB برای برنامه‌های موجود اجباری است؟

خیر، برنامه‌های موجود می‌توانند به انتشار APK ادامه دهند. الزام AAB فقط برای برنامه‌های جدید اعمال می‌شود. Google توصیه می‌کند اما الزام نمی‌کند پروژه‌های موجود را به AAB به‌روزرسانی کنید.

چگونه از APK به AAB مهاجرت کنیم؟

وظیفه ساخت را از assembleRelease به bundleRelease تغییر دهید، سازگاری همه SDKها را بررسی کنید، App Signing را در Google Play Console پیکربندی کنید و اولین AAB را از طریق track موجود بارگذاری کنید.

آیا AAB از کتابخانه‌های بومی پشتیبانی می‌کند؟

بله، AAB شامل کتابخانه‌های بومی در ماژول‌ها است. Google Play فقط فایل‌های .so متناسب با معماری CPU دستگاه را تحویل می‌دهد. این به ویژه برای بازی‌های Unity و Unreal Engine با مجموعه‌های بومی بزرگ مهم است.

خلاصه

  • AAB — محفظه‌ای برای انتشار برنامه‌های اندروید که Google Play از آن APKهای هدف تولید می‌کند.
  • Dynamic Delivery فقط منابع مطابق با دستگاه کاربر را تحویل می‌دهد — صرفه‌جویی ترافیک ۱۵–۳۰٪.
  • ماژولار بودن — برنامه به ماژول‌های base، conditional و on-demand با استراتژی بارگذاری متفاوت تقسیم می‌شود.
  • اجباری بودن — از سال ۲۰۲۱ همه برنامه‌های جدید در Google Play در قالب AAB منتشر می‌شوند.
  • App Signing — Google Play کلیدهای امضا را مدیریت می‌کند و چرخش و بازیابی را ساده می‌کند.
  • آزمایش از طریق bundletool انجام می‌شود که تولید APK سمت سرور را به صورت محلی شبیه‌سازی می‌کند.
  • Play Asset Delivery جایگزین فایل‌های OBB می‌شود و تا ۲ گیگابایت دارایی با حالت‌های بارگذاری انعطاف‌پذیر پشتیبانی می‌کند.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید