Версия вашего приложения

Управление версиями — это важнейший компонент стратегии обновления и обслуживания вашего приложения. Управление версиями важно, потому что:

  • Пользователям необходимо иметь конкретную информацию о версии приложения, установленной на их устройствах, и версиях обновлений, доступных для установки.
  • Другим приложениям, включая другие приложения, которые вы публикуете как пакет, необходимо запросить у системы версию вашего приложения, чтобы определить совместимость и выявить зависимости.
  • Службам, в которых вы публикуете свои приложения, также может потребоваться запросить версию вашего приложения, чтобы они могли отображать ее пользователям. Службе публикации также может потребоваться проверить версию приложения, чтобы определить совместимость и установить отношения обновления/понижения.

Система Android использует информацию о версии вашего приложения для защиты от перехода на более раннюю версию. Система не использует информацию о версии приложения для обеспечения ограничений на обновления или совместимости сторонних приложений. Ваше приложение должно обеспечивать соблюдение всех ограничений версии и сообщать о них пользователям.

Система Android обеспечивает совместимость версий системы, о чем свидетельствует параметр minSdk в файлах сборки. Этот параметр позволяет приложению указать минимальный системный API, с которым оно совместимо. Дополнительные сведения о требованиях к API см. в разделе «Указание требований к уровню API» .

Требования к версионированию различаются в разных проектах. Однако многие разработчики считают семантическое управление версиями хорошей основой для стратегии управления версиями.

Установить информацию о версии приложения

Чтобы определить информацию о версии вашего приложения, установите значения для настроек версии в файлах сборки Gradle:

классный

    android {
      namespace 'com.example.testapp'
      compileSdk 33

      defaultConfig {
          applicationId "com.example.testapp"
          minSdk 24
          targetSdk 33
          versionCode 1
          versionName "1.0"
          ...
      }
      ...
    }
    ...
    

Котлин

    android {
      namespace = "com.example.testapp"
      compileSdk = 33

      defaultConfig {
          applicationId = "com.example.testapp"
          minSdk = 24
          targetSdk = 33
          versionCode = 1
          versionName = "1.0"
          ...
      }
      ...
    }
    ...
      

Настройки версии

Определите значения для обоих доступных параметров версии: versionCode и versionName .

versionCode
Положительное целое число, используемое в качестве внутреннего номера версии. Это число помогает определить, является ли одна версия более новой, чем другая, причем более высокие числа указывают на более поздние версии. Это не номер версии, отображаемый пользователям; это число задается настройкой versionName . Система Android использует значение versionCode для защиты от перехода на более раннюю версию, не позволяя пользователям устанавливать APK с более низким versionCode , чем версия, установленная в данный момент на их устройстве.

Значение представляет собой положительное целое число, поэтому другие приложения могут его оценить программно — например, для проверки связи обновления или понижения версии. Вы можете установить значение в любое положительное целое число. Однако убедитесь, что в каждой последующей версии вашего приложения используется большее значение.

Примечание. Максимальное значение, которое Google Play допускает для versionCode , — 2100000000.

Вы не можете загрузить APK в Play Store с versionCode который вы уже использовали для предыдущей версии.

Примечание. В некоторых ситуациях вам может потребоваться загрузить версию вашего приложения с более низким versionCode , чем у самой последней версии. Например, если вы публикуете несколько APK-файлов, у вас могут быть заранее заданы диапазоны versionCode для конкретных APK-файлов. Дополнительные сведения о назначении значений versionCode для нескольких APK см. в разделе Назначение кодов версий .

Обычно вы выпускаете первую версию своего приложения со versionCode , равным 1, а затем монотонно увеличиваете значение с каждым выпуском, независимо от того, является ли выпуск основным или второстепенным. Это означает, что значение versionCode не обязательно соответствует версии выпуска приложения, видимой пользователю. Приложения и службы публикации не должны отображать это значение версии для пользователей.

versionName

Строка, используемая в качестве номера версии, показываемая пользователям. Этот параметр можно указать как необработанную строку или как ссылку на строковый ресурс.

Значение представляет собой строку, поэтому вы можете описать версию приложения как строку <major>.<minor>.<point> или как любой другой тип абсолютного или относительного идентификатора версии. versionName — единственное значение, отображаемое пользователям.

Определить значения версий

Вы можете определить значения по умолчанию для этих параметров, включив их в блок defaultConfig {} , вложенный в блок android {} файла build.gradle или build.gradle.kts вашего модуля. Затем вы можете переопределить эти значения по умолчанию для разных версий вашего приложения, определив отдельные значения для отдельных типов сборок или разновидностей продукта. В следующем файле показаны настройки versionCode и versionName в блоке defaultConfig {} , а также в блоке productFlavors {} .

