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 ће исправно обрадити такво ажурирање.
// Primer: version name se ne menja, code raste
android {
defaultConfig {
versionCode 6 // Bilo je 5 — hotfix bez novih funkcija
versionName "2.0.0" // Nije se promenilo
}
}
// Provera verzija u runtime-u
val code = BuildConfig.VERSION_CODE
val name = BuildConfig.VERSION_NAME
println("Kod: $code, Ime: $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, повећава га и враћа га натраг пре почетка изградње.
// Automatski inkrement 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 формата или ресетовање бројача са почетком major верзије.
Version Code се не користи директно за A/B тестирање, али посредно утиче на њега. Google Play омогућава конфигурисање фазног пуштања (staged rollout) према проценту корисника за одређену изградњу. Version Code идентификује изградњу, а A/B тестови се конфигуришу кроз Firebase Remote Config или сличне сервисе.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође