Uygulamanıza sürüm oluşturma

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üşük versionCode olan bir APK yüklemesini engelleyerek eski sürüme geçmeye karşı koruma sağlamak için versionCode 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'ya versionCode 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.