APK: چیست، ساختار فایل و اصل کار

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

APK (Android Package Kit) قالبی از فایل آرشیوی است که برای توزیع و نصب برنامه‌ها در اندروید استفاده می‌شود. هر برنامه‌ای که کاربر از Google Play دانلود یا به صورت دستی نصب می‌کند، یک فایل APK است. طبق Android Open Source Project, 2026، این فرمت بر اساس استاندارد ZIP است و شامل کد کامپایل‌شده، منابع، مانیفست و امضای دیجیتال می‌باشد.

نکات اصلی

  • APK — فرمت بسته نصبی اندروید مبتنی بر ZIP با کد بایت DEX و منابع.
  • ساختار شامل مانیفست، فایل‌های DEX، منابع، کتابخانه‌های کد بومی و گواهی‌ها است.
  • امضا — عنصر اجباری: APK بدون امضا روی دستگاه‌ها نصب نمی‌شود.
  • ساخت از طریق Gradle انجام می‌شود: از Java/Kotlin تا کد بایت DEX فشرده.
  • فروشگاه‌های شخص ثالث و نصب مستقیم APK خارج از Google Play همچنان مورد استفاده هستند.

APK چیست و برای چه استفاده می‌شود

APK (Android Package Kit) قالبی از آرشیو است که برنامه اندروید برای توزیع در آن بسته‌بندی می‌شود. از نظر فنی، APK یک آرشیو ZIP با ساختار مشخص است که شامل تمام اجزای لازم برای اجرای برنامه روی دستگاه می‌باشد.

تاریخچه فرمت

فرمت APK همراه با اولین نسخه اندروید در سال 2008 ظهور کرد. استاندارد JAR (Java Archive) که خود مبتنی بر ZIP است، به عنوان پایه در نظر گرفته شد. این وراثت سازگاری با ابزارهای موجود کار با آرشیو را تضمین کرد — هر آرشیوسازی APK را مانند ZIP معمولی باز می‌کند.

حوزه‌های کاربرد

Google Play — کانال اصلی توزیع APK است، اما این فرمت در سناریوهای دیگر نیز استفاده می‌شود: نصب مستقیم از طریق مرورگر (sideloading)، فروشگاه‌های برنامه شرکتی، آزمایش روی دستگاه‌های توسعه‌دهنده و نصب در شبیه‌سازها. طبق Statista، حدود 15% نصب‌های برنامه اندروید در سال 2025 خارج از Google Play انجام می‌شود.

ساختار داخلی فایل APK

ساختار داخلی APK به طور دقیق تعریف شده است: هر برنامه باید شامل فایل‌ها و دایرکتوری‌های مشخصی باشد. نقض ساختار منجر به خطای نصب می‌شود.

فایل/دایرکتوریهدف
AndroidManifest.xmlمانیفست برنامه: مجوزها، اجزاء، نسخه SDK
classes.dexکد بایت DEX کامپایل‌شده (می‌تواند چندین فایل باشد)
resources.arscمنابع کامپایل‌شده: رشته‌ها، سبک‌ها، طرح‌ها
res/منابع کامپایل‌نشده: تصاویر، فونت‌ها، XML
lib/کتابخانه‌های بومی (.so) برای معماری‌های مختلف CPU
META-INF/فراداده: گواهی‌ها، فهرست فایل‌ها، هش‌ها

AndroidManifest.xml

مانیفست — فایل پیکربندی مرکزی برنامه است. در فرم باینری کامپایل‌شده (نه XML قابل خواندن) شامل نام بسته، نسخه، فهرست فعالیت‌ها، سرویس‌ها، مجوزها و الزامات SDK است. بدون مانیفست، سیستم نمی‌داند چگونه برنامه را اجرا کند.

فایل‌های DEX

کد منبع به زبان Java یا Kotlin به فایل‌های DEX (Dalvik Executable) کامپایل می‌شود. فایل اصلی classes.dex نام دارد. اگر کد بایت از محدودیت 64K روش تجاوز کند، classes2.dex، classes3.dex و غیره ایجاد می‌شود — مکانیزم multidex.

