Sürüm oluşturma, uygulama yükseltme ve bakım stratejinizin önemli bir bileşenidir. Sürüm oluşturma aşağıdaki nedenlerden dolayı önemlidir:
- Kullanıcıların, cihazlarında yüklü olan uygulama sürümü ve yüklenebilecek yükseltme sürümleri hakkında belirli bilgilere sahip olmaları 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 sistemi uygulama sürümünüze göre sorgulaması gerekir.
- Uygulamalarınızı yayınladığınız hizmetlerin, sürümü kullanıcılara gösterebilmeleri için uygulamanızın sürümünü sorgulamaları da gerekebilir. 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, yeni sürüme geçme veya üçüncü taraf uygulamalarının uyumluluğuyla ilgili kısıtlamalar uygulamak için uygulama sürümü bilgilerini kullanmaz. Uygulamanız sürüm kısıtlamalarını zorunlu kılmalı ve kullanıcılara bunlardan bahsetmelidir.
Android sistemi, derleme dosyalarındaki minSdk
ayarında belirtildiği gibi sistem sürümü uyumluluğunu zorunlu kılar. Bu ayar,
uygulamaları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, projeler arasında farklılık gösterir. Ancak birçok geliştirici, sürüm oluşturma stratejisi için Semantik Sürüm Oluşturma'yı 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ında sürüm ayarlarının değerlerini belirleyin:
Modern
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
olan bir APK yüklemesini engelleyerek eski sürüme geçmeye karşı koruma sağlamak içinversionCode
değerini kullanır.Değer, pozitif bir tam sayıdır. Böylece diğer uygulamalar tarafından programatik olarak değerlendirilebilir (örneğin, yükseltme veya düşürme ilişkisini kontrol etmek için). Değeri herhangi bir pozitif tam sayı olarak ayarlayabilirsiniz. Ancak uygulamanızın art arda yayınlanan her sürümünün daha büyük bir değer kullandığından emin olun.
Not: Google Play'in
versionCode
için izin verdiği en yüksek değer 21.000.0000'dir.Önceki bir sürüm için önceden kullandığınız
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çin önceden ayarlanmışversionCode
aralıklarınız olabilir. Birden çok APK'yaversionCode
değerleri atama hakkında daha fazla bilgi için Sürüm kodları atama konusuna bakın.Genellikle uygulamanızın ilk sürümünü
versionCode
değeri 1 olarak yayınlarsınız. Daha sonra sürümün ana veya küçük sürüm olmasına bakılmaksızın her sürümde değeri tekdüze şekilde artırırsınız. Bu nedenle,versionCode
değeri her zaman kullanıcının gördüğü uygulama sürüm sürümüne benzeyebilir. Uygulamalar ve yayınlama 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 olarak veya dize kaynağına başvuru olarak belirtilebilir.
Bu değer bir dizedir. Böylece uygulama sürümünü <major>.<minor>.<point> dizesi veya başka herhangi bir türde mutlak ya da göreli sürüm tanımlayıcısı olarak tanımlayabilirsiniz.
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 {}
bloğuna yerleştirilmiş defaultConfig {}
blokuna ekleyerek tanımlayabilirsiniz. Daha sonra bağımsız 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, defaultConfig {}
blokundaki versionCode
ve versionName
ayarlarının yanı sıra productFlavors {}
blokunu da göstermektedir.
Daha sonra bu değerler, derleme işlemi sırasında uygulamanızın manifest dosyasında birleştirilir.
Modern
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, geçerli 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 aynı zamanda "demo" ve "tam" olmak üzere iki ürün türünü de 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 türü bloğu versionName
özelliğini tanımlamaz. Bu nedenle, varsayılan "1.1" 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ımlamak, uygulamanızın farklı sürümleri için farklı değerler belirlemenize olanak tanır. Daha fazla esneklik sağlamak ve manifest dosyası birleştirilirken olası üzerine yazılma 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 hakkındaki sürüm bilgileri 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 gereksinimlerini belirtin
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ı 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 gereksinimlerini 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 belirlemenize olanak tanır. Daha fazla esneklik sağlamak ve manifest dosyası birleştirildiğinde olası üzerine yazılma ihtimalini önlemek için bu özellikleri <uses-sdk>
öğesinden kaldırın ve API düzeyi ayarlarınızı Gradle derleme dosyalarında 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 izin verir.
Bir build.gradle
veya build.gradle.kts
dosyasında varsayılan API düzeyi şartlarını belirtmek için android {}
bloğunun içine yerleştirilmiş defaultConfig{}
blokuna bir veya daha fazla API düzeyi ayarı ekleyin. Ayrıca, türler veya ürün çeşitleri derleme 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 {}
blokunda varsayılan minSdk
ve targetSdk
ayarlarını belirtir ve bir ürün çeşidi için minSdk
değerini geçersiz kılar:
Modern
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ı belirtmezseniz 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.