Android Version Code Tricks
Vi provar det här alternativet. Först ställer vi in appen och anger 1 som standard versionCode och åsidosätter den till 2 för alla varianter:
Men om vi tittar in i BuildConfig
-filen ser vi att versionskoden fortfarande är inställd på 1. Om vi tittar in i den resulterande AndroidManifest ser vi dock att versionskoden är korrekt inställd på 2.
Bugg eller funktion? Låt oss ta reda på vad som händer.
Inuti koden kan vi komma åt versionskoden från BuildConfig.VERSION_CODE
eller från PackageManager.packageInfo.versionCode
:
När vi kört koden i Logcat kommer vi att se exakt vad vi observerat ovan:
Till skillnad från generering av BuildConfig i ProcessApplicationManifest ser vi att versionskoden hämtas från apkData
.
Om vi kontrollerar variantConfiguration
och apkData
före och efter att vi har ställt in versionskod override:
Vi ser att värdet i apkData ändrades, även om det ursprungliga värdet i variantConfiguration
förblir detsamma (som förväntat):
Som anges i denna fråga görs det avsiktligt av prestandaskäl.
Slutsats
Var försiktig om du använder setVersionCodeOverride
eftersom du kan ha olika versionskoder i BuildConfig och AndroidManifest.
Enligt dokumentationen är det rekommenderade sättet att kontrollera versionskoden att få tillgång till den via PackageManager, inte via BuildConfig:
Ett ännu bättre sätt är att ha versionslogik utanför build.gradle och tillhandahålla den via gradle-parameter av din CI.
Det är också ett klokt val att inte förlita sig så mycket på BuildConfig.VERSION_CODE
i din kodbas. För migrationsfall är det bättre att införa din egen lokala versionering (som det görs med SQL-databaser).
Happy coding!