Sürüm APK'si oluşturma ve uygulama imzalama
Kısa cevap: Bir keystore oluşturun, app modülünde (build.gradle) signingConfigs ayarlarını yapın, Android Studio veya ./gradlew assembleRelease aracılığıyla release varyantını derleyin ve apksigner ile imzayı doğrulayın. Aşağıda pratik komutlar ve yapılandırma şablonları yer almaktadır.
Proje hazırlığı ve genel ayarlar
Derlemeden önce:
- module:app/build.gradle dosyasındaki versionCode/versionName değerlerini kontrol edin.
- Uygulamanın test edildiğinden ve küçültüldüğünden (R8/ProGuard) emin olun.
- Manifest dosyasında gerekli izinleri kontrol edin ve hata ayıklamaya özel kodları/günlük kayıtlarını (debug-only code/logging) kaldırın.
R8/ProGuard'ı yalnızca testlerden sonra kullanın; modelleri/yansımayı korumak için kurallar ekleyin.
Keystore oluşturma ve Gradle yapılandırması
-
Bir keystore oluşturun (Google Play'deki tüm güncellemeler için tek bir anahtar): keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias Dosyayı güvenli bir yerde saklayın (ve .gitignore'a ekleyin, commit etmeyin!).
-
Parolaları gradle.properties içinde saklamak daha güvenlidir (yerel olarak, depoda değil): MYAPP_RELEASE_STORE_FILE=my-release-key.jks MYAPP_RELEASE_KEY_ALIAS=my-key-alias MYAPP_RELEASE_STORE_PASSWORD=your_store_password MYAPP_RELEASE_KEY_PASSWORD=your_key_password
-
app/build.gradle içindeki yapılandırma örneği: signingConfigs { release { storeFile file(MYAPP_RELEASE_STORE_FILE) storePassword MYAPP_RELEASE_STORE_PASSWORD keyAlias MYAPP_RELEASE_KEY_ALIAS keyPassword MYAPP_RELEASE_KEY_PASSWORD } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } }
Keystore veya parolaları kaybederseniz, uygulamayı Play Console'da güncelleyemezsiniz. Güvenli bir yedekleme yapın.
Derleme: Android Studio ve komut satırı
-
Android Studio üzerinden: Build > Generate Signed Bundle / APK > APK veya Android App Bundle (AAB) seçin > keystore'u belirtin ve release sürümünü derleyin. Yayın için AAB önerilir.
-
Gradle üzerinden (CI/CD veya IDE olmadan): ./gradlew assembleRelease Çıktı: app/build/outputs/apk/release/app-release.apk (veya yapılandırmaya bağlı olarak app-release-unsigned.apk).
-
Flutter için: flutter build apk --release
-
React Native için — android/ klasöründe Gradle üzerinden benzer şekilde.
İmza kontrolü ve hizalama
-
APK içindeki sertifikayı kontrol edin: keytool -printcert -jarfile app-release.apk
-
APK'yı hizalayın (zipalign) — kurulumu hızlandırır: zipalign -v -p 4 app-release-unsigned.apk app-release-aligned.apk
-
apksigner ile imza doğrulama: apksigner verify --verbose app-release.apk
Play için sıra: AAB veya imzalanmış, hizalanmış APK derleyin → apksigner ile kontrol edin → Play Console'a yükleyin.
APK vs AAB — Hangisini seçmeli?
- APK: Sideloading ve dahili testler için uygundur.
- AAB: Play'de daha küçük son boyut, bazı durumlarda yeni uygulamalar için zorunludur. Öneri: Yayınları AAB üzerinden yapın, gerekirse harici dağıtım için imzalı evrensel APK tutun.
Sık yapılan hatalar
- INSTALL_PARSE_FAILED_NO_CERTIFICATES — APK imzalanmamış veya imza geçersiz.
- "Certificate has expired" — Keystore oluştururken geçerlilik süresi yanlış ayarlanmış.
- Parolaların depoya aktarılması — anahtarın güvenliğinin tehlikeye girmesi.
- gradle.properties ve build.gradle içindeki alias/parola uyuşmazlığı.
SSS
- Kaybolan keystore nasıl kurtarılır? — Kurtarılamaz; farklı paket adıyla yeni bir uygulama yayınlamanız gerekir.
- CI üzerinde imzalama yapılabilir mi? — Evet. Keystore ve parolaları CI'nın güvenli gizli alanlarında saklayın (depoda değil).
- Apksigner kullanıyorsam zipalign gerekli mi? — Zipalign imzalamadan önce önerilir; modern apksigner hizalamanın yerini almaz.
Bu talimatları izleyerek, birkaç adımda doğru şekilde imzalanmış bir release APK/AAB hazırlayabilir ve yayınlama sırasında çoğu hatadan kaçınabilirsiniz.