Como posso detectar no meu código que estou no modo Release ou Debug?
fonte
Como posso detectar no meu código que estou no modo Release ou Debug?
A solução mais simples e melhor a longo prazo é usar BuildConfig.DEBUG
. Este é um boolean
valor que será true
para uma compilação de depuração, false
caso contrário:
if (BuildConfig.DEBUG) {
// do something for a debug build
}
Há relatos de que esse valor não é 100% confiável nas compilações baseadas no Eclipse, embora eu pessoalmente não tenha encontrado um problema, portanto não posso dizer quanto de um problema realmente é.
Se você estiver usando o Android Studio, ou se estiver usando o Gradle na linha de comando, poderá adicionar suas próprias coisas BuildConfig
ou ajustar os tipos debug
e release
build para ajudar a distinguir essas situações em tempo de execução.
A solução do Argumento ilegal é baseada no valor do android:debuggable
sinalizador no manifesto. Se é assim que você deseja distinguir uma compilação "debug" de uma compilação "release", então, por definição, essa é a melhor solução. No entanto, lembre-se de que daqui para frente, a debuggable
bandeira é realmente um conceito independente do que o Gradle / Android Studio considera uma compilação de "depuração". Qualquer tipo de construção pode optar por definir o debuggable
sinalizador para qualquer valor que faça sentido para esse desenvolvedor e para esse tipo de construção.
BuildConfig
está localizado no pacote do seu aplicativo, por exemplo:import com.mycompany.myapp.BuildConfig;
public static final boolean DEBUG = Boolean.parseBoolean("true");
uma compilação de depuração. Enquanto que é uma maneira bizarra de conjuntoDEBUG
paratrue
, ele deve funcionar. Se você estiver vendo isso em uma das versões de teste 1.3.0 ou se tiver um caso de teste reproduzível para 1.2.2, registre um problema . Não vejo nenhum problema pendente relatando esse problema.Tente o seguinte:
Kotlin:
É retirado do pacote postal aqui
fonte
getApplicationInfo().flags
funcionar?Sim, você não terá problemas ao usar:
A menos que você esteja importando a classe BuildConfig errada. Verifique se você está referenciando a classe BuildConfig do seu projeto, não de nenhuma das suas bibliotecas de dependência.
fonte
Devido aos comentários mistos sobre
BuildConfig.DEBUG
, usei o seguinte para desativar crashlytics (e analytics) no modo de depuração:atualize /app/build.gradle
Em seguida, no seu código, você detecta o
ENABLE_CRASHLYTICS
sinalizador da seguinte maneira:use o mesmo conceito no seu aplicativo e renomeie
ENABLE_CRASHLYTICS
para o que quiser. Eu gosto dessa abordagem porque posso ver o sinalizador na configuração e posso controlar o sinalizador.fonte
Como alternativa, você pode diferenciar usando BuildConfig.BUILD_TYPE;
Se você estiver executando o debug build,
BuildConfig.BUILD_TYPE.equals("debug");
retornará true. E para o release build,BuildConfig.BUILD_TYPE.equals("release");
retorna verdadeiro.fonte
true
.Estou usando esta solução para descobrir que meu aplicativo está sendo executado na versão de depuração.
fonte
if (BuildConfig.DEBUG) {}
um módulo gradle dependente que não tinha (é claro) NO REFERENCE ao arquivo build.gradle do aplicativo - isso fazia com que o modo de depuração fosse reconhecido de maneira incorreta.if (BuildConfig.BUILD_TYPE.equals("Debug")){ }
CORRIGIDO o problema. GraçasCertifique-se de importar a classe BuildConfig correta. E sim, você não terá problemas ao usar:
fonte