Odpowiedzi:
Najprostszym i najlepszym długoterminowym rozwiązaniem jest użycie BuildConfig.DEBUG
. Jest to boolean
wartość true
dla kompilacji debugowania, w false
przeciwnym razie:
if (BuildConfig.DEBUG) {
// do something for a debug build
}
Pojawiły się doniesienia, że ta wartość nie jest w 100% wiarygodna w przypadku kompilacji opartych na Eclipse, chociaż osobiście nie napotkałem problemu, więc nie mogę powiedzieć, na ile tak naprawdę jest problem.
Jeśli korzystasz z Android Studio lub jeśli korzystasz z Gradle z wiersza poleceń, możesz dodawać własne rzeczy BuildConfig
lub w inny sposób dostosowywać debug
i release
budować typy, aby pomóc rozróżnić te sytuacje w czasie wykonywania.
Rozwiązanie z nielegalnego argumentu oparte jest na wartości android:debuggable
flagi w manifeście. Jeśli tak chcesz odróżnić kompilację „debugowania” od kompilacji „wydania”, to z definicji jest to najlepsze rozwiązanie. Należy jednak pamiętać, że w przyszłości debuggable
flaga jest naprawdę niezależną koncepcją od tego, co Gradle / Android Studio uważa za kompilację „debugowania”. Każdy typ kompilacji może ustawić debuggable
flagę na dowolną wartość, która ma sens dla tego programisty i dla tego typu kompilacji.
public static final boolean DEBUG = Boolean.parseBoolean("true");
do debugowania. Chociaż jest to dziwaczny sposób ustawić DEBUG
na true
, to powinno działać. Jeśli widzisz to w jednej z wersji testowych 1.3.0 lub jeśli masz odtwarzalną walizkę testową dla wersji 1.2.2, zgłoś problem . Nie widzę żadnych zaległych problemów zgłaszających ten problem.
Spróbuj wykonać następujące czynności:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
Kotlin:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
To jest pobierane z paczki pakietów stąd
getApplicationInfo().flags
aby działać?
Tak, nie będziesz mieć problemów z użyciem:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
Chyba że importujesz niewłaściwą klasę BuildConfig. Upewnij się, że odwołujesz się do klasy BuildConfig projektu, a nie z żadnej z bibliotek zależności.
Z powodu mieszanych komentarzy na temat BuildConfig.DEBUG
, użyłem następujących opcji, aby wyłączyć awarie (i analizy) w trybie debugowania:
aktualizacja /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'
}
}
}
następnie w kodzie wykrywasz ENABLE_CRASHLYTICS
flagę w następujący sposób:
if (BuildConfig.ENABLE_CRASHLYTICS)
{
// enable crashlytics and answers (Crashlytics by default includes Answers)
Fabric.with(this, new Crashlytics());
}
użyj tej samej koncepcji w swojej aplikacji i zmień nazwę ENABLE_CRASHLYTICS
na cokolwiek chcesz. Podoba mi się to podejście, ponieważ widzę flagę w konfiguracji i mogę kontrolować flagę.
Alternatywnie możesz różnicować za pomocą BuildConfig.BUILD_TYPE;
Jeśli używasz debugowania, kompilacja
BuildConfig.BUILD_TYPE.equals("debug");
zwraca wartość true. A dla wydania kompilacji BuildConfig.BUILD_TYPE.equals("release");
zwraca wartość true.
true
.
Korzystam z tego rozwiązania, aby dowiedzieć się, że moja aplikacja działa w wersji do debugowania.
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
if (BuildConfig.DEBUG) {}
w utrzymaniu Gradle modułu, który miał (oczywiście) bez odniesienia do pliku build.gradle o aplikacji - to spowodowane trybie debugowania, aby być uznanym w niewłaściwy sposób. if (BuildConfig.BUILD_TYPE.equals("Debug")){ }
NAPRAWIONO problem. Dzięki
Upewnij się, że importujesz poprawną klasę BuildConfig I tak, nie będziesz mieć problemów z użyciem:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
BuildConfig
znajduje się w pakiecie aplikacji, np.import com.mycompany.myapp.BuildConfig;