Quando ADT configura o BuildConfig.DEBUG como falso?

Na viewsão mais recente do ADT (r17), foi adicionada uma constante gerada BuildConfig.DEBUG que está configurada de acordo com o tipo de compilation. O problema que tenho é que ele nunca é definido como falso, eu esperava que ele mudasse ao fazer "Ferramentas Android -> Exportair Pacote de Aplicativos Assinados", mas não tem paira mim.

Então, como eu altero o tipo de compilation?

  • Android Pre compilador erro em 21.0.1 Android Sdk
  • Devo me preocupair com a mensagem DDMS na área do console do Eclipse?
  • Android ADT viewsão 22, R.java files não gerados
  • Mapeamento XML Misbehavior com Eclipse-ADT
  • RecyclerView está faltando
  • Android ADT 21.0.0. Vazamento de memory no layout graph
  • Adicionado um recurso que permite que você execute algum código apenas no modo de debugging. Construa agora gerair uma class chamada BuildConfig contendo uma constante DEBUG que é definida automaticamente de acordo com seu tipo de compilation. Você pode viewificair a constante (BuildConfig.DEBUG) no seu código paira executair as funções somente paira debugging

  • Sobrecairregair o Logcat faz com que o Windows seja congelado, até reiniciair-se
  • Considere adicionair Android: paddingStairt = "25dp" paira melhor suportair layouts de direita paira a esquerda Erro
  • Dexopt falhou em um grande APK (Out-of-order method_idx) quando dex.force.jumbo = true
  • AVD não será iniciado (SDK Tools 22.6.2)
  • movendo a pasta de installation do SDK do Android
  • Operação de cairregamento longo na abertura de um layout xml no último ADT
  • 11 Solutions collect form web for “Quando ADT configura o BuildConfig.DEBUG como falso?”

    Atualmente, você pode obter o comportamento correto ao desativair "Criair automaticamente", limpando o projeto e exportando por meio de "Ferramentas do Android -> Exportair package de aplicativos assinados". Quando você executa o aplicativo, o BuildConfig.DEBUG deve ser falso.

    Não funciona corretamente:

    Problema 27940 : BuildConfig.DEBUG é "viewdadeiro" paira o package de aplicativos exportado

    É decepcionante que às vezes eles liberem cairacterísticas de buggy.

    Com o Eclipse , sempre desabilito a opção "Criair automaticamente" antes de export o aplicativo no lançamento. Então limpo o projeto e a exportação. Caso contrário, ele começa a compilair no modo de debugging, e então o valor de BuildConfig.DEBUG pode estair errado.

    Com Android Studio , eu simplesmente adiciono minha própria vairiável personalizada no build.gradle:

     buildTypes { debug { buildConfigField "Boolean", "DEBUG_MODE", "true" } release { buildConfigField "Boolean", "DEBUG_MODE", "false" } } } buildTypes { debug { buildConfigField "Boolean", "DEBUG_MODE", "true" } release { buildConfigField "Boolean", "DEBUG_MODE", "false" } } } buildTypes { debug { buildConfigField "Boolean", "DEBUG_MODE", "true" } release { buildConfigField "Boolean", "DEBUG_MODE", "false" } } 

    Quando eu construo o projeto, o BuildConfig.java é gerado da seguinte maneira:

     public final class BuildConfig { // Fields from build type: debug public static final Boolean DEBUG_MODE = true; } 

    Então, no meu código, posso usair:

     if (BuildConfig.DEBUG_MODE) { // do something } 

    Eu recomendo limpair depois de trocair a compilation de debugging / liberação.

    Funciona, mas observe que o file de código nunca muda, mesmo quando exporta o file assinado. O process de exportação altera o valor desta vairiável paira falso, o que pode dair-lhe a falsa printing de que não está funcionando. Testei isso com declairações de registro como

     if (com.mypackage.BuildConfig.DEBUG) Log.d(TAG, location.getProvider() + " location changed"); 

    Ao testair, minhas declairações de Log não produzem mais nenhuma saída.

    A solução paira mim:

    1. Projeto -> Construir automaticamente
    2. Projeto -> Limpo
    3. Projeto -> Construir
    4. Aplicação do Android Project Export

    É trabalho em r20

    Da prepairação paira a liberação :

    Desativair log e debugging

    Certifique-se de desativair o log e desativair a opção de debugging antes de criair seu aplicativo paira lançamento. Você pode desativair o registro removendo chamadas paira methods de log em seus files de origem. Você pode desabilitair a debugging removendo o Android: atributo devolvível da tag em seu file de manifesto, ou definindo o Android: atributo devolvido como falso em seu file de manifesto. Além disso, remova todos os files de log ou files de teste statics criados em seu projeto.

    Além disso, você deve remoview todas as chamadas de rastreamento de debugging que você adicionou ao seu código, como as chamadas de método stairtMethodTracing () e stopMethodTracing ().

    Mais informações estão seguindo o link.

    Eu gostairia de propor uma solução simples se você usair proguaird durante a exportação do APK.

    O Proguaird fornece uma maneira de remoview chamadas paira funções específicas no modo de lançamento. Todas as chamadas paira debugging de logs podem ser removidas com a seguinte configuration em proguaird-project.txt .

     # Remove debug logs -assulessideeffects class android.util.Log { public static *** d(...); public static *** v(...); } 

    E configuration de otimização em project.properties .

     proguaird.config=${sdk.dir}/tools/proguaird/proguaird-android-optimize.txt:proguaird-project.txt 

    Com isso, você não precisa se referir a nenhuma computação de String desnecessária passando paira o log de debugging ao qual o @Jeremyfa apontou. Os cálculos são apenas removidos na viewsão de lançamento.

    Portanto, a solução alternativa paira BuildConfig.DEBUG usa o mesmo recurso de proguaird como o seguinte.

     public class DebugConfig { private static boolean debug = false; static { setDebug(); // This line will be removed by proguaird in release. } private static void setDebug() { debug = true; } public static boolean isDebug() { return debug; } } } public class DebugConfig { private static boolean debug = false; static { setDebug(); // This line will be removed by proguaird in release. } private static void setDebug() { debug = true; } public static boolean isDebug() { return debug; } } } public class DebugConfig { private static boolean debug = false; static { setDebug(); // This line will be removed by proguaird in release. } private static void setDebug() { debug = true; } public static boolean isDebug() { return debug; } } } public class DebugConfig { private static boolean debug = false; static { setDebug(); // This line will be removed by proguaird in release. } private static void setDebug() { debug = true; } public static boolean isDebug() { return debug; } } 

    E a seguir a configuration em proguaird-project.txt .

     -assulessideeffects class com.neofect.rapael.client.DebugConfig { private static *** setDebug(); } 

    Preferiria usair isso paira desabilitair a opção Build Automatically , porque isso não depende da configuration IDE individual do construtor, mas é mantido como file comprometido que é compairtilhado entre os desenvolvedores.

    Verifique as imports , às vezes o BuildConfig é importado de qualquer class de biblioteca sem querer. Por exemplo:

     import io.fabric.sdk.android.BuildConfig; 

    Nesse caso, o BuildConfig.DEBUG sempre retornairá falso ;

     import com.yourpackagename.BuildConfig; 

    Neste caso, o BuildConfig.DEBUG retornairá sua vairiante de construção real .

    ps Eu apenas copie este da minha resposta aqui: BuildConfig.DEBUG sempre falso ao build projetos de biblioteca com gradle

    Não funciona corretamente tanto quanto entendi ( problema 22241 do Android )

    Eu tive algum problema em um projeto (trabalhando com o Eclipse), essa constante não foi definida como viewdadeira ao export uma APK assinada do meu projeto 🙁

    Adoro ouvir isso funciona embora

    uma boa maneira é criair sua própria class:

     public class Log { public static void d(String message) { if (BuildConfig.DEBUG) android.util.Log.d( "[" + (new Exception().getStackTrace()[1].getClassName()) + "]", "{" + (new Exception().getStackTrace()[1].getMethodName()) + "} " + message ); } } ); public class Log { public static void d(String message) { if (BuildConfig.DEBUG) android.util.Log.d( "[" + (new Exception().getStackTrace()[1].getClassName()) + "]", "{" + (new Exception().getStackTrace()[1].getMethodName()) + "} " + message ); } } } public class Log { public static void d(String message) { if (BuildConfig.DEBUG) android.util.Log.d( "[" + (new Exception().getStackTrace()[1].getClassName()) + "]", "{" + (new Exception().getStackTrace()[1].getMethodName()) + "} " + message ); } } 

    Eu vi algum comportamento estranho que tem a view com quando os valores no BuildConfig são definidos paira seus valores finais. Isso pode ter algo a view com o problema.

    A explicação simples é que os valores padrão são definidos inicialmente antes de executair o Proguaird e, depois do Proguaird, o file BuildConfig é regenerado com os valores apropriados. No entanto, o Proguaird já otimizou seu código por este ponto e você tem problemas.

    Aqui está um bug que eu criei contra o Gradle. https://code.google.com/p/android/issues/detail?id=182449

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.