کتابخانه‌های بومی

دایرکتوری lib/ شامل کتابخانه‌های C/C++ کامپایل‌شده برای معماری‌های مختلف است: armeabi-v7a، arm64-v8a، x86، x86_64. هر کتابخانه پسوند .so (Shared Object) دارد. برنامه‌های مدرن معمولاً فقط arm64-v8a ارائه می‌دهند.

فرآیند ساخت APK از طریق Gradle

ساخت APK یک فرآیند چندمرحله‌ای است که توسط سیستم ساخت Gradle و Android Gradle Plugin خودکار شده است. هر مرحله فایل‌های منبع را به اجزای آرشیو نهایی تبدیل می‌کند.

مراحل ساخت

کد منبع به کد بایت Java (.class) کامپایل می‌شود، سپس از طریق ابزار d8 (قبلاً dx) به DEX تبدیل می‌شود. منابع از طریق AAPT2 به فرمت باینری کامپایل می‌شوند. تمام اجزا در یک آرشیو ZIP بسته‌بندی و با امضای دیجیتال امضا می‌شوند.

kotlin
// build.gradle.kts — پیکربندی پایه ساخت APK
android {
    defaultConfig {
        applicationId = "com.example.app"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0.0"
    }
    buildTypes {
        release {
            isMinifyEnabled = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt")
            )
        }
    }
}

ProGuard و کاهش اندازه

ProGuard یا R8 کد را مبهم می‌کنند، کلاس‌ها و روش‌های استفاده‌نشده را حذف کرده و اندازه APK را کاهش می‌دهند. بدون مبهم‌سازی، APK شامل نام‌های کامل کلاس‌ها است که دکامپایل را آسان‌تر می‌کند. R8 همچنین بهینه‌سازی کد بایت در سطح DEX انجام می‌دهد.

امضای APK: طرح‌های v1، v2، v3 و v4

امضای دیجیتال عنصر اجباری APK است. اندروید بسته‌های بدون امضا را نصب نمی‌کند. امضا تضمین می‌کند که برنامه پس از انتشار تغییر نکرده است و مشخص می‌کند که بسته متعلق به کیست.

تکامل طرح‌های امضا

v1 (JAR signing) — طرح اصلی مبتنی بر امضای هر فایل در آرشیو. آسیب‌پذیری: می‌توان فایل‌ها را از META-INF بدون شناسایی حذف کرد. v2 (APK Signature Scheme v2) در Android 7.0 ظاهر شد — کل آرشیو امضا می‌شود که از تغییر جلوگیری می‌کند. v3 از چرخش کلید پشتیبانی می‌کند و v4 — نصب افزایشی.

Google Play از اوت 2021 برای همه برنامه‌های جدید به v2 یا بالاتر نیاز دارد. توصیه می‌شود APK با هر سه طرح برای حداکثر سازگاری با نسخه‌های مختلف اندروید امضا شود.

فرآیند امضا از طریق Gradle

در build.gradle keystore، رمز عبور و alias مشخص می‌شود. کلید خصوصی در انبار رمزگذاری‌شده ذخیره می‌شود. برای انتشار در Google Play از App Signing استفاده می‌شود — Google کلید خصوصی را نگه می‌دارد و توسعه‌دهنده APK امضا شده را آپلود می‌کند.

نصب APK روی دستگاه اندروید

نصب APK از طریق مدیر بسته سیستمی PackageManager انجام می‌شود. فرآیند شامل بررسی امضا، تجزیه مانیفست، کپی فایل‌ها و بهینه‌سازی DEX از طریق dex2oat است.

نصب از طریق ADB

