Risposte:
La soluzione più semplice e migliore a lungo termine è usare BuildConfig.DEBUG
. Questo è un boolean
valore che sarà true
per una build di debug, false
altrimenti:
if (BuildConfig.DEBUG) {
// do something for a debug build
}
Ci sono state segnalazioni che questo valore non è affidabile al 100% dalle build basate su Eclipse, anche se personalmente non ho riscontrato un problema, quindi non posso dire quanto sia realmente un problema.
Se stai usando Android Studio o se stai usando Gradle dalla riga di comando, puoi aggiungere le tue cose BuildConfig
o modificare i tipi debug
e release
costruire tipi per aiutare a distinguere queste situazioni in fase di esecuzione.
La soluzione di Argomento illegale si basa sul valore della android:debuggable
bandiera nel manifest. Se è così che desideri distinguere una build "debug" da una build "release", allora per definizione, questa è la soluzione migliore. Tuttavia, tieni presente che andando avanti, la debuggable
bandiera è davvero un concetto indipendente da ciò che Gradle / Android Studio considera una build "debug". Qualsiasi tipo di build può scegliere di impostare il debuggable
flag su qualsiasi valore che abbia senso per quello sviluppatore e per quel tipo di build.
public static final boolean DEBUG = Boolean.parseBoolean("true");
una build di debug. Mentre questo è un modo bizzarro per set DEBUG
a true
, dovrebbe funzionare. Se lo vedi in una delle versioni di test 1.3.0 o se hai un caso di test riproducibile per 1.2.2, presenta un problema . Non vedo problemi in sospeso che segnalano questo problema.
Prova quanto segue:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
Kotlin:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
È preso da post di bundells da qui
getApplicationInfo().flags
funzionare?
Sì, non avrai problemi ad usare:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
A meno che non si stia importando la classe BuildConfig sbagliata. Assicurati di fare riferimento alla classe BuildConfig del tuo progetto, non a nessuna delle tue librerie di dipendenze.
A causa dei commenti contrastanti su BuildConfig.DEBUG
, ho usato quanto segue per disabilitare crashlytics (e analisi) in modalità debug:
aggiorna /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'
}
}
}
quindi, nel tuo codice rilevi la ENABLE_CRASHLYTICS
bandiera come segue:
if (BuildConfig.ENABLE_CRASHLYTICS)
{
// enable crashlytics and answers (Crashlytics by default includes Answers)
Fabric.with(this, new Crashlytics());
}
usa lo stesso concetto nella tua app e rinomina ENABLE_CRASHLYTICS
come preferisci. Mi piace questo approccio perché posso vedere il flag nella configurazione e posso controllare il flag.
In alternativa, è possibile differenziare utilizzando BuildConfig.BUILD_TYPE;
Se stai eseguendo il debug build
BuildConfig.BUILD_TYPE.equals("debug");
restituisce true. E per il rilascio build BuildConfig.BUILD_TYPE.equals("release");
restituisce vero.
true
.
Sto usando questa soluzione per scoprire che la mia app è in esecuzione sulla versione di debug.
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
if (BuildConfig.DEBUG) {}
un modulo Gradle dipendente che non aveva (ovviamente) NESSUN RIFERIMENTO al file build.gradle dell'app - questo ha causato il riconoscimento della modalità debug in modo errato. if (BuildConfig.BUILD_TYPE.equals("Debug")){ }
RISOLTO il problema. Grazie
Assicurati di importare la classe BuildConfig corretta E sì, non avrai problemi ad usare:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
BuildConfig
si trova nel pacchetto della tua app, ad es.import com.mycompany.myapp.BuildConfig;