Sürüm APK'si oluşturma ve uygulama imzalama

Kerem Aydın·8 Temmuz 2026·⏱3 dk

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ı

  1. 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!).

  2. 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

  3. 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

  1. APK içindeki sertifikayı kontrol edin: keytool -printcert -jarfile app-release.apk

  2. APK'yı hizalayın (zipalign) — kurulumu hızlandırır: zipalign -v -p 4 app-release-unsigned.apk app-release-aligned.apk

  3. 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.