ابزار ADB (Android Debug Bridge) به شما امکان می‌دهد APK را مستقیماً از کامپیوتر توسعه‌دهنده نصب کنید. دستور `adb install app.apk` فایل را روی دستگاه کپی کرده و نصب را آغاز می‌کند. پرچم -r برنامه را با حفظ داده‌ها دوباره نصب می‌کند، پرچم -d نصب نسخه با versionCode پایین‌تر را مجاز می‌کند.

امنیت نصب

از Android 8.0 به بعد، سیستم برای هر برنامه به طور جداگانه تأیید نصب از منابع ناشناس را نیاز دارد. Android 14 کنترل را افزایش داد: نصب APK از طریق فروشگاه‌های شخص ثالث فقط پس از اجازه صریح در تنظیمات امکان‌پذیر است. Google Play Protect هر APK را هنگام نصب برای وجود کد مخرب اسکن می‌کند.

APK Expansion Files (OBB)

برای برنامه‌های بزرگتر از 150 مگابایت، Google Play از Expansion Files پشتیبانی می‌کند — بسته‌های OBB اضافی تا 2 گیگابایت هر کدام. فایل‌های OBB در APK قرار نمی‌گیرند، بلکه پس از نصب جداگانه دانلود می‌شوند. این فرمت از دو نوع پشتیبانی می‌کند: main (منابع پایه) و patch (به‌روزرسانی‌ها).

kotlin
// بررسی نسخه APK از طریق PackageManager
val pm = packageManager
val info = pm.getPackageInfo(
    "com.example.app",
    PackageManager.GET_ACTIVITIES
)
Log.d("APK", "نسخه: ${info.versionName}")

بهینه‌سازی dex2oat

در دستگاه‌های با ART (Android Runtime) پس از نصب، کامپایل DEX به کد بومی از طریق dex2oat راه‌اندازی می‌شود. این فرآیند ممکن است چند ثانیه طول بکشد و اندازه برنامه نصب شده را افزایش دهد، اما راه‌اندازی آن را سریع‌تر می‌کند.

APK در مقابل AAB: کدام فرمت را انتخاب کنیم

AAB (Android App Bundle) — قالبی است که گوگل به عنوان جایگزین APK برای انتشار در Google Play معرفی می‌کند. تفاوت اساسی است: AAB مستقیماً نصب نمی‌شود، بلکه به عنوان ظرفی عمل می‌کند که Google Play از آن APK بهینه‌شده تولید می‌کند.

پارامترAPKAAB
اندازه دانلودآرشیو کاملفقط اجزای مورد نیاز
نصب مستقیمبلهخیر (تولید APK)
توزیعهر کانالیGoogle Play
کنترل نسخهنسخه در مانیفستDynamic Delivery
انتشارGoogle Play + شخص ثالثGoogle Play

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

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

توسعه‌دهندگان به طور منظم در هنگام ساخت و نصب APK با مشکلاتی مواجه می‌شوند. بیشتر آنها به ناسازگاری نسخه‌ها، امضا یا ساختار آرشیو مربوط می‌شوند.

INSTALL_FAILED_UPDATE_INCOMPATIBLE

این خطا هنگام تلاش برای نصب APK با همان نام بسته اما امضای متفاوت رخ می‌دهد. اندروید اجازه نصب مجدد برنامه با گواهی تغییر یافته را نمی‌دهد. راه‌حل — قبل از نصب نسخه قدیمی را حذف کنید.

تجاوز از محدودیت روش‌ها (65K)

اگر پروژه از محدودیت 65536 روش تجاوز کند، ساخت با خطای dex شکست می‌خورد. راه‌حل — فعال کردن multidex در build.gradle یا بهینه‌سازی وابستگی‌ها با حذف کتابخانه‌های استفاده‌نشده.

APK با اندازه بیش از حد بزرگ

Google Play اندازه APK را به 150 مگابایت محدود می‌کند. برای برنامه‌های بزرگتر از APK Expansion Files (OBB) استفاده می‌شود. توصیه می‌شود اندازه را از طریق R8، تصاویر WebP و Android App Bundle کاهش دهید. هر مگابایت اضافی بر تبدیل نصب تأثیر منفی می‌گذارد: طبق Google، هر 10 مگابایت تبدیل را 1٪ کاهش می‌دهد.

