Respostas:
A solução mais simples e melhor a longo prazo é usar BuildConfig.DEBUG. Este é um booleanvalor que será truepara uma compilação de depuração, falsecaso 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 BuildConfigou ajustar os tipos debuge releasebuild para ajudar a distinguir essas situações em tempo de execução.
A solução do Argumento ilegal é baseada no valor do android:debuggablesinalizador 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 debuggablebandeira é 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 debuggablesinalizador para qualquer valor que faça sentido para esse desenvolvedor e para esse tipo de construção.
public static final boolean DEBUG = Boolean.parseBoolean("true");uma compilação de depuração. Enquanto que é uma maneira bizarra de conjunto DEBUGpara true, 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:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
Kotlin:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
É retirado do pacote postal aqui
getApplicationInfo().flagsfuncionar?
Sim, você não terá problemas ao usar:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
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.
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
android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "your.awesome.app"
minSdkVersion 16
targetSdkVersion 25
versionCode 100
versionName "1.0.0"
buildConfigField 'boolean', 'ENABLE_CRASHLYTICS', 'true'
}
buildTypes {
debug {
debuggable true
minifyEnabled false
buildConfigField 'boolean', 'ENABLE_CRASHLYTICS', 'false'
}
release {
debuggable false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
Em seguida, no seu código, você detecta o ENABLE_CRASHLYTICSsinalizador da seguinte maneira:
if (BuildConfig.ENABLE_CRASHLYTICS)
{
// enable crashlytics and answers (Crashlytics by default includes Answers)
Fabric.with(this, new Crashlytics());
}
use o mesmo conceito no seu aplicativo e renomeie ENABLE_CRASHLYTICSpara o que quiser. Eu gosto dessa abordagem porque posso ver o sinalizador na configuração e posso controlar o sinalizador.
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.
true.
Estou usando esta solução para descobrir que meu aplicativo está sendo executado na versão de depuração.
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
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ças
Certifique-se de importar a classe BuildConfig correta. E sim, você não terá problemas ao usar:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
BuildConfigestá localizado no pacote do seu aplicativo, por exemplo:import com.mycompany.myapp.BuildConfig;