Sürüm oluşturma, uygulama yükseltme ve bakım stratejinizin önemli bir bileşenidir. Sürüm oluşturma önemlidir çünkü:
- Kullanıcıların, cihazlarında yüklü uygulama sürümü ve yüklenebilecek yükseltme sürümleri hakkında belirli bilgilere sahip olması gerekir.
- Paket olarak yayınladığınız diğer uygulamalar da dahil olmak üzere diğer uygulamaların, uyumluluğu belirlemek ve bağımlılıkları tanımlamak için uygulama sürümünüze ilişkin sistemi sorgulaması gerekir.
- Uygulamalarınızı yayınladığınız hizmetlerin, sürümünüzü kullanıcılara gösterebilmek için uygulamanızın sürümünü sorgulamaları da gerekebilir. Ayrıca, bir yayınlama hizmetinin uyumluluğu belirlemek ve yeni/eski sürüme geçirme ilişkileri kurmak için uygulama sürümünü de kontrol etmesi gerekebilir.
Android sistemi, eski sürüme geçmeye karşı koruma sağlamak için uygulamanızın sürüm bilgilerini kullanır. Sistem, uygulama sürümü bilgilerini yeni sürüme geçirme veya üçüncü taraf uygulamalarının uyumluluğuyla ilgili kısıtlamalar uygulamak için kullanmaz. Uygulamanız tüm sürüm kısıtlamalarını zorunlu kılmalı ve kullanıcılara bunları bildirmelidir.
Android sistemi, derleme dosyalarındaki minSdk
ayarında da belirtildiği gibi sistem sürümü uyumluluğunu zorunlu kılar. Bu ayar,
uygulamanın uyumlu olduğu minimum sistem API'sini belirtmesine olanak tanır.
API gereksinimleri hakkında daha fazla bilgi için API düzeyi gereksinimlerini belirtme bölümüne bakın.
Sürüm oluşturma gereksinimleri, farklı projelere göre değişir. Ancak birçok geliştirici, sürüm oluşturma stratejisi için Semantik Sürüm Oluşturma'nın iyi bir temel olduğunu düşünür.
Uygulama sürümü bilgilerini ayarlama
Uygulamanızın sürüm bilgilerini tanımlamak için Gradle derleme dosyalarında sürüm ayarlarının değerlerini ayarlayın:
Eskitme
android { namespace 'com.example.testapp' compileSdk 33 defaultConfig { applicationId "com.example.testapp" minSdk 24 targetSdk 33 versionCode 1 versionName "1.0" ... } ... } ...
Kotlin
android { namespace = "com.example.testapp" compileSdk = 33 defaultConfig { applicationId = "com.example.testapp" minSdk = 24 targetSdk = 33 versionCode = 1 versionName = "1.0" ... } ... } ...
Sürüm ayarları
Kullanılabilir sürüm ayarlarının her ikisi için de değer tanımlayın: versionCode
ve versionName
.
versionCode
- Dahili sürüm numarası olarak kullanılan pozitif bir tam sayı.
Bu sayı, bir sürümün diğerinden daha yeni olup olmadığını belirlemeye yardımcı olur. Yüksek sayılar, daha yeni sürümleri belirtir. Bu, kullanıcılara gösterilen sürüm numarası değildir; bu numara
versionName
ayarıyla belirlenir. Android sistemi, kullanıcıların cihazlarında şu anda yüklü olan sürümden daha düşükversionCode
içeren bir APK yüklemesini engelleyerek eski sürüme geçmeye karşı koruma sağlamak içinversionCode
değerini kullanır.Değer, diğer uygulamaların programlı bir şekilde değerlendirebilmesi için pozitif bir tam sayıdır. Örneğin, bir yükseltme veya düşürme ilişkisini kontrol etmek için bu değeri kullanabilirsiniz. Değeri pozitif bir tam sayıya ayarlayabilirsiniz. Ancak uygulamanızın sonraki her sürümünde daha fazla değer kullanıldığından emin olun.
Not: Google Play'in
versionCode
için izin verdiği en yüksek değer 2100000000'dır.Önceki bir sürümde zaten kullanmış olduğunuz
versionCode
ile Play Store'a APK yükleyemezsiniz.Not: Bazı durumlarda, uygulamanızın en son sürümden daha düşük
versionCode
değerine sahip bir sürümünü yüklemek isteyebilirsiniz. Örneğin, birden fazla APK yayınlıyorsanız belirli APK'lar içinversionCode
aralıklarını önceden ayarlamış olabilirsiniz. Birden çok APK içinversionCode
değerleri atama hakkında daha fazla bilgi edinmek üzere Sürüm kodu atama konusuna bakın.Genellikle, uygulamanızın ilk sürümünü
versionCode
1 değerine ayarlanır, daha sonra sürümün ana veya küçük bir sürüm olmasına bakılmaksızın her sürümde değeri tekdüze şekilde artırırsınız. Bu,versionCode
değerinin kullanıcı tarafından görülen uygulama sürümü sürümüne benzemeyeceği anlamına gelir. Uygulamalar ve yayınlama hizmetleri kullanıcılara bu sürüm değerini göstermemelidir. versionName
Kullanıcılara gösterilen sürüm numarası olarak kullanılan bir dize. Bu ayar, ham dize veya dize kaynağına referans olarak belirtilebilir.
Bu değer, uygulama sürümünü <ana>.<altın>.<nokta> dizesi veya başka herhangi bir türde mutlak ya da göreli sürüm tanımlayıcısı olarak tanımlayabileceğiniz bir dizedir.
versionName
, kullanıcılara gösterilen tek değerdir.
Sürüm değerlerini tanımlayın
Bu ayarlar için varsayılan değerleri, modülünüzün build.gradle
veya build.gradle.kts
dosyasındaki android {}
blokunun içine yerleştirilmiş defaultConfig {}
blokuna ekleyerek tanımlayabilirsiniz. Daha sonra farklı derleme türleri veya ürün çeşitleri için ayrı değerler tanımlayarak uygulamanızın farklı sürümleri için bu varsayılan değerleri geçersiz kılabilirsiniz. Aşağıdaki dosya, productFlavors {}
blokunun yanı sıra defaultConfig {}
blokundaki versionCode
ve versionName
ayarlarını da göstermektedir.
Daha sonra bu değerler, derleme işlemi sırasında uygulamanızın manifest dosyasında birleştirilir.
Eskitme
android { ... defaultConfig { ... versionCode 2 versionName "1.1" } productFlavors { demo { ... versionName "1.1-demo" } full { ... } } }
Kotlin
android { ... defaultConfig { ... versionCode = 2 versionName = "1.1" } productFlavors { create("demo") { ... versionName = "1.1-demo" } create("full") { ... } } }
Bu örneğin defaultConfig {}
bloğundaki versionCode
değeri, mevcut APK'nın uygulamanın ikinci sürümünü içerdiğini, versionName
dizesi ise uygulamanın 1.1 sürümü olarak kullanıcılara görüneceğini belirtir. Bu dosya ayrıca "demo" ve "tam" olmak üzere iki ürün çeşidini tanımlar. "Demo" ürün çeşidi versionName
öğesini "1.1-demo" olarak tanımladığından "demo" derlemesi, varsayılan değer yerine bu versionName
değerini kullanır.
"Tam" ürün aroma bloğu versionName
özelliğini tanımlamaz. Bu nedenle, varsayılan değer olan "1.1"i kullanır.
Not: Uygulamanız, uygulama sürümünü doğrudan <manifest>
öğesinde tanımlıyorsa Gradle derleme dosyasındaki sürüm değerleri, manifest dosyasındaki ayarları geçersiz kılar. Ayrıca, bu ayarları Gradle derleme dosyalarında tanımlamak, uygulamanızın farklı sürümleri için farklı değerler belirlemenizi sağlar. Daha fazla esneklik sağlamak ve manifest dosyası birleştirildiğinde olası üzerine yazma ihtimalini önlemek için bu özellikleri <manifest>
öğesinden kaldırın ve sürüm ayarlarınızı Gradle derleme dosyalarında tanımlayın.
Android çerçevesi, uygulamanızın sürüm bilgilerini öğrenmek için sistemi sorgulamanızı sağlayan bir API sunar. Sürüm bilgilerini edinmek için
PackageManager.getPackageInfo(java.lang.String, int)
yöntemini kullanın.
API düzeyi şartlarını belirtme
Uygulamanız, Android platformunun belirli bir minimum sürümünü gerektiriyorsa bu sürüm şartını, uygulamanın build.gradle
veya build.gradle.kts
dosyasında API düzeyi ayarları olarak belirtebilirsiniz. Derleme işlemi sırasında bu ayarlar uygulamanızın manifest dosyasında birleştirilir. API düzeyi şartlarının belirtilmesi, uygulamanızın yalnızca Android platformunun uyumlu bir sürümünü çalıştıran cihazlara yüklenebilmesini sağlar.
Not: API düzeyi şartlarını doğrudan uygulamanızın manifest dosyasında belirtirseniz derleme dosyalarındaki ilgili ayarlar, manifest dosyasındaki ayarları geçersiz kılar. Ayrıca bu ayarları Gradle derleme dosyalarında tanımlamak, uygulamanızın farklı sürümleri için farklı değerler belirlemenizi sağlar. Daha fazla esneklik sağlamak ve manifest dosyası birleştirildiğinde olası üzerine yazma ihtimalini önlemek için bu özellikleri <uses-sdk>
öğesinden kaldırın ve Gradle derleme dosyalarında API düzeyi ayarlarınızı tanımlayın.
İki API düzeyi ayarı vardır:
minSdk
: Uygulamanın çalışacağı Android platformunun, platformun API düzeyi tanımlayıcısı tarafından belirtilen minimum sürümü.targetSdk
: Uygulamanın çalışmak üzere tasarlandığı API düzeyi. Bazı durumlarda bu, uygulamanın yalnızca minimum API düzeyi için tanımlananlarla kısıtlanması yerine, hedef API düzeyinde tanımlanan manifest öğelerini veya davranışları kullanmasına olanak tanır.
Bir build.gradle
veya build.gradle.kts
dosyasında varsayılan API düzeyi şartlarını belirtmek için android {}
blokunun içine yerleştirilmiş defaultConfig{}
blokuna bir veya daha fazla API düzeyi ayarı ekleyin. Ayrıca, türler veya ürün aromaları oluşturmak için ayarlar ekleyerek uygulamanızın farklı sürümleri için bu varsayılan değerleri geçersiz kılabilirsiniz.
Aşağıdaki dosya defaultConfig {}
bloğunda varsayılan minSdk
ve targetSdk
ayarlarını belirtir ve tek bir ürün çeşidi için minSdk
değerini geçersiz kılar:
Eskitme
android { ... defaultConfig { ... minSdk 21 targetSdk 33 } productFlavors { main { ... } afterNougat { ... minSdk 24 } } }
Kotlin
android { ... defaultConfig { ... minSdk = 21 targetSdk = 33 } productFlavors { create("main") { ... } create("afterNougat") { ... minSdk = 24 } } }
Sistem, uygulamanızı yüklemeye hazırlanırken bu ayarların değerini kontrol eder ve bunları sistem sürümüyle karşılaştırır. minSdk
değeri sistem sürümünden büyükse sistem, uygulamanın yüklenmesini engeller.
Bu ayarları belirlemezseniz sistem, uygulamanızın tüm platform sürümleriyle uyumlu olduğunu varsayar. Bu, minSdk
öğesini
1
olarak ayarlamakla eşdeğerdir.
Daha fazla bilgi için API Düzeyi nedir? başlıklı makaleyi inceleyin. Gradle derleme ayarları için Derleme varyantlarını yapılandırma bölümüne bakın.