Android Studio'da APK Derleme: Hızlı ve Hatısız
Kısa cevap: hata ayıklama için Build > Build APK(s) veya ./gradlew assembleDebug kullanın; release için — Build > Generate Signed Bundle / APK → APK seçeneğini kullanın, keystore belirtin veya oluşturun, build.gradle içinde signingConfig yapılandırmasını yapın ve app-release.apk dosyasını app/build/outputs/apk/release/ dizininden dışa aktarın.
Proje Hazırlığı
- build.gradle (Module: app) dosyasında compileSdk, minSdk ve targetSdk değerlerini kontrol edin.
- Release için R8/ProGuard ekleyin: buildTypes.release içinde minifyEnabled true ve proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' ayarlarını etkinleştirin.
- Android Studio ve Android Gradle Plugin'i güncelleyin (AGP 8.x+ önerilir).
- Şifreleri depoda saklamayın — gradle.properties (yerel) veya ortam değişkenlerini ve keystore için .gitignore kullanın.
Hızlı hata ayıklama için debug anahtarıyla otomatik imzalamayı bırakın (~/.android/debug.keystore). Release hazırlığı sırasında Instant Run/Apply Changes özelliğini devre dışı bırakın.
Debug APK Derleme
- GUI üzerinden: Build > Build Bundle(s) / APK(s) > Build APK(s). Dosya app/build/outputs/apk/debug/app-debug.apk konumunda oluşur.
- Terminal üzerinden: ./gradlew assembleDebug
- Cihaza yükleme: Run > Run 'app' veya adb install -r app/build/outputs/apk/debug/app-debug.apk Debug derlemesi yayınlama için uygun değildir: hata ayıklama bilgileri içerir ve debug anahtarıyla otomatik olarak imzalanmıştır.
Release APK Derleme ve İmzalama
Adım adım:
- Build > Generate Signed Bundle / APK → APK seçeneğini belirleyin.
- Anahtar yoksa — Create new: keystore dosya adı, alias, şifreler ve geçerlilik süresi belirtin (>25 yıl önerilir).
- build variant = release seçin, gerekli ProGuard/R8 bayraklarını etkinleştirin.
- Finish — APK app/build/outputs/apk/release/app-release.apk konumunda oluşur.
build.gradle içinde signingConfigs örneği (şifreleri açıkça depoda saklamayın):
android {
signingConfigs {
release {
storeFile file("keystore.jks")
storePassword System.getenv("STORE_PASS")
keyAlias "myAlias"
keyPassword System.getenv("KEY_PASS")
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
keytool ile keystore oluşturma: keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias
Keystore veya şifrenin kaybedilmesi, Google Play'de güncelleme yayınlamayı imkansız hale getirir. Dosyayı ve şifreleri güvenli bir yerde saklayın.
Doğrulama ve Dışa Aktarma
- Dosya konumu: app/build/outputs/apk/[debug|release]/.
- APK analizi: Build > Analyze APK — imzayı, boyutu ve içeriği kontrol eder.
- Yükleme: adb install -r app-release.apk
- Google Play'de yayınlama için AAB tercih edilir: Build > Generate Signed Bundle, Google cihazlar için APK'yı optimize eder.
Sık Karşılaşılan Hatalar
- "Keystore was tampered with, or password was incorrect" — yanlış şifre veya bozulmuş keystore dosyası.
- Release yerine debug anahtarıyla imzalama — signingConfig'i kontrol edin.
- proguard-rules unutulması — APK minifikasyon sırasında bozulabilir (reflection/serializable için kurallar ekleyin).
- Şifrelerin VCS'de saklanması — sızıntı riski.
SSS
- Debug APK'yı imzalamak gerekir mi? Hayır, debug anahtarıyla otomatik olarak imzalanır ve yayınlama için tasarlanmamıştır.
- Keystore nerede saklanmalı? Güvenli bir depolama alanında (vault) veya deponun dışında yerel olarak, yedekleme ile birlikte.
- CI üzerinden nasıl derlenir? Şifreler için ortam değişkenleri ve keystore'un güvenli saklanması ile ./gradlew assembleRelease kullanın.
Başarılı derlemeler — adımları takip edin, anahtarları güvenli şekilde saklayın ve yayınlamadan önce APK'yı kontrol edin.