Version Code — este un număr întreg pozitiv în dezvoltarea Android care identifică în mod unic fiecare nouă compilare a aplicației. Google Play și sistemul Android utilizează Version Code pentru a determina necesitatea actualizării: dacă codul noii compilări este mai mare decât cel instalat, se pornește procesul de actualizare. Potrivit Android Developer Documentation, Version Code nu este afișat utilizatorului și servește exclusiv pentru numerotarea internă a versiunilor.
Principalele
Version Code — este un număr întreg de tip Integer care este atribuit fiecărei compilări a aplicației Android. Spre deosebire de Version Name, Version Code nu este afișat utilizatorului și este utilizat exclusiv de sistemul de operare și Google Play pentru compararea versiunilor la instalarea actualizărilor.
Version Code trebuie să fie un număr întreg pozitiv în intervalul de la 1 la 2100000000. Fiecare compilare ulterioară trebuie să aibă un Version Code strict mai mare decât precedenta. Dacă dezvoltatorul a lansat o compilare cu Version Code 5, următoarea publicație poate utiliza 6, 7 sau orice număr mai mare de 5, dar nu 4 și nici 5 din nou.
Google a introdus împărțirea în Version Code și Version Name odată cu lansarea Android SDK în 2007. Version Code a fost conceput ca un identificator mașină pentru compararea automată a versiunilor, în timp ce Version Name — ca o etichetă lizibilă pentru om. Această separare permite dezvoltatorului să denumească versiunea după cum dorește, păstrând în același timp o ordine strictă a actualizărilor prin codul numeric.
| Parametru | Version Code | Version Name |
|---|---|---|
| Tipul de date | Integer | String |
| Afișarea utilizatorului | Nu | Da |
| Compararea versiunilor | Comparare numerică | Nu se utilizează |
| Format | 1, 2, 3, 10, 100 | 1.0.0, 2.3.1-rc |
| Interval | 1 — 2100000000 | Fără restricții |
Mecanismul de comparare Version Code este încorporat în sistemul de operare Android și în magazinul Google Play. La fiecare publicare, Google Play verifică dacă Version Code al noii compilări este mai mare decât codul versiunii instalate. Dacă condiția nu este îndeplinită, publicarea este respinsă cu o eroare.
Când dispozitivul contactează Google Play pentru a verifica actualizări, serverul compară Version Code al aplicației instalate cu cel maxim disponibil în magazin. Dacă codul de pe server este mai mare — se pornește descărcarea și instalarea actualizării. Utilizatorul vede Version Name specificat de dezvoltator, dar decizia privind actualizarea se ia pe baza Version Code.
Dezvoltatorii aplică diferite strategii de incrementare a Version Code. Cea mai simplă este creșterea cu 1 la fiecare compilare. Pentru conductele CI/CD se utilizează adesea timestamp sau numărul de compilare: 2026070301 (an-lună-zi-număr). Este important ca codul să crească monoton și să nu se repete între diferite compilări și track-uri Google Play.
Version Code și Version Name — două câmpuri independente în build.gradle care îndeplinesc funcții diferite. Version Code este un identificator intern pentru sistem, Version Name este o etichetă de marketing pentru utilizator. Ele se pot modifica independent unul de celălalt.
Version Name — este un șir care este afișat în setările aplicației, în Google Play și în dialogurile de actualizare. Dezvoltatorul poate specifica orice format: 1.0.0, 2.3.1-beta, 3.0-rc1. Pentru compararea versiunilor text, Version Name nu este utilizat — Google Play se bazează întotdeauna pe Version Code.
Este posibilă situația când Version Code crește, iar Version Name rămâne neschimbat. De exemplu, dacă dezvoltatorul repară o eroare critică într-o compilare hotfix fără a modifica funcționalitatea. Version Name rămâne 2.0.0, iar Version Code se schimbă de la 5 la 6. Google Play va gestiona corect o astfel de actualizare.
// Exemplu: version name nu se schimbă, code crește
android {
defaultConfig {
versionCode 6 // A fost 5 — hotfix fără funcții noi
versionName "2.0.0" // Nu s-a schimbat
}
}
// Verificarea versiunilor în runtime
val code = BuildConfig.VERSION_CODE
val name = BuildConfig.VERSION_NAME
println("Cod: $code, Nume: $name")
Configurarea Version Code se realizează în fișierul build.gradle al modulului aplicației. Câmpul versionCode primește un număr întreg și se află în blocul defaultConfig. Pentru diferite compilări flavour se pot stabili valori proprii prin câmpul versionCode în configurarea produsului.
// 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 permit utilizarea diferitelor Version Code pentru configurații diferite: versiunea demo, versiune separată pentru tablete. Dacă în proiect se utilizează flavors, Version Code final se compune din numărul de bază și incrementul specific flavour-ului. Google Play urmărește fiecare combinație în mod independent.
În conductele CI/CD (GitHub Actions, GitLab CI, Jenkins) Version Code este adesea generat automat pe baza numărului de compilare sau a datei. Aceasta elimină erorile umane la actualizarea manuală. Scriptul citește Version Code curent din build.gradle, îl incrementează și îl scrie înapoi înainte de începerea compilării.
// Incrementarea automată a 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 are reguli stricte pentru Version Code la publicarea și actualizarea aplicațiilor. Încălcarea acestor reguli duce la respingerea compilării sau imposibilitatea de a lansa o actualizare. Dezvoltatorul trebuie să înțeleagă limitările și strategiile de gestionare a codului în toate etapele ciclului de viață.
Google Play nu permite încărcarea unui APK sau AAB al cărui Version Code este mai mic sau egal cu cel publicat curent. Această regulă funcționează pentru fiecare track (production, beta, alpha) în mod independent. Dacă în production a fost încărcată o compilare cu Version Code 10, iar în alpha — cu codul 5, track-ul alpha poate fi actualizat la 6, 7, 8 sau 9, dar production rămâne la 10.
La promovarea compilării din alpha în beta, apoi în production, Version Code trebuie să crească la fiecare etapă. Dacă versiunea alpha are codul 10, beta poate utiliza 11, iar production — 12. Nu se poate lansa în production o compilare cu codul 10 dacă alpha utilizează deja 10, chiar dacă production nu l-a văzut încă.
Cea mai frecventă eroare — coincidența Version Code în diferite compilări încărcate într-un singur track. Google Play returnează eroarea APK_VERSION_CODE_ALREADY_EXISTS. O altă eroare — depășirea valorii maxime 2100000000, ceea ce duce la o eroare de compilare. Pentru a evita conflictele, utilizați generarea automată a codului în sistemul CI cu legătură la numărul de compilare sau data compilării.
Dezvoltatorii fac adesea și eroarea de a nu crește Version Code la compilarea hotfix pentru un track alternativ. Dacă production are codul 15, iar track-ul alpha a rămas la 14, la promovarea alpha în production Google Play va respinge compilarea deoarece codul său este mai mic decât production curent. Urmăriți monotonitatea codului în toate track-urile simultan — pentru aceasta este convenabil să utilizați un singur fișier version.properties din care toate track-urile citesc valoarea curentă.
Întrebări frecvente
Nu, Google Play nu permite încărcarea unei compilări cu Version Code mai mic sau egal cu cel publicat curent în același track. Sistemul verifică codul la încărcare și returnează o eroare dacă regula creșterii monotone a fost încălcată. Pentru track-urile alfa și beta se aplică același principiu în mod independent.
Pentru prima publicare puteți specifica Version Code 1. Google Play nu stabilește un prag minim, în afară de un număr întreg pozitiv. Se recomandă să începeți cu 1 și să creșteți cu 1 la fiecare compilare ulterioară. Dacă utilizați formatul timestamp, prima compilare poate fi 20260701.
Version Code — este un identificator mașină intern utilizat de sistem pentru comparare. Version Name — este o etichetă utilizator afișată în Google Play și pe dispozitiv. Utilizatorul vede Version Name (de exemplu, 2.0.0), iar Google Play utilizează Version Code pentru a determina necesitatea actualizării.
Valoarea maximă a Version Code — 2100000000 (Integer.MAX_VALUE). La depășire, compilatorul va returna o eroare, deoarece câmpul este de tip int. Pentru proiecte cu un număr mare de compilări (CI/CD cu lansări zilnice) se recomandă utilizarea formatului timestamp sau resetarea contorului odată cu începutul versiunii major.
Version Code nu este utilizat direct pentru testarea A/B, dar influențează indirect aceasta. Google Play permite configurarea lansării etapizate (staged rollout) în funcție de procentul utilizatorilor pentru o compilare specifică. Version Code identifică compilarea, iar testele A/B se configurează prin Firebase Remote Config sau servicii similare.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și