Android Version Code Tricks
Spróbujmy tę opcję. Najpierw skonfigurujemy aplikację i podamy 1 jako domyślny versionCode i nadpiszemy go na 2 dla wszystkich wariantów wyjścia:
Ale jeśli zajrzymy do pliku BuildConfig
zobaczymy, że kod wersji wciąż jest ustawiony na 1. Choć jeśli zajrzymy do wynikowego AndroidManifest zobaczymy kod wersji poprawnie ustawiony na 2.
Błąd czy cecha? Dowiedzmy się co się dzieje.
Wewnątrz kodu możemy uzyskać dostęp do kodu wersji z BuildConfig.VERSION_CODE
lub z PackageManager.packageInfo.versionCode
:
Po uruchomieniu kodu w Logcat zobaczymy dokładnie to, co zaobserwowaliśmy powyżej:
Powodem, dla którego tak się dzieje jest to, że w android gradle build tools istnieją dwa oddzielne zadania do generowania pliku BuildConfig oraz do przetwarzania AndroidManifest.
Jeśli zajrzymy do GenerateBuildConfig zobaczymy, że właściwość VERSION_CODE
jest generowana z metody getVersionCode()
:
I że getVersionCode
odnosi się do wartości przechowywanej w variantConfiguration
:
W przeciwieństwie do generowania BuildConfig w ProcessApplicationManifest widzimy, że kod wersji jest pobierany z apkData
.
Jeżeli sprawdzimy variantConfiguration
i apkData
przed i po ustawieniu override kodu wersji:
Zobaczymy, że wartość wewnątrz wyjścia apkData została zmieniona, chociaż oryginalna wartość w variantConfiguration
pozostaje taka sama (zgodnie z oczekiwaniami):