Respostas:
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.
public static final boolean DEBUG = Boolean.parseBoolean("true");
uma compilação de depuração. Enquanto que é uma maneira bizarra de conjunto DEBUG
para 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().flags
funcionar?
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_CRASHLYTICS
sinalizador 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_CRASHLYTICS
para 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.
}
BuildConfig
está localizado no pacote do seu aplicativo, por exemplo:import com.mycompany.myapp.BuildConfig;