Android'de Debug vs Release: Kısa ve Öz

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

Debug derlemesi hata ayıklama sembollerini ve tüm geliştirme araçlarını (breakpoint'ler, Logcat, BuildConfig.DEBUG) içerirken; Release derlemesi yayınlama için optimize edilmiş, obfuscation uygulanmış ve imzalanmış sürümdür. Aşağıda tam olarak nelerin değiştiği ve güvenli bir şekilde nasıl release oluşturulacağı anlatılmaktadır.

Debug build nedir ve nasıl çalışır?

Debug build yalnızca geliştirme ve test amaçlıdır:

  • Hata ayıklama sembolleri, çalışan debugger ve breakpoint koyma imkanı mevcuttur.
  • Manifest'te ve derlemede android:debuggable=true bayrağı ile BuildConfig.DEBUG = true sabiti bulunur.
  • Minify (R8/ProGuard) genellikle kapalıdır: sınıf ve metod isimleri okunabilir kalır.
  • Derleme, Android Studio tarafından otomatik olarak oluşturulan debug keystore ile imzalanır.
  • Tam loglar ve ek araçlar (statik kontroller, debug eklentileri) varsayılan olarak erişilebilir durumdadır.

Pratik tavsiye: Debug APK'yi kullanıcılara dağıtmayın — uygulamanın iç yapısını açığa çıkarabilir, daha yavaş çalışabilir ve daha fazla yer kaplayabilir.

Derlemeler arasında geçiş yapmak için Android Studio'da Build Variants bölümünü açın: yerel geliştirme için "debug" seçeneğini belirleyin.

Release build nedir ve bilinmesi gereken önemli ayarlar nelerdir?

Release build yayınlama sürümüdür:

  • Minify (R8/ProGuard) genellikle açıktır: shrinking, obfuscation ve optimization boyutu küçültür ve reverse engineering'i zorlaştırır.
  • Derleme kendi release keystore'unuzla imzalanır; bu olmadan Google Play'de güncelleme yayınlamak mümkün değildir.
  • Hata ayıklama sembolleri ve android:debuggable devre dışı bırakılır; BuildConfig.DEBUG = false olur.
  • Obfuscation sırasında mapping.txt dosyası oluşturulur — Crashlytics veya diğer izleyicilerde stack trace'leri deobfuscate etmek için bunu saklayın.

Keystore oluşturmak için kısa bir komut örneği:

keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias

app/build.gradle içindeki minimum yapılandırma (örnek):

signingConfigs {
  release {
    storeFile file("my-release-key.jks")
    storePassword "******"
    keyAlias "my-key-alias"
    keyPassword "******"
  }
}
buildTypes {
  release {
    signingConfig signingConfigs.release
    minifyEnabled true
    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  }
}

Keystore ve mapping.txt dosyalarını kaybetmeyin — bunlar olmadan güncelleme yayınlayamaz ve obfuscation uygulanmış hataları decode edemezsiniz.

Pratik farklar ve öneriler

Debug ve release'in kısa karşılaştırması

AspectDebugRelease
Hata AyıklamaTam (semboller, breakpoint'ler)Devre dışı
MinificationKapalıAçık (R8/ProGuard)
İmzalamaOtomatik debug keystoreKendi release keystore'unuz
APK BoyutuDaha büyükDaha küçük
PerformansDüşük (debug kodu nedeniyle)Yüksek
KullanımGeliştirme / TestYayınlama / Production

Öneriler:

  • Gerçek cihazlarda mutlaka release derlemesini test edin — obfuscation ve optimizasyonlar bug'lara neden olabilir (örneğin reflection nedeniyle).
  • CI için: Keystore ve şifreleri repository'de değil, güvenli secret'larda saklayın.
  • Reflection veya annotation kullanan kütüphaneler için ProGuard/R8 kurallarını (keep-rules) yapılandırın.

Sık yapılan hatalar

  • Derlemeden sonra mapping.txt'nin unutulması — stack trace'leri decode etmek imkansız hale gelir.
  • Keystore/şifrelerin public repository'de saklanması.
  • Yalnızca debug derlemesini test edip, cihazlarda kontrol etmeden release yayınlamak.
  • Keep kuralları olmadan aşırı agresif obfuscation yapmak, reflection/JSON parsing'i bozar.
  • android:debuggable=true olan uygulamayı public repository'lere göndermek.

FAQ

  • Bir derlemenin debug olduğunu nasıl anlarım? — BuildConfig.DEBUG değerini veya APK'daki android:debuggable değerini kontrol edin.
  • Normal kullanıcılara debug APK yüklenebilir mi? — Evet, ancak bu güvensizdir ve veri sızıntısına veya kararsız çalışmaya yol açabilir.
  • Mapping.txt neden saklanmalı? — Obfuscation sonrası okunabilir stack trace'leri geri yüklemek için.
  • Android Studio'da imzalı release nasıl oluşturulur? — Build > Generate Signed Bundle / APK yolunu izleyin, keystore'u belirtin ve release derlemesini seçin.
  • Release cihazda çöküyor ama debug çökmüyorsa ne yapılmalı? — ProGuard/R8 kurallarını, logları kontrol edin ve minifyLocalTesting etkinleştirerek test edin (debug loglarıyla birlikte lokal olarak release derleyin).

Kısaca: Hızlı geliştirme ve hata ayıklama için debug kullanın; yayınlama için release kullanın. Release derlemesini test edin, keystore ve mapping.txt dosyalarını güvenli bir yerde saklayın ve obfuscation kurallarını kütüphanelerinize göre yapılandırın.