دکامپایل APK و امنیت

APK را می‌توان با استفاده از ابزارهای JADX، APKTool یا Bytecode Viewer دکامپایل کرد. JADX کد Java اصلی را از DEX بازیابی می‌کند که برنامه‌های بدون مبهم‌سازی را کاملاً قابل خواندن می‌کند. برای محافظت از کد از ProGuard/R8 استفاده می‌شود که کلاس‌ها، روش‌ها و فیلدها را به نام‌های کوتاه غیرقابل خواندن تغییر نام داده و اطلاعات اشکال‌زدایی را حذف می‌کند.

تجزیه و تحلیل APK از طریق ابزارها

برای تجزیه و تحلیل محتوای APK از Android Studio Profiler، apkanalyzer (ابزار CLI از Android SDK) و ابزارهای شخص ثالث استفاده می‌شود. apkanalyzer اندازه هر جزء APK را نشان می‌دهد: DEX، منابع، کتابخانه‌های بومی و امضا. تجزیه و تحلیل کمک می‌کند مشخص شود کدام وابستگی‌ها بیشترین فضا را اشغال می‌کنند و در مورد جایگزینی یا حذف آنها تصمیم گرفته شود.

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

آیا می‌توان APK را مانند آرشیو ZIP معمولی باز کرد؟

بله، هر آرشیوسازی (7-Zip، WinRAR) APK را مانند ZIP باز می‌کند. می‌توان محتوا را مشاهده کرد، اما برای دکامپایل کد به ابزارهای خاص — JADX یا apktool نیاز است.

APK چه تفاوتی با XAPK دارد؟

XAPK — یک فرمت غیر رسمی است که توسط برخی فروشگاه‌های شخص ثالث استفاده می‌شود. APK را با فایل‌های OBB اضافی در یک آرشیو ترکیب می‌کند. Google Play و مستندات رسمی اندروید از XAPK استفاده نمی‌کنند.

آیا برای آزمایش باید APK را امضا کرد؟

Android Studio به طور خودکار ساخت اشکال‌زدایی را با debug.keystore هنگام اجرا روی دستگاه امضا می‌کند. برای توزیع نسخه آزمایشی به تیم، امضا با کلید انتشار یا استفاده از App Signing مورد نیاز است.

چگونه اندازه APK را کاهش دهیم؟

برای مبهم‌سازی و کمینه‌سازی از R8 استفاده کنید، تصاویر را به WebP تبدیل کنید، منابع استفاده‌نشده را از طریق Lint حذف کنید، و برای پروژه‌های بزرگ به Android App Bundle با Dynamic Delivery مهاجرت کنید.

آیا می‌توان APK را پس از انتشار تغییر داد؟

خیر — هر تغییری در APK پس از امضا، امضای دیجیتال را خراب می‌کند. برای به‌روزرسانی باید نسخه جدیدی با versionCode افزایش یافته ساخته و امضا شود.

خلاصه

  • APK — فرمت بسته نصبی اندروید مبتنی بر ZIP با امضای دیجیتال اجباری.
  • ساختار شامل مانیفست، کد بایت DEX، منابع، کتابخانه‌های بومی و گواهی‌ها است.
  • ساخت از طریق Gradle با کامپایل به DEX از طریق ابزار d8 انجام می‌شود.
  • امضا اجباری است: طرح‌های v1، v2، v3 و v4 سطوح مختلف حفاظت را فراهم می‌کنند.
  • نصب از طریق Google Play، ADB، مرورگر و فروشگاه‌های شرکتی امکان‌پذیر است.
  • AAB جایگزین APK در Google Play می‌شود، اما APK استاندارد توزیع خارجی باقی می‌ماند.
  • محدودیت‌ها: 150 مگابایت برای Google Play، 64K روش بدون multidex، امضای اجباری.

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

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

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

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