APK (Android Package Kit) قالبی از فایل آرشیوی است که برای توزیع و نصب برنامهها در اندروید استفاده میشود. هر برنامهای که کاربر از Google Play دانلود یا به صورت دستی نصب میکند، یک فایل APK است. طبق Android Open Source Project, 2026، این فرمت بر اساس استاندارد ZIP است و شامل کد کامپایلشده، منابع، مانیفست و امضای دیجیتال میباشد.
نکات اصلی
APK (Android Package Kit) قالبی از آرشیو است که برنامه اندروید برای توزیع در آن بستهبندی میشود. از نظر فنی، APK یک آرشیو ZIP با ساختار مشخص است که شامل تمام اجزای لازم برای اجرای برنامه روی دستگاه میباشد.
فرمت APK همراه با اولین نسخه اندروید در سال 2008 ظهور کرد. استاندارد JAR (Java Archive) که خود مبتنی بر ZIP است، به عنوان پایه در نظر گرفته شد. این وراثت سازگاری با ابزارهای موجود کار با آرشیو را تضمین کرد — هر آرشیوسازی APK را مانند ZIP معمولی باز میکند.
Google Play — کانال اصلی توزیع APK است، اما این فرمت در سناریوهای دیگر نیز استفاده میشود: نصب مستقیم از طریق مرورگر (sideloading)، فروشگاههای برنامه شرکتی، آزمایش روی دستگاههای توسعهدهنده و نصب در شبیهسازها. طبق Statista، حدود 15% نصبهای برنامه اندروید در سال 2025 خارج از Google Play انجام میشود.
ساختار داخلی APK به طور دقیق تعریف شده است: هر برنامه باید شامل فایلها و دایرکتوریهای مشخصی باشد. نقض ساختار منجر به خطای نصب میشود.
| فایل/دایرکتوری | هدف |
|---|---|
| AndroidManifest.xml | مانیفست برنامه: مجوزها، اجزاء، نسخه SDK |
| classes.dex | کد بایت DEX کامپایلشده (میتواند چندین فایل باشد) |
| resources.arsc | منابع کامپایلشده: رشتهها، سبکها، طرحها |
| res/ | منابع کامپایلنشده: تصاویر، فونتها، XML |
| lib/ | کتابخانههای بومی (.so) برای معماریهای مختلف CPU |
| META-INF/ | فراداده: گواهیها، فهرست فایلها، هشها |
مانیفست — فایل پیکربندی مرکزی برنامه است. در فرم باینری کامپایلشده (نه XML قابل خواندن) شامل نام بسته، نسخه، فهرست فعالیتها، سرویسها، مجوزها و الزامات SDK است. بدون مانیفست، سیستم نمیداند چگونه برنامه را اجرا کند.
کد منبع به زبان 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 و Android Gradle Plugin خودکار شده است. هر مرحله فایلهای منبع را به اجزای آرشیو نهایی تبدیل میکند.
کد منبع به کد بایت Java (.class) کامپایل میشود، سپس از طریق ابزار d8 (قبلاً dx) به DEX تبدیل میشود. منابع از طریق AAPT2 به فرمت باینری کامپایل میشوند. تمام اجزا در یک آرشیو ZIP بستهبندی و با امضای دیجیتال امضا میشوند.
// 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 یا R8 کد را مبهم میکنند، کلاسها و روشهای استفادهنشده را حذف کرده و اندازه APK را کاهش میدهند. بدون مبهمسازی، APK شامل نامهای کامل کلاسها است که دکامپایل را آسانتر میکند. R8 همچنین بهینهسازی کد بایت در سطح DEX انجام میدهد.
امضای دیجیتال عنصر اجباری APK است. اندروید بستههای بدون امضا را نصب نمیکند. امضا تضمین میکند که برنامه پس از انتشار تغییر نکرده است و مشخص میکند که بسته متعلق به کیست.
v1 (JAR signing) — طرح اصلی مبتنی بر امضای هر فایل در آرشیو. آسیبپذیری: میتوان فایلها را از META-INF بدون شناسایی حذف کرد. v2 (APK Signature Scheme v2) در Android 7.0 ظاهر شد — کل آرشیو امضا میشود که از تغییر جلوگیری میکند. v3 از چرخش کلید پشتیبانی میکند و v4 — نصب افزایشی.
Google Play از اوت 2021 برای همه برنامههای جدید به v2 یا بالاتر نیاز دارد. توصیه میشود APK با هر سه طرح برای حداکثر سازگاری با نسخههای مختلف اندروید امضا شود.
در build.gradle keystore، رمز عبور و alias مشخص میشود. کلید خصوصی در انبار رمزگذاریشده ذخیره میشود. برای انتشار در Google Play از App Signing استفاده میشود — Google کلید خصوصی را نگه میدارد و توسعهدهنده APK امضا شده را آپلود میکند.
نصب APK از طریق مدیر بسته سیستمی PackageManager انجام میشود. فرآیند شامل بررسی امضا، تجزیه مانیفست، کپی فایلها و بهینهسازی DEX از طریق dex2oat است.
ابزار ADB (Android Debug Bridge) به شما امکان میدهد APK را مستقیماً از کامپیوتر توسعهدهنده نصب کنید. دستور `adb install app.apk` فایل را روی دستگاه کپی کرده و نصب را آغاز میکند. پرچم -r برنامه را با حفظ دادهها دوباره نصب میکند، پرچم -d نصب نسخه با versionCode پایینتر را مجاز میکند.
از Android 8.0 به بعد، سیستم برای هر برنامه به طور جداگانه تأیید نصب از منابع ناشناس را نیاز دارد. Android 14 کنترل را افزایش داد: نصب APK از طریق فروشگاههای شخص ثالث فقط پس از اجازه صریح در تنظیمات امکانپذیر است. Google Play Protect هر APK را هنگام نصب برای وجود کد مخرب اسکن میکند.
برای برنامههای بزرگتر از 150 مگابایت، Google Play از Expansion Files پشتیبانی میکند — بستههای OBB اضافی تا 2 گیگابایت هر کدام. فایلهای OBB در APK قرار نمیگیرند، بلکه پس از نصب جداگانه دانلود میشوند. این فرمت از دو نوع پشتیبانی میکند: main (منابع پایه) و patch (بهروزرسانیها).
// بررسی نسخه APK از طریق PackageManager
val pm = packageManager
val info = pm.getPackageInfo(
"com.example.app",
PackageManager.GET_ACTIVITIES
)
Log.d("APK", "نسخه: ${info.versionName}")
در دستگاههای با ART (Android Runtime) پس از نصب، کامپایل DEX به کد بومی از طریق dex2oat راهاندازی میشود. این فرآیند ممکن است چند ثانیه طول بکشد و اندازه برنامه نصب شده را افزایش دهد، اما راهاندازی آن را سریعتر میکند.
AAB (Android App Bundle) — قالبی است که گوگل به عنوان جایگزین APK برای انتشار در Google Play معرفی میکند. تفاوت اساسی است: AAB مستقیماً نصب نمیشود، بلکه به عنوان ظرفی عمل میکند که Google Play از آن APK بهینهشده تولید میکند.
| پارامتر | APK | AAB |
|---|---|---|
| اندازه دانلود | آرشیو کامل | فقط اجزای مورد نیاز |
| نصب مستقیم | بله | خیر (تولید APK) |
| توزیع | هر کانالی | Google Play |
| کنترل نسخه | نسخه در مانیفست | Dynamic Delivery |
| انتشار | Google Play + شخص ثالث | Google Play |
Google Play از اوت 2021 برای برنامههای جدید AAB را نیاز دارد. با این حال، APK فرمت اصلی برای توزیع خارج از Google Play باقی میماند — از طریق وبسایتها، فروشگاههای شرکتی و آزمایش.
توسعهدهندگان به طور منظم در هنگام ساخت و نصب APK با مشکلاتی مواجه میشوند. بیشتر آنها به ناسازگاری نسخهها، امضا یا ساختار آرشیو مربوط میشوند.
این خطا هنگام تلاش برای نصب APK با همان نام بسته اما امضای متفاوت رخ میدهد. اندروید اجازه نصب مجدد برنامه با گواهی تغییر یافته را نمیدهد. راهحل — قبل از نصب نسخه قدیمی را حذف کنید.
اگر پروژه از محدودیت 65536 روش تجاوز کند، ساخت با خطای dex شکست میخورد. راهحل — فعال کردن multidex در build.gradle یا بهینهسازی وابستگیها با حذف کتابخانههای استفادهنشده.
Google Play اندازه APK را به 150 مگابایت محدود میکند. برای برنامههای بزرگتر از APK Expansion Files (OBB) استفاده میشود. توصیه میشود اندازه را از طریق R8، تصاویر WebP و Android App Bundle کاهش دهید. هر مگابایت اضافی بر تبدیل نصب تأثیر منفی میگذارد: طبق Google، هر 10 مگابایت تبدیل را 1٪ کاهش میدهد.
APK را میتوان با استفاده از ابزارهای JADX، APKTool یا Bytecode Viewer دکامپایل کرد. JADX کد Java اصلی را از DEX بازیابی میکند که برنامههای بدون مبهمسازی را کاملاً قابل خواندن میکند. برای محافظت از کد از ProGuard/R8 استفاده میشود که کلاسها، روشها و فیلدها را به نامهای کوتاه غیرقابل خواندن تغییر نام داده و اطلاعات اشکالزدایی را حذف میکند.
برای تجزیه و تحلیل محتوای APK از Android Studio Profiler، apkanalyzer (ابزار CLI از Android SDK) و ابزارهای شخص ثالث استفاده میشود. apkanalyzer اندازه هر جزء APK را نشان میدهد: DEX، منابع، کتابخانههای بومی و امضا. تجزیه و تحلیل کمک میکند مشخص شود کدام وابستگیها بیشترین فضا را اشغال میکنند و در مورد جایگزینی یا حذف آنها تصمیم گرفته شود.
سوالات متداول
بله، هر آرشیوسازی (7-Zip، WinRAR) APK را مانند ZIP باز میکند. میتوان محتوا را مشاهده کرد، اما برای دکامپایل کد به ابزارهای خاص — JADX یا apktool نیاز است.
XAPK — یک فرمت غیر رسمی است که توسط برخی فروشگاههای شخص ثالث استفاده میشود. APK را با فایلهای OBB اضافی در یک آرشیو ترکیب میکند. Google Play و مستندات رسمی اندروید از XAPK استفاده نمیکنند.
Android Studio به طور خودکار ساخت اشکالزدایی را با debug.keystore هنگام اجرا روی دستگاه امضا میکند. برای توزیع نسخه آزمایشی به تیم، امضا با کلید انتشار یا استفاده از App Signing مورد نیاز است.
برای مبهمسازی و کمینهسازی از R8 استفاده کنید، تصاویر را به WebP تبدیل کنید، منابع استفادهنشده را از طریق Lint حذف کنید، و برای پروژههای بزرگ به Android App Bundle با Dynamic Delivery مهاجرت کنید.
خیر — هر تغییری در APK پس از امضا، امضای دیجیتال را خراب میکند. برای بهروزرسانی باید نسخه جدیدی با versionCode افزایش یافته ساخته و امضا شود.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید