Truques de Código da Versão Androide
Vamos tentar esta opção. Primeiro vamos configurar o aplicativo e fornecer 1 como código de versão padrão e substituí-lo por 2 para todas as saídas de variantes:
Mas então se olharmos dentro do arquivo BuildConfig
veremos que o código de versão ainda está configurado para 1. Vamos descobrir o que está acontecendo.
No código podemos acessar o código da versão de BuildConfig.VERSION_CODE
ou de PackageManager.packageInfo.versionCode
:
Depois de executarmos o código no Logcat veremos exatamente o que observamos acima:
A razão porque isto está a acontecer é que nas ferramentas de construção de androide gradle existem duas tarefas separadas para gerar o ficheiro BuildConfig e para processar o AndroidManifest.
Se olharmos dentro do GenerateBuildConfig veremos que VERSION_CODE
a propriedade é gerada a partir de getVersionCode()
método:
> E que getVersionCode
se refere ao valor armazenado em variantConfiguration
:
Não é semelhante a gerar o BuildConfig no ProcessApplicationManifest vemos que o código da versão é recuperado de apkData
.
Se verificarmos variantConfiguration
e apkData
antes e depois de definirmos a substituição do código da versão:
Veremos que o valor dentro da saída apkData foi alterado embora o valor original em variantConfiguration
permaneça o mesmo (como esperado):
Como se afirma neste número, é feito intencionalmente por razões de desempenho.
Conclusão
Tenha cuidado se usar setVersionCodeOverride
pois pode ter códigos de versão diferentes no BuildConfig e AndroidManifest.
Tambem de acordo com a documentação a maneira recomendada de verificar o código da versão é acessar via PackageManager, não via BuildConfig:
É melhor ter a lógica de versionamento fora do build.gradle e fornecê-la via parâmetro gradle pelo seu CI.
Tambem é uma escolha sábia não confiar muito na sua base de código em BuildConfig.VERSION_CODE
. Para casos de migração é melhor introduzir a sua própria versão local (como é feito com bases de dados SQL).
Codificação Feliz!