Na versão mais recente do ADT (r17), foi adicionada uma constante gerada BuildConfig.DEBUG
que é definida de acordo com o tipo de construção. O problema que tenho é que nunca é definido como falso, esperava que mudasse ao fazer "Ferramentas Android -> Exportar pacote de aplicativos assinados", mas não mudou para mim.
Então, como mudo o tipo de construção?
Adicionado um recurso que permite que você execute alguns códigos apenas no modo de depuração. Builds agora geram uma classe chamada BuildConfig contendo uma constante DEBUG que é automaticamente definida de acordo com seu tipo de build. Você pode verificar a constante (BuildConfig.DEBUG) em seu código para executar funções somente de depuração
Respostas:
Atualmente você pode obter o comportamento correto desabilitando "Build Automatically", limpando o projeto e, em seguida, exportando via "Android Tools -> Export Signed Application Package". Quando você executa o aplicativo
BuildConfig.DEBUG
deve ser falso.fonte
Com o Eclipse , eu sempre desabilito a opção "Construir automaticamente" antes de exportar o aplicativo na versão. Depois, limpo o projeto e exporto. Caso contrário, ele começa a compilar no modo de depuração e, em seguida, o valor de BuildConfig.DEBUG pode estar errado.
Com o Android Studio , simplesmente adiciono minha própria variável personalizada no build.gradle:
Quando eu construo o projeto, o BuildConfig.java é gerado da seguinte maneira:
Então, em meu código, posso usar:
Recomendo limpar depois de alternar a compilação de depuração / liberação.
fonte
Não funciona corretamente:
Problema 27940 : BuildConfig.DEBUG é "verdadeiro" para o pacote de aplicativo exportado
É decepcionante que às vezes eles lançem recursos com erros.
fonte
Funciona, mas observe que o arquivo de código nunca muda, mesmo ao exportar o arquivo assinado. O processo de exportação altera o valor dessa variável para falso, o que pode dar a falsa impressão de que não está funcionando. Eu testei isso com declarações de registro como
Ao testar, minhas instruções de Log não produzem mais nenhuma saída.
fonte
Verifique se
imports
, às vezes, BuildConfig é importado de qualquer classe de biblioteca acidentalmente. Por exemplo:Nesse caso, BuildConfig.DEBUG sempre retornará falso ;
Neste caso, BuildConfig.DEBUG retornará sua variante de construção real .
ps Acabei de copiar este da minha resposta aqui: BuildConfig.DEBUG sempre falso ao construir projetos de biblioteca com gradle
fonte
android.support.compat
. Acho que essa é outra razão para apenas definir seu próprio campo com um nome diferente.Da Preparação para Lançamento :
Mais informações no link.
fonte
A solução para mim:
É trabalho em r20
fonte
Gostaria de propor uma solução alternativa simples se você usar o proguard durante a exportação do APK.
O Proguard fornece uma maneira de remover chamadas para funções específicas no modo de liberação. Todas as chamadas para registros de depuração podem ser removidas com a seguinte configuração em
proguard-project.txt
.E configuração de otimização em
project.properties
.Com isso, você não precisa se preocupar com nenhuma passagem de computação de String desnecessária para o log de depuração para o qual @Jeremyfa apontou. Os cálculos são apenas removidos na versão de lançamento.
Portanto, a solução alternativa para BuildConfig.DEBUG usa o mesmo recurso do Proguard como segue.
E seguindo a configuração
proguard-project.txt
.Eu preferiria usar isso em vez de desabilitar a
Build Automatically
opção, porque isso não depende da configuração IDE individual do construtor, mas é mantido como arquivo confirmado que é compartilhado entre os desenvolvedores.fonte
Pelo que entendi, não funciona corretamente ( problema 22241 do Android )
Tive alguns problemas em um projeto (trabalhando com Eclipse), essa constante não foi definida como verdadeira ao exportar um APK assinado do meu projeto :(
Adoraria ouvir que funciona
fonte
uma boa maneira é criar sua própria classe:
fonte
Eu vi um comportamento estranho que tem a ver com quando os valores em BuildConfig são definidos para seus valores finais. Isso pode ter algo a ver com o seu problema.
A explicação simples é que os valores padrão são definidos inicialmente antes da execução do Proguard e, em seguida, após a execução do Proguard, o arquivo BuildConfig é gerado novamente com os valores apropriados. No entanto, Proguard já otimizou seu código neste ponto e você tem problemas.
Aqui está um bug que criei contra o Gradle. https://code.google.com/p/android/issues/detail?id=182449
fonte