Version Code — це ціле додатне число в Android розробці, яке однозначно ідентифікує кожну нову збірку додатка. Google Play і система Android використовують Version Code для визначення необхідності оновлення: якщо код нової збірки більший за встановлений, запускається процес оновлення. Згідно з Android Developer Documentation, Version Code не показується користувачеві та служить виключно для внутрішньої нумерації версій.
Головне
Version Code — це ціле число типу Integer, яке присвоюється кожній збірці Android-додатка. На відміну від Version Name, Version Code не відображається користувачеві та використовується виключно операційною системою і Google Play для порівняння версій під час встановлення оновлень.
Version Code повинен бути цілим додатним числом у діапазоні від 1 до 2100000000. Кожна наступна збірка зобов'язана мати Version Code строго більший за попередній. Якщо розробник випустив збірку з Version Code 5, наступна публікація може використовувати 6, 7 або будь-яке число більше 5, але не 4 і не 5 повторно.
Google ввів розділення на Version Code і Version Name з виходом Android SDK у 2007 році. Version Code був задуманий як машинний ідентифікатор для автоматичного порівняння версій, тоді як Version Name — як людинозчитувана позначка. Таке розділення дозволяє розробнику називати версію як завгодно, зберігаючи строгий порядок оновлень через числовий код.
| Параметр | Version Code | Version Name |
|---|---|---|
| Тип даних | Integer | String |
| Відображення користувачеві | Ні | Так |
| Порівняння версій | Числове порівняння | Не використовується |
| Формат | 1, 2, 3, 10, 100 | 1.0.0, 2.3.1-rc |
| Діапазон | 1 — 2100000000 | Без обмежень |
Механізм порівняння Version Code вбудований в операційну систему Android і магазин Google Play. При кожній публікації Google Play перевіряє, що Version Code нової збірки більший за код встановленої версії. Якщо умова не виконується, публікація відхиляється з помилкою.
Коли пристрій звертається до Google Play для перевірки оновлень, сервер порівнює Version Code встановленого додатка з максимальним доступним у магазині. Якщо код на сервері більший — запускається завантаження та встановлення оновлення. Користувач бачить Version Name, вказаний розробником, але рішення про оновлення приймається на основі Version Code.
Розробники застосовують різні стратегії інкременту Version Code. Найпростіша — збільшення на 1 при кожній збірці. Для CI/CD-пайплайнів часто використовують timestamp або номер збірки: 2026070301 (рік-місяць-день-номер). Важливо, щоб код монотонно зростав і не повторювався між різними збірками та треками Google Play.
Version Code і Version Name — два незалежних поля в build.gradle, які виконують різні функції. Version Code — внутрішній ідентифікатор для системи, Version Name — маркетингова позначка для користувача. Вони можуть змінюватися незалежно один від одного.
Version Name — це рядок, який відображається в налаштуваннях додатка, у Google Play і в діалогах оновлень. Розробник може вказати будь-який формат: 1.0.0, 2.3.1-beta, 3.0-rc1. Для порівняння рядкових версій Version Name не використовується — Google Play завжди спирається на Version Code.
Можлива ситуація, коли Version Code збільшується, а Version Name залишається незмінним. Наприклад, якщо розробник виправляє критичний баг у hotfix-збірці без зміни функціональності. Version Name залишається 2.0.0, а Version Code змінюється з 5 на 6. Google Play коректно обробить таке оновлення.
// Приклад: version name не змінюється, код збільшується
android {
defaultConfig {
versionCode 6 // Було 5 — hotfix без нових функцій
versionName "2.0.0" // Не змінилося
}
}
// Перевірка версій в runtime
val code = BuildConfig.VERSION_CODE
val name = BuildConfig.VERSION_NAME
println("Code: $code, Name: $name")
Налаштування Version Code виконується у файлі build.gradle модуля додатка. Поле versionCode приймає ціле число і входить до блоку defaultConfig. Для різних flavour-збірок можна задавати власні значення через поле versionCode в конфігурації продукту.
// build.gradle.kts — Kotlin DSL
android {
defaultConfig {
applicationId "com.example.app"
versionCode 15
versionName "2.1.0"
}
flavorDimensions +"version"
productFlavors {
create("demo") {
versionCode 1015
}
create("full") {
versionCode 2015
}
}
}
Product flavors дозволяють використовувати різні Version Code для різних конфігурацій: демо-версія, окрема версія для планшетів. Якщо в проєкті використовуються flavors, фінальний Version Code складається з базового числа та flavour-специфічного інкременту. Google Play відстежує кожну комбінацію незалежно.
У CI/CD-пайплайнах (GitHub Actions, GitLab CI, Jenkins) Version Code часто генерується автоматично на основі номера білда або дати. Це виключає людську помилку при ручному оновленні. Скрипт зчитує поточний Version Code із build.gradle, збільшує його та записує назад перед початком збірки.
// Автоматичний інкремент Version Code
import java.util.Properties
import java.io.FileInputStream
val versionProps = Properties()
versionProps.load(FileInputStream("version.properties"))
val versionCode = versionProps.getProperty("VERSION_CODE").toInt() + 1
versionProps.setProperty("VERSION_CODE", versionCode.toString())
android {
defaultConfig {
versionCode = versionCode
}
}
Google Play має суворі правила для Version Code при публікації та оновленні додатків. Порушення цих правил призводить до відхилення збірки або неможливості випустити оновлення. Розробнику необхідно розуміти обмеження та стратегії управління кодом на всіх етапах життєвого циклу.
Google Play не дозволяє завантажити APK або AAB, Version Code якого менший або дорівнює поточному опублікованому. Це правило діє для кожного треку (production, beta, alpha) незалежно. Якщо в production завантажено збірку з Version Code 10, а в alpha — з кодом 5, alpha-трек можна оновити до 6, 7, 8 або 9, але production залишається на 10.
При просуванні збірки з alpha в beta, а потім у production Version Code повинен зростати на кожному етапі. Якщо alpha-версія має код 10, beta може використовувати 11, а production — 12. Не можна викотити в production збірку з кодом 10, якщо alpha вже використовує 10, навіть якщо production його ще не бачив.
Найпоширеніша помилка — збіг Version Code в різних збірках, завантажених в один трек. Google Play видає помилку APK_VERSION_CODE_ALREADY_EXISTS. Інша помилка — перевищення максимального значення 2100000000, що призводить до збою при компіляції. Для уникнення конфліктів використовуйте автоматичну генерацію коду в CI-системі з прив'язкою до номера білда або дати збірки.
Також розробники часто допускають помилку, не збільшуючи Version Code при збірці hotfix-релізу для альтернативного треку. Якщо production має код 15, а alpha-трек залишився на 14, при просуванні alpha в production Google Play відхилить збірку, оскільки її код менший за поточний production. Слідкуйте за монотонністю коду у всіх треках одночасно — для цього зручно використовувати єдиний файл version.properties, з якого всі треки читають поточне значення.
Часті запитання
Ні, Google Play не дозволяє завантажити збірку з Version Code меншим або рівним поточному опублікованому в тому ж треку. Система перевіряє код при завантаженні та повертає помилку, якщо правило монотонного зростання порушено. Для альфа- та бета-треків діє той самий принцип незалежно.
Для першої публікації можна вказати Version Code 1. Google Play не встановлює мінімальний поріг, крім додатного цілого числа. Рекомендується починати з 1 і збільшувати на 1 при кожній наступній збірці. Якщо ви використовуєте timestamp-формат, перша збірка може бути 20260701.
Version Code — внутрішній машинний ідентифікатор, який використовується системою для порівняння. Version Name — користувацька позначка, що відображається в Google Play та на пристрої. Користувач бачить Version Name (наприклад, 2.0.0), а Google Play використовує Version Code для визначення необхідності оновлення.
Максимальне значення Version Code — 2100000000 (Integer.MAX_VALUE). При перевищенні компілятор видасть помилку, оскільки поле має тип int. Для проєктів з великою кількістю збірок (CI/CD із щоденними релізами) рекомендується використовувати timestamp-формат або скидати лічильник з початком мажорної версії.
Version Code безпосередньо не використовується для A/B тестування, але опосередковано впливає на нього. Google Play дозволяє налаштувати стадування (staged rollout) за відсотком користувачів для конкретної збірки. Version Code ідентифікує збірку, а A/B тести налаштовуються через Firebase Remote Config або аналогічні сервіси.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також