Respuestas:
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.
public static final boolean DEBUG = Boolean.parseBoolean("true");
una compilación de depuración. Mientras que es una forma extraña de conjunto DEBUG
a true
, 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:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
Kotlin:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
Se toma de la publicación de bundells de aquí
getApplicationInfo().flags
trabajar?
Sí, no tendrás 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 a ninguna de sus bibliotecas de dependencias.
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
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, detecta la ENABLE_CRASHLYTICS
bandera de la siguiente manera:
if (BuildConfig.ENABLE_CRASHLYTICS)
{
// enable crashlytics and answers (Crashlytics by default includes Answers)
Fabric.with(this, new Crashlytics());
}
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.
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ón BuildConfig.BUILD_TYPE.equals("release");
vuelve a ser verdadera.
true
.
Estoy usando esta solución en caso de descubrir que mi aplicación se está ejecutando en la versión de depuración.
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
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. Gracias
Asegúrese de importar la clase BuildConfig correcta. Y sí, no tendrá problemas para usar:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
BuildConfig
se encuentra en el paquete de su aplicación, por ejemploimport com.mycompany.myapp.BuildConfig;