Android uygulaması derleme: Gradle'dan imzalı APK/AAB'ye kadar adımlar
Kısa cevap: Gradle'da buildTypes ve (gerekirse) productFlavors ayarlarını yapın; signingConfig'i (güvenli özellikler üzerinden) tanımlayın; ./gradlew bundleRelease (AAB) veya ./gradlew assembleRelease (APK) komutuyla ya da Android Studio'da Build → Generate Signed Bundle / APK yoluyla release artifact'ini oluşturun ve keystore ile imzalayın; keystore ve parolaları repository dışında saklayın.
Proje hazırlığı ve temel Gradle ayarları
- Android Studio ve Android Gradle Plugin'i güncelleyin; compileSdk/targetSdk değerlerini kontrol edin.
- debug/release yapılarını ayırın — R8/obfuscation'ı yalnızca release'te etkinleştirin; loglamayı ve test anahtarlarını devre dışı bırakın.
- app modülündeki önemli alanlara örnek (Kotlin DSL):
android {
compileSdk = 34
defaultConfig {
applicationId = "com.example.app"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0.0"
}
buildTypes {
debug { isMinifyEnabled = false applicationIdSuffix = ".debug" }
release {
isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
}
- Birden fazla ortam gerekiyorsa, farklı
applicationId, kaynaklar ve BuildConfig değişkenleriyleproductFlavors(dev/stage/prod) ekleyin.
URL'leri, analitik bayraklarını ve anahtarları aktarmak için BuildConfig/kaynakları kullanın (gizli bilgileri kodda tutmayın).
Derleme: komutlar, artifact'ler ve AAB veya APK ne zaman kullanılmalı
- Komutlar:
- Debug APK:
./gradlew assembleDebug - Release APK:
./gradlew assembleRelease - App Bundle (Google Play için önerilir):
./gradlew bundleRelease - Belirli bir flavor için:
./gradlew assembleProdReleaseveya./gradlew bundleProdRelease
- Debug APK:
- Artifact yolları:
- APK:
app/build/outputs/apk/<variant>/app-<variant>.apk - AAB:
app/build/outputs/bundle/<variant>/app-<variant>.aab
- APK:
Tablo: farklı senaryolar için ne derlenmeli
| Senaryo | Format | Ne zaman kullanılır |
|---|---|---|
| Google Play'de yayınlama | AAB | Önerilir: boyut optimizasyonu, Play Feature/Asset Delivery |
| Doğrudan indirme/alternatif mağazalar | APK | Bağlantı üzerinden kurulum veya MDM ile uyumluluk |
| Dahili test | APK | Cihaza daha hızlı kurulum |
Debug derlemelerini mağazalarda yayınlamayın — hata ayıklama verileri içerirler ve güvenlik açıklarına neden olabilirler.
Release imzalama: keystore, signingConfig ve güvenli depolama
- Keystore: Anahtar (alias) içeren kapsayıcı (.jks/.keystore). Google Play için upload key ve App Signing key bulunur; yükleme için upload key gerekir.
- Keystore oluşturma: Android Studio üzerinden (Build → Generate Signed Bundle / APK → Create new) veya
keytoolile:
keytool -genkeypair -v -keystore keys/release.jks -alias release -keyalg RSA -keysize 2048 -validity 10000
- Gradle'da yapılandırma (parolaları VCS'te tutmayın).
local.propertiesdosyasından okumaya örnek:
val props = Properties().apply { load(rootProject.file("local.properties").inputStream()) }
android {
signingConfigs {
create("release") {
storeFile = file(props["storeFile"] as String)
storePassword = props["storePassword"] as String
keyAlias = props["keyAlias"] as String
keyPassword = props["keyPassword"] as String
}
}
buildTypes { getByName("release") { signingConfig = signingConfigs["release"] } }
}
- CI: Gizli bilgileri ortam değişkenleri/secret'lar aracılığıyla aktarın ve build pipeline'ında yerine koyun; parolaları repository'e gömmeyin.
Keystore veya parola kaybı, bazı mağazalarda güncellemelerin yayınlanmasını imkânsız hale getirebilir. Güvenli depolarda birden fazla yedek oluşturun.
Android Studio'da imzalı APK/AAB oluşturma
- UI üzerinden: Build → Generate Signed Bundle / APK → AAB veya APK seçin → keystore ve variant belirtin → Finish.
- CLI üzerinden:
./gradlew bundleReleaseveya./gradlew assembleReleaseçalıştırın. - Toplu derlemeler ve otomasyon için, Gradle'ı çağıran ve artifact'leri kaydeden görevlerle CI (GitHub Actions, GitLab CI, Jenkins) kullanın.
Sık karşılaşılan hatalar
- Repository'de keystore parolaları — ele geçirilme riski.
- Debug varyantının yayınlanması — hatalar ve log sızıntıları.
- Eksik proguard/r8 kuralları — obfuscation nedeniyle çökme.
- Yanlış applicationId/sürüm numarası — Play'de güncelleme uygulanmayabilir.
- Play'e yüklerken yanlış alias/parola — artifact reddedilir.
SSS
- APK'nın imzalı olup olmadığını nasıl kontrol ederim? —
jarsigner -verify -certs app-release.apkveyaapksigner verify. - Yayınlandıktan sonra keystore değiştirilebilir mi? — Hayır: anahtar değişikliği çoğu durumda mevcut uygulamanın güncellenmesini imkânsız kılar; Google Play'de upload key üzerinden değişiklik talep edilebilir, ancak App Signing key Google'da kalır.
- Hangisini seçmeli: AAB mı yoksa APK mı? — Google Play için AAB; doğrudan kurulum için APK.
- Parolalar nerede saklanmalı? — Parola yöneticisinde veya CI secret'larında; local.properties yalnızca yerelde ve VCS dışında.
Gerekirse, flavors ayarı, signingConfig (env vars üzerinden) ve güvenli derleme/yayınlama için GitHub Actions örneği içeren hazır bir build.gradle.kts örneği sunabilirim.