Sürüm oluşturma, uygulama yükseltme ve bakım stratejinizin kritik bir bileşenidir. Sürüm oluşturma neden önemlidir?
- 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.
- Bir 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 sistemde uygulamanızın sürümünü sorgulaması gerekir.
- Uygulamalarınızı yayınladığınız hizmetlerin de sürümünü kullanıcılara gösterebilmek için uygulamanızın sürümünü sorgulaması gerekebilir. Yayın hizmetinin, uyumluluğu belirlemek ve yükseltme/düşürme ilişkileri oluşturmak için uygulama sürümünü kontrol etmesi de 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, yükseltmeler veya üçüncü taraf uygulamaların uyumluluğuyla ilgili kısıtlamaları zorunlu kılmak için uygulama sürümü bilgilerini kullanmaz. Uygulamanız, sürüm kısıtlamalarını zorunlu kılmalı ve kullanıcıları bu kısıtlamalar hakkında bilgilendirmelidir.
Android sistemi, derleme dosyalarındaki minSdk
ayarında belirtildiği gibi sistem sürümü uyumluluğunu zorunlu kılar. Bu ayar, bir uygulamanın uyumlu olduğu minimum sistem API'sini belirtmesine olanak tanır.
API koşulları hakkında daha fazla bilgi için API düzeyi (SDK sürümü) koşullarını belirtme başlıklı makaleyi inceleyin.
Sürüm oluşturma koşulları, projeden projeye değişir. Ancak birçok geliştirici, Anlamsal Sürüm Oluşturma'yı sürüm oluşturma stratejisi için iyi bir temel olarak kabul eder.
Uygulama sürümü bilgilerini ayarlama
Uygulamanızın sürüm bilgilerini tanımlamak için Gradle derleme dosyalarındaki sürüm ayarlarının değerlerini belirleyin:
Groovy
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ılabilen her iki sürüm ayarı (versionCode
ve versionName
) için değer tanımlayın.
versionCode
- Dahili sürüm numarası olarak kullanılan pozitif bir tamsayı.
Bu sayı, bir sürümün diğerinden daha yeni olup olmadığını belirlemeye yardımcı olur. Daha yüksek sayılar, daha yeni sürümleri gösterir. 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ına şu anda yüklü olan sürümden daha düşük birversionCode
değerine sahip APK'ları 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 programatik olarak değerlendirebilmesi için pozitif bir tam sayıdır (ör. yükseltme veya düşürme ilişkisini kontrol etmek için). Değeri herhangi bir pozitif tamsayıya ayarlayabilirsiniz. Ancak uygulamanızın her sonraki sürümünde daha yüksek bir değer kullanıldığından emin olun.
Not: Google Play'in izin verdiği en büyük
versionCode
değeri 2100000000'dir.Play Store'a, önceki bir sürüm için zaten kullandığınız bir
versionCode
ile APK yükleyemezsiniz.Not: Bazı durumlarda, uygulamanızın en son sürümünden daha düşük bir
versionCode
'ye 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ı önceden ayarlamış olabilirsiniz. Birden fazla APK içinversionCode
değeri atama hakkında daha fazla bilgi için Sürüm kodu atama başlıklı makaleyi inceleyin.Genellikle uygulamanızın ilk sürümünü
versionCode
değeri 1 olarak ayarlayarak yayınlar, ardından sürümün büyük veya küçük bir sürüm olup olmadığına bakılmaksızın her sürümde değeri tekdüze bir şekilde artırırsınız. Bu,versionCode
değerinin, kullanıcıya görünen uygulama sürümüne benzemeyebileceği anlamına gelir. Uygulamalar ve yayıncılık hizmetleri, bu sürüm değerini kullanıcılara 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.
Değer, uygulamanın sürümünü <major>.<minor>.<point> dizesi veya başka bir mutlak ya da göreli sürüm tanımlayıcısı olarak açıklayabilmeniz için dizedir. Kullanıcılara gösterilen tek değer
versionName
'dır.
Sürüm değerlerini tanımlama
Bu ayarlar için varsayılan değerleri, modülünüzün build.gradle
veya build.gradle.kts
dosyasının android {}
bloğu içine yerleştirilmiş defaultConfig {}
bloğuna dahil ederek tanımlayabilirsiniz. Ardından, farklı derleme türleri veya ürün çeşitleri için ayrı değerler tanımlayarak uygulamanızın farklı sürümlerinde bu varsayılan değerleri geçersiz kılabilirsiniz. Aşağıdaki dosyada, defaultConfig {}
bloğundaki versionCode
ve versionName
ayarlarının yanı sıra productFlavors {}
bloğu gösterilmektedir.
Bu değerler daha sonra derleme işlemi sırasında uygulamanızın manifest dosyasıyla birleştirilir.
Groovy
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 örnekteki defaultConfig {}
bloğunda, versionCode
değeri mevcut APK'nın uygulamanın ikinci sürümünü içerdiğini, versionName
dizesi ise kullanıcılara 1.1 sürümü olarak görüneceğini belirtir. Bu dosya ayrıca "demo" ve "full" olmak üzere iki ürün çeşidi tanımlar.
"demo" ve "full". "demo" ürün çeşidi versionName
değerini "1.1-demo" olarak tanımladığından "demo" derlemesi, varsayılan değer yerine bu versionName
değerini kullanır.
"full" ürün çeşidi bloğu versionName
değerini tanımlamadığı için "1.1" varsayılan değerini 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, manifestteki ayarları geçersiz kılar. Ayrıca, bu ayarları Gradle derleme dosyalarında tanımlayarak uygulamanızın farklı sürümleri için farklı değerler belirtebilirsiniz. Daha fazla esneklik sağlamak ve manifest birleştirildiğinde olası üzerine yazma işlemlerini önlemek için bu özellikleri <manifest>
öğesinden kaldırın ve sürüm ayarlarınızı bunun yerine Gradle derleme dosyalarında tanımlayın.
Android çerçevesi, sistemde uygulamanızın sürüm bilgilerini sorgulamanıza olanak tanıyan bir API sağlar. Sürüm bilgilerini almak için
PackageManager.getPackageInfo(java.lang.String, int)
yöntemini kullanın.
API düzeyi (SDK sürümü) şartlarını belirtme
Uygulamanızın Android platformunun belirli bir minimum sürümünü gerektirmesi durumunda, bu sürüm şartını uygulamanın build.gradle
veya build.gradle.kts
dosyasında API düzeyi ayarları olarak belirtebilirsiniz. Bu ayarlar, derleme işlemi sırasında uygulamanızın manifest dosyasıyla birleştirilir. API düzeyi şartlarını belirtmek, 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 koşulları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ımlayarak uygulamanızın farklı sürümleri için farklı değerler belirtebilirsiniz. Daha fazla esneklik sağlamak ve manifest birleştirildiğinde olası üzerine yazma işlemlerini önlemek için bu özellikleri <uses-sdk>
öğesinden kaldırın ve API düzeyi ayarlarınızı bunun yerine Gradle derleme dosyalarında tanımlayın.
Kullanılabilir iki API düzeyi ayarı vardır:
minSdk
: Uygulamanın çalışacağı Android platformunun minimum sürümü, platformun API düzeyi tanımlayıcısıyla belirtilir.targetSdk
: Uygulamanın üzerinde çalışacak şekilde tasarlandığı,<SDK_INT>
sabitiyle ilişkili API düzeyi. Bazı durumlarda bu, uygulamanın yalnızca minimum API düzeyi için tanımlananlarla sınırlı kalmak yerine hedef API düzeyinde tanımlanan manifest öğelerini veya davranışlarını kullanmasına olanak tanır.
Bir uygulamanın alt SDK sürümünü hedeflediğini veya gerektirdiğini belirtmek mümkün değildir. minSdkVersion
sürümünüzden daha yüksek bir ana veya alt SDK sürümü gerektiren yeni API'leri güvenli bir şekilde çağırmak için SDK_INT_FULL
sabitini kullanarak bir alt veya ana sürüm kontrolüyle bir kod bloğunu koruyabilirsiniz.
if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) { // Use APIs introduced in a major or minor SDK version }
build.gradle
veya build.gradle.kts
dosyasında varsayılan API düzeyi şartlarını belirtmek için defaultConfig{}
bloğuna bir veya daha fazla API düzeyi ayarı ekleyin. Bu ayarlar, android {}
bloğunun içine yerleştirilir. Ayrıca, ayarları derleme türlerine veya ürün çeşitlerine 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 bir ürün çeşidi için minSdk
'yı geçersiz kılar:
Groovy
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 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ı belirtmezseniz sistem, uygulamanızın tüm platform sürümleriyle uyumlu olduğunu varsayar. Bu, minSdk
öğesini
1
olarak ayarlamaya eşdeğerdir.
Daha fazla bilgi için API düzeyi nedir? başlıklı makaleyi inceleyin. Gradle derleme ayarları için Derleme çeşitlerini yapılandırma başlıklı makaleyi inceleyin.