Android Versie Code Tricks
Laten we deze optie eens proberen. Eerst zullen we setup app en geef 1 als standaard versieCode en zal overschrijven naar 2 voor alle variant uitgangen:
Maar als we dan kijken in BuildConfig
bestand zullen we zien dat de versie code is nog steeds ingesteld op 1. Hoewel als we kijken naar resulterende AndroidManifest zullen we zien versiecode correct ingesteld op 2.
Bug of functie? Laten we eens kijken wat er aan de hand is.
In de code kunnen we de versie code benaderen vanuit BuildConfig.VERSION_CODE
of vanuit PackageManager.packageInfo.versionCode
:
Nadat we de code in Logcat hebben uitgevoerd zien we precies wat we hierboven hebben waargenomen:
De reden waarom dit gebeurt is dat in android gradle build tools er twee afzonderlijke taken zijn voor het genereren van BuildConfig bestand en voor het verwerken van AndroidManifest.
Als we kijken in GenerateBuildConfig zien we dat VERSION_CODE
eigenschap wordt gegenereerd uit getVersionCode()
methode:
Zoals in dit probleem wordt gesteld, wordt dit met opzet gedaan om prestatieredenen.
Conclusie
Wees voorzichtig als u setVersionCodeOverride
gebruikt, omdat u verschillende versiecodes kunt hebben in BuildConfig en AndroidManifest.
Ook volgens de documentatie is de aanbevolen manier om de versiecode te controleren toegang te krijgen via PackageManager, niet via BuildConfig:
Nog beter is het om de versielogica buiten build.gradle te hebben en deze via gradle-parameters aan te bieden door uw CI.
Ook is het een verstandige keuze om in uw codebase niet veel te vertrouwen op BuildConfig.VERSION_CODE
. Voor migratie gevallen kun je beter je eigen lokale versiebeheer invoeren (zoals het wordt gedaan met SQL-databases).
Happy coding!