اکوسیستم Android از انواع فرمت های فایل برای بسته بندی، توزیع و ذخیره داده های برنامه استفاده می کند. اگر تا به حال برنامه ای را از منبع شخص ثالث دانلود کرده باشید، احتمالاً با پسوندهای فایلی فراتر از APK آشنا مواجه شده اید. فرمتهایی مانند XAPK، APKS، APKM، AAB، و OBB هر کدام هدف خاصی را در چرخه عمر برنامه Android انجام میدهند.
این راهنما یک مرجع کامل برای هر فرمت اصلی فایل Androidی است. توسعهدهندگان، کاربران قدرتمندی که برنامهها را در کنار هم قرار میدهند، و خوانندگان کنجکاویی که فقط میخواهند بدانند این فایلها واقعاً حاوی چه چیزی هستند، همگی هر قالب را به زبان ساده در زیر توضیح خواهند داد.
APK: کیت بسته Android
APK فرمت فایل اصلی برای برنامه های Android است. این فرمت نصب استاندارد از زمان شروع Android بوده است و همچنان فرمتی است که سیستم عامل Android به طور بومی برای نصب برنامه درک می کند.
آنچه در آن است
یک فایل APK اساسا یک آرشیو ZIP با ساختار داخلی خاص است:
- AndroidManifest.xml، فایل XML باینری که نام بسته، اجزا، مجوزها و الزامات برنامه را اعلام می کند.
- classes.dex (و classes2.dex و غیره)، بایت کد Dalvik کامپایل شده حاوی کد جاوا/کوتلین برنامه
- resources.arsc، شناسه های منابع جدول منابع را به مقادیر آنها نگاشت کرد
- res/، دایرکتوری حاوی منابعی مانند طرحبندیها، ترسیمها و رشتههایی که با شناسه ارجاع میشوند.
- assets/، فایلهای دارایی خام قابل دسترسی برنامه در زمان اجرا از طریق AssetManager
- lib/، کتابخانه های بومی سازماندهی شده توسط معماری CPU (به عنوان مثال، lib/arm64-v8a/)
- META-INF/، فایل های امضا و اطلاعات گواهی
وقتی با آن روبرو می شوید
فایلهای APK همان چیزی است که هنگام بارگذاری جانبی برنامهها از منابع شخص ثالث دانلود میکنید. آنها همچنین همان چیزی هستند که از فروشگاه Play بر روی دستگاه شما نصب میشوند، اگرچه نصبهای فروشگاه Play مدرن اغلب از APKهای تقسیمشده از App Bundles استفاده میکنند.
چگونه آن را اداره کنیم
فایل های APK را می توان با باز کردن آنها با یک مدیر فایل یا با استفاده از adb install به طور مستقیم در Android نصب کرد. همچنین میتوانید با تغییر نام برنامه افزودنی به .zip و استخراج، یا با استفاده از تأیید کننده APK برای بررسی امضاها و ابردادهها، محتوای آنها را بررسی کنید.
AAB: Android App Bundle
Android App Bundle قالب انتشار گوگل برای Play Store است. از آگوست 2021، همه برنامههای جدید در فروشگاه Play باید بهجای APK بهعنوان AAB ارسال شوند.
آنچه در آن است
یک فایل AAB از یک فرمت مبتنی بر بافر پروتکل استفاده می کند و حاوی:
- کد برنامه اصلی ماژول پایه: و منابع مورد نیاز در هر دستگاه
- منابع تقسیمات پیکربندی: سازماندهی شده بر اساس تراکم صفحه نمایش، معماری CPU و زبان
- ماژول های ویژگی پویا: ویژگی های اختیاری که در صورت تقاضا قابل دانلود هستند
- دستورالعمل های فراداده بسته: برای Google Play در مورد نحوه تولید APK های خاص دستگاه
وقتی با آن روبرو می شوید
به عنوان یک کاربر معمولی، معمولاً مستقیماً با فایل های AAB روبرو نمی شوید. آنها توسط توسعه دهندگان در طول فرآیند ساخت و آپلود استفاده می شوند. با این حال، اگر یک فایل AAB (شاید از مصنوعات ساخت یک پروژه منبع باز) به دست آورید، باید قبل از نصب آن را به فرمت APK تبدیل کنید.
چگونه آن را اداره کنیم
از ابزار خط فرمان bundletool Google یا تبدیل AAB به APK ما برای ایجاد یک APK قابل نصب از یک فایل AAB استفاده کنید. فرآیند تبدیل یا یک APK جهانی (بزرگتر، در همه جا کار می کند) یا APK های خاص دستگاه (کوچکتر، هدفمند دستگاه) ایجاد می کند.
XAPK: APK توسعه یافته
XAPK یک فرمت کانتینری است که توسط APKPure رایج شده است که یک APK را به همراه فایلهای داده OBB مرتبط با آن جمع میکند یا پیکربندیهای APK را به یک بسته قابل دانلود تقسیم میکند.
آنچه در آن است
یک فایل XAPK یک آرشیو ZIP شامل موارد زیر است:
- یک فایل APK پایه (برنامه اصلی)
- فایل های OBB (داده های گسترش برای بازی ها و برنامه های بزرگ)
- به صورت اختیاری، فایلهای APK را برای پیکربندیهای مختلف دستگاه تقسیم کنید
- یک فایل manifest.json که محتویات بسته و دستورالعمل های نصب را توصیف می کند
- یک فایل نماد برای اهداف نمایش
وقتی با آن روبرو می شوید
هنگام دانلود برنامه ها یا بازی های بزرگ از مخازن برنامه های شخص ثالث، با فایل های XAPK مواجه می شوید. بازیهایی که به فایلهای داده اضافی نیاز دارند (که قبلاً به صورت فایلهای OBB توزیع میشد) معمولاً به عنوان XAPK بستهبندی میشوند تا فرآیند دانلود را در یک فایل واحد ساده کنند.
چگونه آن را اداره کنیم
فایل های XAPK را نمی توان مستقیماً توسط نصب کننده بسته پیش فرض Android نصب کرد. شما به یک برنامه نصب اختصاصی XAPK نیاز دارید یا می توانید از تبدیل XAPK به APK ما برای استخراج APK پایه استفاده کنید. برای بازیهایی که به دادههای OBB نیاز دارند، همچنین باید فایلهای OBB را با استفاده از استخراج کننده OBB استخراج کرده و در فهرست درست قرار دهید.
APKS: مجموعه APK
فرمت APKS خروجی ابزار بسته Google هنگام تولید APKهای خاص دستگاه از یک فایل AAB است. همچنین توسط برخی از ابزارهای پشتیبان گیری برنامه برای ذخیره نصب های APK تقسیم شده استفاده می شود.
آنچه در آن است
یک فایل APKS یک آرشیو ZIP شامل موارد زیر است:
- toc.pb، جدول محتویات بافر پروتکل که ساختار تقسیم را توصیف می کند
- splits/، دایرکتوری حاوی APK پایه و همه APKهای تقسیم شده پیکربندی
- به صورت اختیاری، APKهای مستقل برای دستگاههایی که از نصبهای تقسیم شده پشتیبانی نمیکنند
وقتی با آن روبرو می شوید
هنگام استفاده از bundletool به صورت محلی، هنگام پشتیبانگیری از برنامههای نصب شده از فروشگاه Play، یا هنگام دانلود از مخازن شخص ثالث خاصی که ساختار APK تقسیمشده را حفظ میکنند، با فایلهای APKS مواجه میشوید.
چگونه آن را اداره کنیم
می توانید فایل های APKS را با استفاده از دستور install-apks bundletool نصب کنید یا با استفاده از ادغام APKS به APK ما آنها را به یک APK تبدیل کنید. توجه داشته باشید که ادغام APKهای تقسیم شده در یک APK جهانی ممکن است اندازه فایل را افزایش دهد زیرا همه منابع پیکربندی ترکیب شده اند.
APKM: بسته APKMirror
APKM یک فرمت کانتینری اختصاصی است که توسط APKMirror برای توزیع برنامههایی که از چندین APK تقسیمشده تشکیل شدهاند، ایجاد شده است. این هدف مشابه XAPK و APKS است اما از ساختار خود APKMirror استفاده می کند.
آنچه در آن است
یک فایل APKM یک آرشیو ZIP شامل موارد زیر است:
- یک فایل APK پایه
- تقسیم فایل های APK برای پیکربندی های مختلف (تراکم، ABI، زبان)
- یک فایل فراداده که ساختار بسته را توصیف می کند
وقتی با آن روبرو می شوید
هنگام دانلود از APKMirror منحصراً با فایل های APKM مواجه می شوید. این سایت از این قالب برای برنامههایی استفاده میکند که بهعنوان App Bundle در Play Store توزیع میشوند و بنابراین از چندین APK تقسیمشده تشکیل شدهاند.
چگونه آن را اداره کنیم
فایلهای APKM برای نصب مستقیم به برنامه نصبکننده APKMirror نیاز دارند، یا میتوانید محتویات را استخراج کنید (زیرا یک فایل ZIP است) و APKهای تقسیمشده را بهصورت دستی با استفاده از دستور install-multiple ADB نصب کنید. APK پایه همچنین می تواند به طور مستقل استخراج و نصب شود، اگرچه ممکن است برخی از عملکردها بدون تقسیم پیکربندی محدود شوند.
OBB: حباب باینری مات
فایلهای OBB فایلهای توسعهای هستند که توسط برنامههای Android (عمدتاً بازیها) برای ذخیره دادههای زیادی که از محدودیت اندازه APK فروشگاه Play فراتر میرود، استفاده میکنند. اگرچه گوگل تا حد زیادی این سیستم را با Play Asset Delivery جایگزین کرده است، بسیاری از برنامه های موجود هنوز از فایل های OBB استفاده می کنند.
آنچه در آن است
فایل های OBB می توانند حاوی هر نوع داده ای باشند که برنامه نیاز دارد:
- بافت های بازی و مدل های سه بعدی
- فایل های صوتی و موسیقی متن
- محتوای ویدیویی
- داده های سطح و نقشه ها
- هر گونه داده باینری بزرگی که توسعه دهنده انتخاب می کند تا به صورت خارجی ذخیره شود
فرمت داده ها در یک فایل OBB کاملا به توسعه دهنده بستگی دارد. برخی از فشرده سازی ZIP و برخی دیگر از فرمت های باینری سفارشی استفاده می کنند. "Opaque" در نام نشان می دهد که Android با فایل به عنوان یک جعبه سیاه برخورد می کند.
وقتی با آن روبرو می شوید
فایلهای OBB هنگام بارگذاری جانبی بازیهای بزرگ یا زمانی که در بستههای XAPK قرار میگیرند، مواجه میشوند. آنها در /Android/obb/[package.name]/ در حافظه مشترک دستگاه ذخیره می شوند.
چگونه آن را اداره کنیم
فایل های OBB باید در دایرکتوری صحیح قرار داده شوند تا برنامه بتواند آنها را پیدا کند. نام فایل معمولاً از الگوی main.[version].[package.name].obb یا patch.[version].[package.name].obb پیروی می کند. از استخراج کننده OBB ما برای استخراج فایل های OBB از بسته های XAPK استفاده کنید.
DEX: دالویک اجرایی
فایلهای DEX حاوی بایت کد کامپایلشدهای هستند که در محیط زمان اجرا Android اجرا میشوند. آنها در داخل فایل های APK یافت می شوند اما می توانند به طور مستقل در طول توسعه و اشکال زدایی نیز وجود داشته باشند.
آنچه در آن است
یک فایل DEX شامل:
- بایت کد جاوا/کوتلین در قالب دستورالعمل دالویک کامپایل شده است
- ثابت های رشته و تعاریف نوع
- مراجع روش و زمینه
- تعاریف طبقات و سلسله مراتب آنها
جزئیات فنی
یک فایل DEX منفرد دارای محدودیت مرجع 65536 روش است ("محدودیت 64K"). برنامههایی که از این حد فراتر میروند از چندین فایل DEX (classes.dex، classes2.dex و غیره) استفاده میکنند، تکنیکی به نام multidex. ابزارهای ساخت مدرن به طور خودکار این کار را انجام می دهند.
فایل های ODEX، VDEX و ART
اینها نسخه های بهینه فایل های DEX هستند که توسط Android Runtime در حین یا پس از نصب ایجاد شده اند:
- ODEX (DEX بهینه شده): حاوی کد ماشین بومی کامپایل شده از قبل برای متدهای پرکاربرد است. بر اساس نمایههای استفاده، در طول تعمیر و نگهداری بیحرکت ایجاد میشود.
- VDEX (DEX تأیید شده): حاوی بایت کد DEX تأیید شده با نتایج تأیید از پیش محاسبه شده است. این کار بوتهای بعدی و راهاندازی برنامهها را با پرش از تأیید مجدد سرعت میبخشد.
- ART (تصویر زمان اجرای Android): شامل اشیاء کلاس و دادههای پشته از قبل راهاندازی شده است. این اجازه می دهد تا زمان اجرا از بارگذاری کلاس و مقداردهی اولیه برای کلاس های فریمورک رایج در هنگام راه اندازی صرف نظر کند.
این فایلها توسط سیستم تولید میشوند و معمولاً چیزی نیستند که کاربران به طور مستقیم با آن تعامل داشته باشند. آنها در /data/dalvik-cache/ یا در کنار APK در /data/app/ ذخیره می شوند.
SO: اشیاء مشترک (کتابخانههای بومی)
فایلهای با پسوند .so کتابخانههای مشترک بومی هستند که برای معماریهای CPU خاص کامپایل شدهاند. آنها حاوی کد ماشینی هستند که به زبان های C، C++ یا Rust نوشته شده است که مستقیماً روی پردازنده بدون سربار زمان اجرا Dalvik/ART اجرا می شود.
انواع معماری
- armeabi-v7a، ARM 32 بیتی (اکثر دستگاه های قدیمی)
- arm64-v8a، ARM 64 بیتی (مدرن ترین گوشی ها)
- x86، 32 بیتی Intel/AMD (برخی تبلت ها و شبیه سازها)
- x86_64، 64 بیتی Intel/AMD (Chromebook و شبیه سازها)
هنگامی که یک APK حاوی کتابخانههای بومی است، باید معماری صحیح دستگاه مورد نظر را در خود داشته باشد. اگر معماری اشتباه گنجانده شود، برنامه با UnsatisfiedLinkError خراب می شود.
فایل های XML در Android
Android به طور گسترده از XML استفاده می کند، اما به دو شکل متفاوت:
XML باینری
در داخل فایلهای APK، منابع XML (طرحبندی، مانیفست، فایلهای رشتهای) در قالب باینری کامپایلشده به نام AXML ذخیره میشوند. این قالب فشرده تر و سریعتر از متن XML تجزیه می شود. ابزارهایی مانند aapt2 یا apktool می توانند XML باینری را به متن قابل خواندن بازگردانند.
متن XML
در طول توسعه، فایل های XML در قالب متن استاندارد هستند. فرآیند ساخت آنها را برای گنجاندن در APK در XML باینری کامپایل می کند. فایل های پیکربندی مانند network_security_config.xml و فایل های منبع در فهرست res/ به صورت متنی XML شروع می شوند.
فایل های نقشه برداری ProGuard/R8
در حالی که یک فرمت خاص Android نیست، فایل های نقشه برداری (mapping.txt) برای درک برنامه های مبهم مهم هستند. هنگامی که توسعه دهندگان از ابزارهای کوچک کردن کد مانند R8 استفاده می کنند، نام کلاس ها و روش ها با شناسه های کوتاه و بی معنی جایگزین می شوند. فایل نگاشت، ترجمههای نام اصلی به مبهم را که برای خواندن گزارشهای خرابی ضروری است، ثبت میکند.
فرمت پشتیبان Android (AB)
فایلهای دارای پسوند .ab آرشیوهای پشتیبان Android هستند که توسط adb backup ایجاد شدهاند. آنها حاوی یک آرشیو tar (به صورت اختیاری فشرده و رمزگذاری شده) از فهرست داده های یک برنامه هستند. این قالب به نفع راه حل های پشتیبان گیری مبتنی بر ابر منسوخ شده است، اما هنوز توسط برخی از ابزارهای پشتیبان استفاده می شود.
تصاویر IMG و پارتیشن
تصاویر سیستم Android در حالی که مرتبط با برنامه نیستند، از فرمت های مختلفی استفاده می کنند که قابل ذکر است:
- system.img: پارتیشن سیستم فقط خواندنی حاوی چارچوب Android و برنامه های از پیش نصب شده
- boot.img: حاوی هسته لینوکس و ramdisk اولیه است
- vendor.img: درایورها و سیستم عامل مخصوص سخت افزار
- ظرف پارتیشن پویا super.img: مورد استفاده در دستگاه های مدرن (Android 10 و بالاتر)
جدول مقایسه فرمت
در اینجا یک مرجع سریع برای مقایسه فرمت های اصلی توزیع برنامه وجود دارد:
- APK: تک فایل، مستقیماً قابل نصب، جهانی (همه تنظیمات شامل)، اندازه بزرگتر
- فرمت انتشار AAB: که مستقیماً قابل نصب نیست، نیاز به پردازش توسط فروشگاه Play دارد
- ظرف XAPK: (APK + OBB/شکاف)، نیاز به نصب یا استخراج دارد، مورد استفاده توسط APKPure
- ظرف APKS: (APKهای تقسیم شده)، قالب ابزار بسته، نیاز به نصب یا ادغام دارد
- ظرف APKM: (APKهای تقسیم شده)، فرمت APKMirror، به نصب کننده آن نیاز دارد
انتخاب ابزار مناسب
بسته به فرمتی که با آن کار می کنید، ابزارهای مختلفی مناسب هستند:
- XAPK دارید؟ از تبدیل XAPK به APK ما برای استخراج APK قابل نصب استفاده کنید
- AAB دارید؟ از تبدیل AAB به APK ما برای ایجاد یک APK جهانی استفاده کنید
- آیا فایلهای APK (APKS) تقسیم شدهاند؟ از ادغام APKS به APK ما برای ترکیب آنها استفاده کنید
- آیا نیاز به تأیید یک APK دارید؟ از تأیید کننده APK ما برای بررسی امضاها استفاده کنید
- به فایل های OBB از XAPK نیاز دارید؟ از استخراج کننده OBB ما برای باز کردن بسته بندی فایل های توسعه استفاده کنید
از کدام قالب بسته Androidی باید استفاده کنید؟
انواع فرمتهای فایل اکوسیستم Android منعکس کننده تکامل این پلتفرم از APKهای تک فایلی ساده به سیستمهای تحویل مدولار پیچیده است. هر فرمت برای حل یک مشکل خاص وجود دارد: AAB ها اندازه دانلود را کاهش می دهند، XAPK ها توزیع برنامه های چند فایلی را ساده می کنند، OBB ها داده های بازی بزرگ را مدیریت می کنند و APK های تقسیم شده بهینه سازی خاص دستگاه را فعال می کنند.
هنگامی که این قالبها را درک کردید، میتوانید هر بسته Androidی را که با آن مواجه میشوید مدیریت کنید، چه در حال بارگذاری برنامهها، پشتیبانگیری از دستگاه خود یا توسعه برنامههای کاربردی خود باشید. نکته کلیدی این است که بیشتر این فرمتها در نهایت کانتینری هستند که فایلهای APK را در پیکربندیهای مختلف نگهداری میکنند و با ابزارهای مناسب، همیشه میتوانید آنچه را که نیاز دارید استخراج کنید.