android - studio - ¿Cómo detecto si estoy en modo de liberación o depuración?
flavordimensions android (6)
¿Cómo puedo detectar en mi código que estoy en modo Release o en modo Debug?
Alternativamente, puede diferenciar usando BuildConfig.BUILD_TYPE;
Si está ejecutando la construcción de depuración BuildConfig.BUILD_TYPE.equals("debug");
devuelve verdadero Y para la versión de compilación BuildConfig.BUILD_TYPE.equals("release");
devuelve verdadero
Debido a los comentarios mixtos sobre BuildConfig.DEBUG
, usé lo siguiente para deshabilitar crashlytics (y análisis) en el modo de depuración:
actualizar /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''
}
}
}
luego, en tu código detectas el indicador ENABLE_CRASHLYTICS
siguiente manera:
if (BuildConfig.ENABLE_CRASHLYTICS)
{
// enable crashlytics and answers (Crashlytics by default includes Answers)
Fabric.with(this, new Crashlytics());
}
usa el mismo concepto en tu aplicación y cambia el nombre de ENABLE_CRASHLYTICS
a lo que quieras. Me gusta este enfoque porque puedo ver la bandera en la configuración y puedo controlar la bandera.
Estoy usando esta solución en caso de que descubra que mi aplicación se está ejecutando en la versión de depuración.
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
Intenta lo siguiente:
if (BuildConfig.DEBUG) {
//It''s not a release version.
}
Se toma de la publicación de Bundells desde here
Sí, no tendrás problemas con el uso de:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
A menos que esté importando la clase BuildConfig incorrecta. Asegúrese de que está haciendo referencia a la clase BuildConfig de su proyecto, no de ninguna de sus bibliotecas de dependencia.
La solución más simple y mejor a largo plazo, es utilizar BuildConfig.DEBUG
. Este es un valor boolean
que será true
para una construcción de depuración, false
contrario:
if (BuildConfig.DEBUG) {
// do something for a debug build
}
Ha habido informes de que este valor no es 100% confiable de las compilaciones basadas en Eclipse, aunque personalmente no he encontrado ningún problema, por lo que no puedo decir qué tan importante es el problema.
Si está utilizando Android Studio, o si está utilizando Gradle desde la línea de comandos, puede agregar sus propias cosas a BuildConfig
o, de lo contrario, modificar los tipos de compilación de debug
y release
para ayudar a distinguir estas situaciones en el tiempo de ejecución.
La solución de Argumento ilegal se basa en el valor de la bandera de android:debuggable
en el manifiesto. Si así es como desea distinguir una compilación de "depuración" de una compilación de "lanzamiento", entonces, por definición, esa es la mejor solución. Sin embargo, tenga en cuenta que en el futuro, la debuggable
es realmente un concepto independiente de lo que Gradle / Android Studio considera una compilación de "depuración". Cualquier tipo de compilación puede optar por establecer el indicador de debuggable
en cualquier valor que tenga sentido para ese desarrollador y para ese tipo de compilación.