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

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

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

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

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

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

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

Чтобы определить информацию о версии вашего приложения, задайте значения для настроек версии в файлах сборки 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 ниже текущей версии, установленной на их устройстве.

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

Примечание: максимальное значение versionCode , допускаемое Google Play, — 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. Этот файл также определяет две версии продукта: «demo» и «full». Поскольку для версии продукта «demo» значение versionName равно «1.1-demo», сборка «demo» использует это versionName вместо значения по умолчанию. В блоке версии продукта «full» versionName не определено, поэтому используется значение по умолчанию «1.1».

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

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

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

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

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

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

  • minSdk — минимальная версия платформы Android, на которой будет работать приложение, указанная идентификатором уровня API платформы.
  • targetSdk — уровень API, привязанный к константе <SDK_INT> , на котором приложение предназначено для работы. В некоторых случаях это позволяет приложению использовать элементы манифеста или поведение, определённые на целевом уровне API, а не ограничиваться только теми, которые определены для минимального уровня API.
  • Невозможно указать, что приложение ориентируется на минорную версию SDK или требует её. Для безопасного вызова новых API, требующих более высокую основную или минорную версию SDK, чем minSdkVersion , можно защитить блок кода проверкой на минорную или мажорную версию с помощью константы SDK_INT_FULL .

    if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) {
      // Use APIs introduced in a major or minor SDK version
    }

Чтобы указать требования к уровню 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 см. в разделе Настройка вариантов сборки .