در آگوست 2021، گوگل تصمیمی گرفت که اساساً نحوه توزیع برنامه های Android را تغییر داد: همه برنامه های جدید ارسال شده به فروشگاه Google Play باید به جای APK سنتی از فرمت Android App Bundle (AAB) استفاده کنند. این تغییر بر توسعهدهندگان، کاربران و کل اکوسیستم توزیع برنامههای شخص ثالث تأثیر گذاشت. اما دقیقاً App Bundle چیست، چگونه کار می کند و چرا باید به آن اهمیت دهید؟
این راهنما همه چیز را پوشش میدهد، از داخلیهای فنی فرمت AAB گرفته تا پیامدهای عملی برای کاربرانی که میخواهند برنامهها را با دوستان خود به اشتراک بگذارند یا آنها را بر روی دستگاههایی بدون دسترسی به Play Store نصب کنند.
Android App Bundle چیست؟
Android App Bundle یک قالب انتشاری است که شامل همه کدها و منابع کامپایل شده یک برنامه است، اما تولید APK نهایی قابل نصب را به Google Play موکول می کند. آن را به عنوان یک الگوی اصلی در نظر بگیرید که سرورهای Google از آن بستههای بهینهسازی شده و مخصوص دستگاه را در پرواز ایجاد میکنند.
برخلاف APK که یک بسته آماده برای نصب است، فایل AAB را نمی توان مستقیماً روی دستگاه نصب کرد. این یک مصنوع ساختنی است که در فروشگاه Play آپلود میشود، جایی که زیرساخت Google آن را پردازش میکند و برای هر پیکربندی دستگاه، APKهای متناسب تولید میکند.
پسوند فایل .aab است و در داخل از فرمت بافر پروتکل ترکیب شده با ساختار ZIP مانند استفاده می کند. این برنامه حاوی بایت کد DEX، منابع، داراییها، کتابخانههای بومی و یک فایل فراداده دسته ویژه است که به Google Play میگوید چگونه محتوا را تقسیم کند.
چرا Google فرمت AAB را اجباری کرد؟
انگیزه اصلی پشت App Bundles کاهش حجم دانلود اپلیکیشن است. یک برنامه معمولی Android باید از چند تراکم صفحه (mdpi، hdpi، xhdpi، xxhdpi، xxxhdpi)، چندین معماری CPU (armeabi-v7a، arm64-v8a، x86، x86_64) و چندین زبان پشتیبانی کند. در مدل سنتی APK، همه این منابع در یک فایل واحد قرار میگیرند، حتی اگر هر دستگاهی فقط به کسری از آنها نیاز داشته باشد.
بازی ای را در نظر بگیرید که شامل کتابخانه های بومی برای چهار معماری CPU و بافت برای پنج تراکم صفحه نمایش است. APK جهانی ممکن است 200 مگابایت باشد، اما یک نسخه مخصوص دستگاه که فقط شامل معماری و تراکم مربوطه باشد میتواند 80 مگابایت باشد. یعنی کاهش 60 درصدی حجم دانلود.
گوگل گزارش می دهد که برنامه هایی که از App Bundles استفاده می کنند به طور متوسط 15٪ کوچکتر از معادل های جهانی APK خود هستند. برای برنامه ها و بازی های بزرگ، پس انداز می تواند بسیار چشمگیرتر باشد. دانلودهای کوچکتر به معنای نصب سریعتر، مصرف پهنای باند کمتر و نصب کمتر رها شده به دلیل نگرانی های اندازه است.
نحوه عملکرد داخلی App Bundles
ساختار بسته نرم افزاری
یک فایل AAB در ماژول ها سازماندهی شده است که هر ماژول حاوی کد، منابع و دارایی های خود است. رایج ترین ساختار شامل:
- ماژول پایه: حاوی کد اصلی برنامه و منابعی است که هر دستگاهی به آن نیاز دارد. این همیشه نصب است.
- تقسیمات پیکربندی: بخشهایی را برای منابع زبان، منابع چگالی صفحه و کتابخانههای بومی ABI (معماری CPU) جدا کنید.
- ماژول های ویژگی پویا: ماژول های اختیاری که پس از نصب اولیه در صورت تقاضا قابل دانلود هستند.
- بسته های دارایی: داراییهای بزرگی مانند سطوح بازی یا رسانهای که میتوانند در زمان نصب، در صورت تقاضا یا در پسزمینه تحویل داده شوند.
تقسیم نسل APK
هنگامی که کاربر یک برنامه را از فروشگاه Play دانلود میکند، سرورهای Google پیکربندی دستگاه را بررسی میکنند و مجموعهای از APKهای تقسیمشده را متناسب با آن دستگاه خاص تولید میکنند. یک نصب معمولی ممکن است شامل موارد زیر باشد:
- base.apk، کد برنامه اصلی و منابع ضروری
- split_config.arm64_v8a.apk، کتابخانه های بومی برای CPU دستگاه
- split_config.xxhdpi.apk، منابعی برای تراکم صفحه نمایش دستگاه
- split_config.en.apk، منابع زبان برای منطقه کاربر
این APK های تقسیم شده با هم به عنوان یک برنامه منطقی نصب می شوند. مدیر بسته Android با آنها به عنوان یک برنامه برخورد می کند، اما آنها از نظر فیزیکی فایل های جداگانه ای در دستگاه هستند. این مکانیسمی است که باعث صرفه جویی در اندازه می شود.
تحویل دینامیک
یکی از قدرتمندترین ویژگی های App Bundles، تحویل پویا است. توسعهدهندگان میتوانند ویژگیهای خاصی را بهعنوان قابل دانلود در صورت تقاضا علامتگذاری کنند. به عنوان مثال، یک برنامه ویرایش عکس ممکن است شامل فیلترهای پیشرفته به عنوان یک ماژول ویژگی پویا باشد. کاربرانی که هرگز از آن فیلترها استفاده نمی کنند، هرگز آن ها را دانلود نمی کنند و در فضای ذخیره سازی صرفه جویی می کنند.
ماژولهای ویژگی پویا در زمان اجرا از طریق کتابخانه Play Core دانلود و نصب میشوند. این برنامه میتواند بررسی کند که آیا یک ماژول نصب شده است یا خیر و در صورت نیاز درخواست دانلود آن را بدهد، بنابراین کاربر عملکرد جدید را بهعنوان یک دانلود کوچک درون برنامهای به جای نصب مجدد کامل تجربه میکند.
AAB در مقابل APK: تفاوت های کلیدی
درک تفاوت های بین این فرمت ها به روشن شدن زمان مناسب بودن هر کدام کمک می کند:
- فایلهای APK قابلیت نصب: را میتوان مستقیماً روی هر دستگاه Androidی نصب کرد. فایل های AAB را نمی توان مستقیماً نصب کرد و ابتدا باید پردازش شوند.
- اندازه: یک APK جهانی حاوی منابعی برای همه تنظیمات است. یک AAB تحویل خاص دستگاه را فعال می کند و در نتیجه بارگیری های کمتری انجام می شود.
- امضاء: با APK ها، توسعه دهنده بسته نهایی قابل نصب را امضا می کند. با AAB، توسعهدهنده بسته را امضا میکند و Google با استفاده از Play App Signing، فایلهای APK تولید شده را دوباره امضا میکند.
- فایل های APK توزیع: را می توان از طریق هر کانالی توزیع کرد. AAB ها در اصل برای فروشگاه Play طراحی شده اند، اگرچه ابزارهایی مانند bundletool می توانند APK را از آنها به صورت محلی تولید کنند.
- قابلیت اشتراک گذاری: به راحتی می توانید یک فایل APK را با شخص دیگری به اشتراک بگذارید. اشتراکگذاری یک برنامه نصبشده از AAB مستلزم جمعآوری همه فایلهای APK تقسیمشده است که پیچیدهتر است.
مناقشه امضاء
یکی از بحثبرانگیزترین جنبههای دستور AAB Play App Signing است. وقتی یک توسعهدهنده یک AAB آپلود میکند، Google کلید امضای مورد استفاده برای امضای فایلهای APK نهایی تحویل داده شده به کاربران را نگه میدارد. این بدان معناست که گوگل از نظر فنی این توانایی را دارد که محتوای APK را قبل از امضا و تحویل آن تغییر دهد.
گوگل استدلال می کند که این ضروری است زیرا آنها باید APK های تقسیم شده ای را که تولید می کنند امضا کنند. توسعهدهندگان یک کلید آپلود را برای تأیید اعتبار آپلودهای خود نگه میدارند، اما کلید امضای واقعی برنامه توسط زیرساخت Google مدیریت میشود.
برای اکثر توسعه دهندگان، این یک معامله منطقی است. Google خدمات پشتیبانگیری و بازیابی کلید را ارائه میکند و خطر از دست دادن کلید (که بهطور دائم از بهروزرسانی برنامه جلوگیری میکند) از بین میرود. با این حال، توسعه دهندگان متمرکز بر حریم خصوصی و طرفداران منبع باز نگرانی هایی را در مورد این تمرکز اعتماد ایجاد کرده اند.
این برای کاربرانی که برنامه ها را به اشتراک می گذارند به چه معناست
تغییر به App Bundles پیامدهای مهمی برای کاربرانی دارد که میخواهند برنامهها را خارج از Play Store به اشتراک بگذارند:
استخراج برنامه های نصب شده
وقتی یک برنامه نصب شده از AAB را استخراج می کنید، یک فایل APK دریافت نمی کنید. در عوض، مجموعه ای از APK های تقسیم شده را دریافت می کنید. این تقسیمبندیها مختص دستگاه هستند، به این معنی که برنامه استخراجشده از گوشی با پردازنده ARM64 و صفحه نمایش xxhdpi روی دستگاهی با پیکربندی متفاوت کار نخواهد کرد.
فرمت های XAPK و APKS
برای مقابله با چالش اشتراکگذاری فایلهای APK تقسیمشده، قالبهای کانتینری مانند XAPK و APKS ایجاد شدند. این قالبها همه فایلهای APK تقسیمشده را با هم در یک فایل قابل دانلود جمع میکنند. وقتی با یک فایل XAPK روبرو میشوید، احتمالاً حاوی برنامهای است که در ابتدا بهعنوان App Bundle توزیع شده است.
تبدیل XAPK به APK ما می تواند به شما کمک کند APK پایه را از این قالب های کانتینر استخراج کنید. با این حال، به خاطر داشته باشید که APK پایه به تنهایی ممکن است حاوی تمام منابع مورد نیاز برای عملکرد صحیح برنامه در هر دستگاه نباشد، زیرا تراکم و منابع خاص ABI ممکن است در APK های تقسیم شده باشد.
با استفاده از bundletool
گوگل یک ابزار منبع باز به نام 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 خود ادامه دهند.
با این حال، برخی از توسعه دهندگان فقط AAB می سازند و برای توزیع کاملاً به Play متکی هستند. این بدان معناست که دریافت برنامههای این توسعهدهندگان در خارج از اکوسیستم فروشگاه Play دشوارتر است. مخازن برنامه های شخص ثالث با میزبانی مجموعه های تقسیم شده APK (به عنوان فایل های XAPK یا APKS) یا با استفاده از ابزار بسته برای تولید APK های جهانی سازگار شده اند.
ماژول های ویژگی پویا در عمل
ماژولهای ویژگی پویا یکی از جالبترین قابلیتهای قالب App Bundle را نشان میدهند. در اینجا چند مورد استفاده در دنیای واقعی آورده شده است:
- ویژگی های دوربین: یک برنامه ممکن است شامل فیلترهای AR به عنوان یک ماژول پویا باشد که فقط زمانی دانلود می شود که کاربر برای اولین بار به ویژگی دوربین دسترسی پیدا کند.
- بسته های زبان: دادههای ترجمه برای زبانهای کمتر رایج را میتوان در صورت تقاضا به جای همراه با هر نصب تحویل داد.
- بازیهای سطوح بازی: میتوانند محتوای بیشتری را با پیشرفت بازیکنان ارائه دهند و دانلود اولیه را کم نگه دارند.
- ابزارهای حرفه ای: ویژگیهای پیشرفته در برنامههای بهرهوری را میتوان فقط به کاربرانی که به آنها نیاز دارند ارائه کرد.
برای کاربران، این بدان معنی است که اندازه نصب شده یک برنامه ممکن است در طول زمان با دانلود ماژول های پویا افزایش یابد. همچنین به این معنی است که اشتراک گذاری چنین برنامه ای مستلزم گنجاندن همه ماژول های دانلود شده است که فرآیند استخراج را پیچیده تر می کند.
بهترین روش ها برای توسعه دهندگان
اگر در حال توسعه برنامه های Android هستید، در اینجا توصیه هایی برای کار موثر با App Bundles وجود دارد:
- همیشه با bundletool به صورت محلی تست کنید قبل از آپلود در Play. فایلهای APK مخصوص دستگاه را تولید کنید و تأیید کنید که درست کار میکنند.
- از مسیر تست داخلی Play Console استفاده کنید برای تأیید اینکه آیا APK های تقسیم شده به درستی در دستگاه های واقعی نصب و کار می کنند.
- ارائه یک APK جهانی را در نظر بگیرید برای کانال های توزیع جایگزین اگر پایگاه کاربر شما فراتر از فروشگاه Play باشد.
- مراقب مرزهای ماژول ویژگی پویا باشید. ویژگی هایی که اغلب استفاده می شود باید در ماژول پایه باشد، نه ماژول های پویا.
- تست بر روی دستگاه های با پیکربندی های مختلف برای اطمینان از اینکه تقسیمبندیهای پیکربندی به درستی ایجاد میشوند و هیچ منبعی از دست نمیرود.
- کلید آپلود خود را ایمن نگه دارید. در حالی که Google کلید امضای برنامه را مدیریت می کند، کلید آپلود شما هویت شما را به عنوان توسعه دهنده احراز هویت می کند.
آینده توزیع اپلیکیشن
قالب App Bundle همچنان در حال تکامل است. Google ویژگیهایی مانند Play Asset Delivery برای داراییهای بازی بزرگ، SDK Runtime برای SDKهای تبلیغاتی و پشتیبانی بهبودیافته از Wear OS و تنظیمات Android TV را معرفی کرده است. روند به سمت تحویل دقیق تر و بر اساس تقاضای اجزای برنامه است.
برای کاربران، این بدان معناست که مفهوم یک فایل برنامه مستقل و مستقل برای برنامههای فروشگاه Play کمتر رایج میشود. درک قالبهایی مانند XAPK، APKS و ابزارهای موجود برای کار با آنها برای هر کسی که برنامهها را خارج از جریان استاندارد Play Store مدیریت میکند، اهمیت فزایندهای پیدا میکند.
زمان نگهداری AAB در مقابل زمان ساخت APK جهانی
Android App Bundle نشان دهنده یک تغییر اساسی در نحوه بسته بندی و تحویل برنامه ها است. در حالی که مزایای واقعی را از نظر اندازه دانلود و کارایی تحویل به ارمغان می آورد، همچنین برای کاربرانی که برنامه ها را به اشتراک می گذارند یا آنها را از منابع جایگزین نصب می کنند، پیچیدگی ایجاد می کند. درک اینکه چگونه AAB ها کار می کنند، چگونه APK های تقسیم شده را تولید می کنند و چه ابزارهایی برای تبدیل بین فرمت ها در دسترس هستند، آنچه را که برای انتخاب قالب مناسب و تبدیل بین آنها با اطمینان نیاز دارید، به شما می دهد.
توسعهدهندگان برای بهینهسازی نحوه ارائه برنامه به AAB میرسند. اکثر کاربران روزمره تنها زمانی با آن مواجه می شوند که سعی می کنند چیزی را روی دستگاهی نصب کنند که دسترسی به Play Store ندارد. در هر صورت، چیزی که ارزش به خاطر سپردن دارد ساده است: AAB یک قالب انتشار است، نه یک قالب نصب، و ابزارهایی وجود دارند که فاصله بین این دو را پر می کنند.