Uygulamanıza sürüm oluşturma

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 bir versionCode değerine sahip APK'ları yüklemesini engelleyerek eski sürüme geçmeye karşı koruma sağlamak için versionCode 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çin versionCode aralıkları önceden ayarlamış olabilirsiniz. Birden fazla APK için versionCode 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.