Эти значения затем объединяются в файл манифеста вашего приложения в процессе сборки.

классный

    android {
        ...
        defaultConfig {
            ...
            versionCode 2
            versionName "1.1"
        }
        productFlavors {
            demo {
                ...
                versionName "1.1-demo"
            }
            full {
                ...
            }
        }
    }
    

Котлин

    android {
        ...
        defaultConfig {
            ...
            versionCode = 2
            versionName = "1.1"
        }
        productFlavors {
            create("demo") {
                ...
                versionName = "1.1-demo"
            }
            create("full") {
                ...
            }
        }
    }
    

В блоке defaultConfig {} этого примера значение versionCode указывает, что текущий APK содержит вторую версию приложения, а строка versionName указывает, что он будет отображаться для пользователей как версия 1.1. Этот файл также определяет два варианта продукта: «демо» и «полный». Поскольку версия продукта «демо» определяет versionName как «1.1-demo», сборка «демо» использует это versionName вместо значения по умолчанию. «Полный» блок вкуса продукта не определяет versionName , поэтому он использует значение по умолчанию «1.1».

Примечание. Если ваше приложение определяет версию приложения непосредственно в элементе <manifest> , значения версии в файле сборки Gradle переопределяют настройки в манифесте. Кроме того, определение этих параметров в файлах сборки Gradle позволяет указать разные значения для разных версий вашего приложения. Для большей гибкости и во избежание потенциальной перезаписи при слиянии манифеста удалите эти атрибуты из элемента <manifest> и вместо этого определите параметры своей версии в файлах сборки Gradle.

Платформа Android предоставляет API, позволяющий запрашивать у системы информацию о версии вашего приложения. Чтобы получить информацию о версии, используйте метод PackageManager.getPackageInfo(java.lang.String, int) .

Укажите требования к уровню API

Если вашему приложению требуется определенная минимальная версия платформы Android, вы можете указать это требование версии в качестве настроек уровня API в файле build.gradle или build.gradle.kts приложения. В процессе сборки эти параметры объединяются в файл манифеста вашего приложения. Указание требований к уровню API гарантирует, что ваше приложение можно будет установить только на устройствах под управлением совместимой версии платформы Android.

Примечание. Если вы укажете требования уровня API непосредственно в файле манифеста вашего приложения, соответствующие параметры в файлах сборки переопределят параметры в файле манифеста. Кроме того, определение этих параметров в файлах сборки Gradle позволяет указать разные значения для разных версий вашего приложения. Для большей гибкости и во избежание потенциальной перезаписи при слиянии манифеста удалите эти атрибуты из элемента <uses-sdk> и вместо этого определите настройки уровня API в файлах сборки Gradle.

Доступны две настройки уровня API:

  • minSdk — минимальная версия платформы Android, на которой будет работать приложение, указанная идентификатором уровня API платформы.
  • targetSdk — уровень API, на котором предназначено приложение. В некоторых случаях это позволяет приложению использовать элементы манифеста или поведение, определенное на целевом уровне API, а не ограничиваться использованием только тех, которые определены для минимального уровня API.

Чтобы указать требования к уровню API по умолчанию в файле build.gradle или build.gradle.kts , добавьте одну или несколько настроек уровня API в блок defaultConfig{} , вложенный в блок android {} . Вы также можете переопределить эти значения по умолчанию для разных версий вашего приложения, добавив настройки для типов сборки или вариантов продукта.

Следующий файл определяет настройки minSdk и targetSdk по умолчанию в блоке defaultConfig {} и переопределяет minSdk для одного варианта продукта:

классный

android {
    ...
    defaultConfig {
        ...
        minSdk 21
        targetSdk 33
    }
    productFlavors {
        main {
            ...
        }
        afterNougat {
            ...
            minSdk 24
        }
    }
}

Котлин

android {
    ...
    defaultConfig {
        ...
        minSdk = 21
        targetSdk = 33
    }
    productFlavors {
        create("main") {
            ...
        }
        create("afterNougat") {
            ...
            minSdk = 24
        }
    }
}

При подготовке к установке вашего приложения система проверяет значение этих настроек и сравнивает их с версией системы. Если значение minSdk больше версии системы, система предотвращает установку приложения.

Если вы не укажете эти параметры, система предполагает, что ваше приложение совместимо со всеми версиями платформы. Это эквивалентно установке minSdk на 1 .

Дополнительную информацию см. в разделе Что такое уровень API? . Параметры сборки Gradle см. в разделе Настройка вариантов сборки .