Android'de versionCode ve versionName ne anlama gelir

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

Kısa cevap: versionCode, Android/Google Play'in hangi derlemenin daha yeni olduğunu belirlemek için kullandığı dahili bir tamsayıdır; versionName ise kullanıcıların gördüğü, insan tarafından okunabilen bir dizedir. Doğru numaralandırma şeması ve versionCode'un otomatikleştirilmesi, güncellemeler ve yayınlama sırasında yaşanan sorunları önler.

Android'de hangi "sürümler" vardır ve neden ayrım yapılmalıdır

  • API level (işletim sistemi sürümü) — uyumluluğu yönetir ve minSdkVersion / targetSdkVersion aracılığıyla belirtilir. Bu, uygulamanın sürümü değildir.
  • versionName — kullanıcıya görünen serbest biçimli bir dize: "1.4.3", "2026.03.15", "1.0-beta".
  • versionCode — Google Play ve güncelleme sisteminin karşılaştırdığı tamsayı: yeni bir derleme yalnızca versionCode > yüklü olan değerinden büyükse izin verilir.

Önemli: Sadece versionName'i değiştirip versionCode'u artırmazsanız, uygulama kullanıcılar için güncellenmez.

versionCode ve versionName'i pratikte nasıl kullanmalısınız

  1. Play Console'a her yayın yaptığınızda versionCode'u mutlaka artırın.
  2. Kimseye increment işlemini unutturmamak için versionCode oluşturma mantığını tek bir yerde (betik/CI/dosya) tutun.
  3. Farklı kanallar (prod/beta/internal) için ya dahili derlemelerde farklı applicationId kullanın ya da çakışmayı önlemek amacıyla "ağ geçidi" içeren bir kod şeması uygulayın.

Genel kullanıma sunulan sürümler için anlaşılır bir versionName (anlamsal sürüm veya tarih) belirleyin ve versionCode'u otomatik olarak artan bir sayı yapın — bu basit ve güvenilir bir kombinasyondur.

Yaygın numaralandırma şemaları ve formül örnekleri

  • Anlamsal MAJOR.MINOR.PATCH:
    • Kod içindeki formül: versionCode = MAJOR10000 + MINOR100 + PATCH
    • Örnekler: 1.0.0 → 10000, 1.2.3 → 10203, 2.0.0 → 20000
    • Koddan sürümü geri çıkarmak kolaydır, ancak basamak sayısını önceden planlayın.
  • Basit artımsal:
    • Her sürümde: versionCode = önceki + 1
    • Güvenilir ve basittir, ancak koddan değişikliklerin büyüklüğü anlaşılmaz.
  • Tarih + build:
    • versionCode = YYYYMMDD * 100 + BUILD
    • Örnek: 20260315, build 2 → 2026031502
    • CI için uygundur, ancak int sınırına (~2_147_483_647) dikkat edin.

Gradle yapılandırması örneği (Kotlin DSL):

android {
  defaultConfig {
    val major = 1
    val minor = 4
    val patch = 3
    versionName = "$major.$minor.$patch"
    versionCode = major * 10000 + minor * 100 + patch
  }
}

CI'dan gelen BUILD_NUMBER ile örnek:

val build = System.getenv("BUILD_NUMBER")?.toIntOrNull() ?: 0
versionName = "$major.$minor.$patch ($build)"
versionCode = major * 1_000_000 + minor * 10_000 + patch * 100 + build

Sık yapılan hatalar

  • versionCode artışını unutmak — Play Console derlemeyi kabul etmez. Çözüm: CI'da otomatik artış.
  • Şemayı düşürmek (farklı bir formüle geçmek) ve daha küçük bir kod elde etmek — yeni kodların mevcut olanlardan büyük olması için bir ofset (kaydırma) ekleyin.
  • Farklı derlemeler için aynı versionName kullanmak — destek ekibini kafa karıştırır. Test kanalları için son ekler ekleyin: "1.0.0-beta (45)".
  • int taşması — seçtiğiniz formülün aralığını kontrol edin ve yıllar ahead yeterli marj bırakın.

Ekip için öneriler

  • Bir şema seçin ve bunu VERSIONING.md dosyasında sabitleyin.
  • CI'da versionCode oluşturmayı otomatikleştirin ve tek bir doğruluk kaynağı tutun.
  • Her genel versionName'i changelog'daki bir girdiyle eşleştirin — böylece aynı versionName'e sahip kullanıcılar arasında davranış farkı oluşmasını önlersiniz.

SSS

  • Her hata düzeltmesinde versionName'i değiştirmek gerekir mi? Hayır — versionCode'u değiştirmek yeterlidir; ancak genel sürümler için yamaları versionName'de yansıtmak daha iyidir.
  • Aynı applicationId ve örtüşen kodlarla farklı kanalları yayınlamak mümkün müdür? Hayır: versionCode tek bir applicationId içinde küresel olarak artmalıdır; dahili derlemeler için genellikle ayrı bir applicationId soneki kullanılır.
  • Şema değişikliğinde kod dizisini hızlıca nasıl düzeltebilirsiniz? Play Console'da yayınlanmış en yüksek versionCode'u bulun ve yeni formüle bir ofset (sabiti) ekleyerek tüm yeni kodların bu sayıdan büyük olmasını sağlayın.

Play Console'a yükleme sırasında neredeyse her zaman engellemelere yol açtığı için, migration planı olmadan versionCode oluşturma mantığını değiştirmeyin.