APK (Android Package Kit), Android'de uygulamaları dağıtmak ve yüklemek için kullanılan bir arşiv dosyası formatıdır. Kullanıcının Google Play'den indirdiği veya manuel olarak yüklediği her uygulama bir APK dosyasıdır. Android Open Source Project, 2026'ya göre format, ZIP standardına dayanır ve derlenmiş kod, kaynaklar, bildirim ve dijital imza içerir.
Önemli Noktalar
APK (Android Package Kit), Android uygulamasını dağıtım için paketlemekte kullanılan bir arşiv formatıdır. Teknik olarak APK, uygulamanın cihazda çalışması için gerekli tüm bileşenleri içeren belirli bir yapıya sahip ZIP arşividir.
APK formatı, 2008 yılında Android'in ilk sürümüyle ortaya çıktı. Temel olarak, ZIP üzerine kurulu olan JAR (Java Archive) standardı alındı. Bu miras, mevcut arşiv araçlarıyla uyumluluğu sağladı — herhangi bir arşivleyici APK'yı normal bir ZIP olarak açabilir.
Google Play, APK dağıtımının ana kanalıdır ancak format diğer senaryolarda da kullanılır: tarayıcı üzerinden doğrudan kurulum (sideloading), kurumsal uygulama mağazaları, geliştirici cihazlarında test etme ve emülatörlerde kurulum. Statista'ya göre, 2025 yılında Android uygulama kurulumlarının yaklaşık %15'i Google Play dışında gerçekleşmektedir.
APK'nın iç yapısı kesin olarak düzenlenmiştir: her uygulama belirli dosya ve dizinleri içermelidir. Yapının ihlali kurulum hatalarına yol açar.
| Dosya/Dizin | Amaç |
|---|---|
| AndroidManifest.xml | Uygulama bildirimi: izinler, bileşenler, SDK sürümü |
| classes.dex | Derlenmiş DEX bayt kodu (birden fazla dosya olabilir) |
| resources.arsc | Derlenmiş kaynaklar: dizeler, stiller, düzenler |
| res/ | Derlenmemiş kaynaklar: görseller, yazı tipleri, XML |
| lib/ | Farklı CPU mimarileri için yerel kütüphaneler (.so) |
| META-INF/ | Üst veri: sertifikalar, dosya listeleri, hash'ler |
Bildirim, uygulamanın merkezi yapılandırma dosyasıdır. İkili derlenmiş biçimde (okunabilir XML değil) paket adı, sürüm, aktivite listesi, hizmetler, izinler ve SDK gereksinimlerini içerir. Bildirim olmadan sistem uygulamayı nasıl başlatacağını bilmez.
Java veya Kotlin kaynak kodu, DEX (Dalvik Executable) dosyalarına derlenir. Ana dosyaya classes.dex denir. Bayt kodu 64K yöntem sınırını aşarsa classes2.dex, classes3.dex vb. oluşturulur — multidex mekanizması.
lib/ dizini, farklı mimariler için derlenmiş C/C++ kütüphanelerini içerir: armeabi-v7a, arm64-v8a, x86, x86_64. Her kütüphane .so (Shared Object) uzantısına sahiptir. Modern uygulamalar genellikle yalnızca arm64-v8a sağlar.
APK derlemesi, Gradle derleme sistemi ve Android Gradle Plugin tarafından otomatikleştirilmiş çok aşamalı bir süreçtir. Her aşama kaynak dosyalarını nihai arşivin bileşenlerine dönüştürür.
Kaynak kod, Java bayt koduna (.class) derlenir, ardından d8 aracı (daha önce dx) kullanılarak DEX'e dönüştürülür. Kaynaklar, AAPT2 aracılığıyla ikili biçime derlenir. Tüm bileşenler bir ZIP arşivinde paketlenir ve dijital imzayla imzalanır.
// build.gradle.kts — temel APK derleme yapılandırması
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 veya R8, kodu karıştırır, kullanılmayan sınıfları ve yöntemleri kaldırarak APK boyutunu küçültür. Karıştırma olmadan APK, derlemeyi basitleştiren tam sınıf adları içerir. R8 ayrıca DEX düzeyinde bayt kodu optimizasyonu gerçekleştirir.
Dijital imza, APK'nın zorunlu bir öğesidir. Android imzasız paketleri yüklemez. İmza, uygulamanın yayınlandıktan sonra değiştirilmediğini garanti eder ve paketin kime ait olduğunu belirler.
v1 (JAR signing), arşivdeki her dosyanın imzalanmasına dayanan orijinal şemadır. Açık: dosyalar algılanmadan META-INF'den kaldırılabilir. v2 (APK Signature Scheme v2), Android 7.0'da ortaya çıktı — tüm arşiv bir bütün olarak imzalanır, değişiklik önlenir. v3, anahtar rotasyonunu destekler ve v4, artımlı kurulumu destekler.
Google Play, Ağustos 2021'den bu yana tüm yeni uygulamalar için v2 veya üstünü gerektirir. Farklı Android sürümleriyle maksimum uyumluluk için APK'nın üç şemayla da imzalanması önerilir.
build.gradle dosyasında keystore, şifre ve alias belirtilir. Özel anahtar şifrelenmiş bir depoda saklanır. Google Play'de yayınlamak için App Signing kullanılır — Google özel anahtarı saklar ve geliştirici imzalı APK'yı yükler.
APK yüklemesi, sistem paket yöneticisi PackageManager aracılığıyla gerçekleştirilir. Süreç, imza doğrulaması, bildirim ayrıştırması, dosya kopyalama ve dex2oat ile DEX optimizasyonunu içerir.
ADB (Android Debug Bridge) aracı, APK'nın geliştirici bilgisayarından doğrudan yüklenmesine olanak tanır. `adb install app.apk` komutu dosyayı cihaza kopyalar ve kurulumu başlatır. -r bayrağı uygulamayı verileri koruyarak yeniden yükler, -d bayrağı daha düşük versionCode'a sahip bir sürümün yüklenmesine izin verir.
Android 8.0'dan itibaren sistem, her uygulama için ayrı ayrı bilinmeyen kaynaklardan kurulum onayı gerektirir. Android 14 kontrolü sıkılaştırdı: üçüncü taraf mağazalar üzerinden APK kurulumu yalnızca ayarlarda açık izin verildikten sonra mümkündür. Google Play Protect, her APK'yı kurulum sırasında kötü amaçlı kod açısından tarar.
150 MB'tan büyük uygulamalar için Google Play, Expansion Files — her biri 2 GB'a kadar ek OBB paketlerini destekler. OBB dosyaları APK'ya dahil edilmez, kurulumdan sonra ayrı olarak indirilir. Format iki türü destekler: main (temel kaynaklar) ve patch (güncellemeler).
// PackageManager üzerinden APK sürümünü kontrol etme
val pm = packageManager
val info = pm.getPackageInfo(
"com.example.app",
PackageManager.GET_ACTIVITIES
)
Log.d("APK", "Version: ${info.versionName}")
ART (Android Runtime) bulunan cihazlarda, kurulumdan sonra dex2oat aracılığıyla DEX'in yerel koda derlenmesi başlatılır. İşlem birkaç saniye sürebilir ve yüklü uygulamanın boyutunu artırır ancak başlatmayı hızlandırır.
AAB (Android App Bundle), Google'nın Google Play'de yayınlamak için APK'ya alternatif olarak sunduğu bir formattır. Fark temeldir: AAB doğrudan kurulmaz, Google Play'in optimize edilmiş APK'lar oluşturduğu bir kapsayıcı görevi görür.
| Parametre | APK | AAB |
|---|---|---|
| İndirme boyutu | Tam arşiv | Yalnızca gerekli bileşenler |
| Doğrudan kurulum | Evet | Hayır (APK oluşturma) |
| Dağıtım | Herhangi bir kanal | Google Play |
| Sürüm kontrolü | Bildirimde sürüm | Dynamic Delivery |
| Yayınlama | Google Play + üçüncü taraf | Google Play |
Google Play, Ağustos 2021'den bu yana yeni uygulamalar için AAB gerektirir. Ancak APK, Google Play dışında dağıtım için ana format olmaya devam ediyor — web siteleri, kurumsal mağazalar ve test etme yoluyla.
Geliştiriciler, APK derlerken ve yüklerken düzenli olarak sorunlarla karşılaşır. Bunların çoğu sürüm uyumsuzluğu, imza veya arşiv yapısıyla ilgilidir.
Bu hata, aynı paket adına ancak farklı imzaya sahip bir APK yüklemeye çalışırken oluşur. Android, değiştirilmiş sertifikaya sahip bir uygulamanın yeniden yüklenmesine izin vermez. Çözüm: kurulumdan önce eski sürümü kaldırın.
Proje 65536 yöntem sınırını aşarsa derleme dex hatasıyla başarısız olur. Çözüm: build.gradle'da multidex'i etkinleştirin veya kullanılmayan kütüphaneleri kaldırarak bağımlılıkları optimize edin.
Google Play, APK boyutunu 150 MB ile sınırlar. Daha büyük uygulamalar için APK Expansion Files (OBB) kullanılır. R8, WebP görselleri ve Android App Bundle aracılığıyla boyutun küçültülmesi önerilir. Her ek megabayt kurulum dönüşümünü olumsuz etkiler: Google'a göre her 10 MB dönüşümü %1 azaltır.
APK, JADX, APKTool veya Bytecode Viewer gibi araçlar kullanılarak derlenebilir. JADX, DEX'ten orijinal Java kodunu geri yükler ve bu da karıştırma olmadan uygulamaları tamamen okunabilir hale getirir. Kod koruması için, sınıfları, yöntemleri ve alanları kısa okunamaz adlarla yeniden adlandıran ve hata ayıklama bilgilerini kaldıran ProGuard/R8 kullanılır.
APK içeriğini analiz etmek için Android Studio Profiler, apkanalyzer (Android SDK'dan CLI aracı) ve üçüncü taraf yardımcı programlar kullanılır. apkanalyzer, APK'nın her bileşeninin boyutunu gösterir: DEX, kaynaklar, yerel kütüphaneler ve imza. Analiz, hangi bağımlılıkların en çok yer kapladığını belirlemeye ve bunları değiştirme veya kaldırma kararları almaya yardımcı olur.
Sıkça Sorulan Sorular
Evet, herhangi bir arşivleyici (7-Zip, WinRAR) APK'yı ZIP olarak açar. İçeriği görüntüleyebilirsiniz ancak kodu derlemek için özel araçlar gerekir — JADX veya apktool.
XAPK, bazı üçüncü taraf mağazalar tarafından kullanılan resmi olmayan bir formattır. APK'yı ek OBB dosyalarıyla tek bir arşivde birleştirir. Google Play ve resmi Android dokümantasyonu XAPK kullanmaz.
Android Studio, bir cihazda çalıştırırken hata ayıklama derlemesini debug.keystore ile otomatik olarak imzalar. Test sürümünü ekibe dağıtmak için yayın anahtarıyla imzalama veya App Signing kullanımı gerekir.
Karıştırma ve küçültme için R8 kullanın, görselleri WebP'ye dönüştürün, Lint aracılığıyla kullanılmayan kaynakları kaldırın ve büyük projeler için Dynamic Delivery ile Android App Bundle'a geçin.
Hayır — imzalamadan sonra APK'da yapılan herhangi bir değişiklik dijital imzayı bozar. Güncellemek için artırılmış versionCode ile yeni bir sürüm derlemeniz ve imzalamanız gerekir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun