Detecta si estoy en modo de liberación o depuración en Android

¿Cómo puedo detectar que estoy en modo de lanzamiento o modo de depuración en Android?

La solución más simple y la mejor a largo plazo es usar BuildConfig.DEBUG . Este es un valor boolean que será true para una comstackción de depuración, de lo contrario, false :

 if (BuildConfig.DEBUG) { // do something for a debug build } 

Se han recibido informes de que este valor no es 100% confiable de las comstackciones basadas en Eclipse, aunque personalmente no he encontrado un problema, por lo que no puedo decir qué tan grave es realmente.

Si está utilizando Android Studio, o si está utilizando Gradle desde la línea de comandos, puede agregar sus propias cosas a BuildConfig o modificar los tipos de comstackción de debug y release para ayudar a distinguir estas situaciones en el tiempo de ejecución.

La solución de Ilegal Argument se basa en el valor de android:debuggable indicador de android:debuggable en el manifiesto. Si así es como desea distinguir una comstackción de “depuración” de una comstackción de “liberación”, entonces, por definición, esa es la mejor solución. Sin embargo, tenga en cuenta que, en adelante, la bandera de debuggable es realmente un concepto independiente de lo que Gradle / Android Studio considera una versión de “depuración”. Cualquier tipo de comstackción puede elegir establecer el indicador debuggable a cualquier valor que tenga sentido para ese desarrollador y para ese tipo de comstackción.

Pruebe lo siguiente:

 boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) ); 

Está tomado de la publicación de bundells desde aquí

Sí, no tendrá problemas para usar:

 if (BuildConfig.DEBUG) { //It's not a release version. } 

A menos que esté importando la clase BuildConfig incorrecta. Asegúrese de hacer referencia a la clase BuildConfig de su proyecto, no desde ninguna de sus bibliotecas de dependencias.

enter image description here

Debido a los comentarios BuildConfig.DEBUG sobre BuildConfig.DEBUG , utilicé lo siguiente para deshabilitar crashlytics (y análisis) en 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 su código, usted detecta la bandera ENABLE_CRASHLYTICS siguiente manera:

  if (BuildConfig.ENABLE_CRASHLYTICS) { // enable crashlytics and answers (Crashlytics by default includes Answers) Fabric.with(this, new Crashlytics()); } 

utilice el mismo concepto en su aplicación y cambie el nombre de ENABLE_CRASHLYTICS a cualquier cosa que desee. Me gusta este enfoque porque puedo ver la bandera en la configuración y puedo controlar la bandera.

Alternativamente, puede diferenciar usando BuildConfig.BUILD_TYPE;

Si está ejecutando la depuración BuildConfig.BUILD_TYPE.equals("debug"); devuelve verdadero. Y para el lanzamiento BuildConfig.BUILD_TYPE.equals("release"); devuelve verdadero.

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 }