¿Cómo puedo detectar en mi código que estoy en modo Release o modo Debug?
fuente
¿Cómo puedo detectar en mi código que estoy en modo Release o modo Debug?
La solución más simple y mejor a largo plazo es usar BuildConfig.DEBUG
. Este es un boolean
valor que será true
para una compilación de depuración, de lo 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 un problema, por lo que no puedo decir qué problema realmente es.
Si está utilizando Android de estudio, o si está utilizando Gradle desde la línea de comandos, puede añadir su propio material a BuildConfig
o de otra manera modificar las debug
y release
construir tipos para ayudar a distinguir estas situaciones en tiempo de ejecución.
La solución de Argumento ilegal se basa en el valor de la android:debuggable
bandera 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
bandera es realmente un concepto independiente de lo que Gradle / Android Studio considera que es una construcción de "depuración". Cualquier tipo de compilación puede elegir establecer el debuggable
indicador en cualquier valor que tenga sentido para ese desarrollador y para ese tipo de compilación.
BuildConfig
se encuentra en el paquete de su aplicación, por ejemploimport com.mycompany.myapp.BuildConfig;
public static final boolean DEBUG = Boolean.parseBoolean("true");
una compilación de depuración. Mientras que es una forma extraña de conjuntoDEBUG
atrue
, que debería funcionar. Si está viendo esto en una de las versiones de prueba 1.3.0, o si tiene un caso de prueba reproducible para 1.2.2, presente un problema . No veo ningún problema pendiente que informe este problema.Intenta lo siguiente:
Kotlin:
Se toma de la publicación de bundells de aquí
fuente
getApplicationInfo().flags
trabajar?Sí, no tendrás problemas para usar:
A menos que esté importando la clase BuildConfig incorrecta. Asegúrese de hacer referencia a la clase BuildConfig de su proyecto, no a ninguna de sus bibliotecas de dependencias.
fuente
Debido a los comentarios mixtos sobre
BuildConfig.DEBUG
, utilicé lo siguiente para deshabilitar crashlytics (y análisis) en modo de depuración:actualizar /app/build.gradle
luego, en su código, detecta la
ENABLE_CRASHLYTICS
bandera de la siguiente manera:use el mismo concepto en su aplicación y cambie el nombre
ENABLE_CRASHLYTICS
a lo que quiera. Me gusta este enfoque porque puedo ver la bandera en la configuración y puedo controlarla.fuente
Alternativamente, puede diferenciar usando BuildConfig.BUILD_TYPE;
Si está ejecutando, la compilación de depuración
BuildConfig.BUILD_TYPE.equals("debug");
devuelve verdadero. Y para el lanzamiento, la construcciónBuildConfig.BUILD_TYPE.equals("release");
vuelve a ser verdadera.fuente
true
.Estoy usando esta solución en caso de descubrir que mi aplicación se está ejecutando en la versión de depuración.
fuente
if (BuildConfig.DEBUG) {}
un módulo gradle dependiente que (por supuesto) NO HABÍA REFERENCIA al archivo build.gradle de la aplicación; esto provocó que el modo de depuración se reconociera de manera incorrecta.if (BuildConfig.BUILD_TYPE.equals("Debug")){ }
CORREGIDO el problema. GraciasAsegúrese de importar la clase BuildConfig correcta. Y sí, no tendrá problemas para usar:
fuente