Управление версиями — важнейший компонент стратегии обновления и обслуживания вашего приложения. Оно важно, потому что:
- Пользователям необходимо иметь конкретную информацию о версии приложения, установленной на их устройствах, и версиях обновлений, доступных для установки.
- Другие приложения, включая другие приложения, которые вы публикуете как набор, должны запрашивать у системы версию вашего приложения, чтобы определить совместимость и выявить зависимости.
- Сервисам, на которых вы публикуете свои приложения, также может потребоваться запросить версию вашего приложения, чтобы отобразить её пользователям. Сервису публикации также может потребоваться проверить версию приложения для определения совместимости и установления связи между обновлениями и понижениями.
Система 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 см. в разделе Настройка вариантов сборки .