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!