Android uygulaması derleme: Gradle'dan imzalı APK/AAB'ye kadar adımlar

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

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ı

  1. Android Studio ve Android Gradle Plugin'i güncelleyin; compileSdk/targetSdk değerlerini kontrol edin.
  2. 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.
  3. 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")
    }
  }
}
  1. Birden fazla ortam gerekiyorsa, farklı applicationId, kaynaklar ve BuildConfig değişkenleriyle productFlavors (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 assembleProdRelease veya ./gradlew bundleProdRelease
  • Artifact yolları:
    • APK: app/build/outputs/apk/<variant>/app-<variant>.apk
    • AAB: app/build/outputs/bundle/<variant>/app-<variant>.aab

Tablo: farklı senaryolar için ne derlenmeli

SenaryoFormatNe zaman kullanılır
Google Play'de yayınlamaAABÖnerilir: boyut optimizasyonu, Play Feature/Asset Delivery
Doğrudan indirme/alternatif mağazalarAPKBağlantı üzerinden kurulum veya MDM ile uyumluluk
Dahili testAPKCihaza 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

  1. 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.
  2. Keystore oluşturma: Android Studio üzerinden (Build → Generate Signed Bundle / APK → Create new) veya keytool ile:
keytool -genkeypair -v -keystore keys/release.jks -alias release -keyalg RSA -keysize 2048 -validity 10000
  1. Gradle'da yapılandırma (parolaları VCS'te tutmayın). local.properties dosyası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"] } }
}
  1. 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 bundleRelease veya ./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.apk veya apksigner 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.