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