Jak mogę wykryć w kodzie, że jestem w trybie zwolnienia lub w trybie debugowania?
źródło
Jak mogę wykryć w kodzie, że jestem w trybie zwolnienia lub w trybie debugowania?
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.
BuildConfig
znajduje się w pakiecie aplikacji, np.import com.mycompany.myapp.BuildConfig;
public static final boolean DEBUG = Boolean.parseBoolean("true");
do debugowania. Chociaż jest to dziwaczny sposób ustawićDEBUG
natrue
, 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:
Kotlin:
To jest pobierane z paczki pakietów stąd
źródło
getApplicationInfo().flags
aby działać?Tak, nie będziesz mieć problemów z użyciem:
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.
źródło
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
następnie w kodzie wykrywasz
ENABLE_CRASHLYTICS
flagę w następujący sposób: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ę.źródło
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 kompilacjiBuildConfig.BUILD_TYPE.equals("release");
zwraca wartość true.źródło
true
.Korzystam z tego rozwiązania, aby dowiedzieć się, że moja aplikacja działa w wersji do debugowania.
źródło
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ękiUpewnij się, że importujesz poprawną klasę BuildConfig I tak, nie będziesz mieć problemów z użyciem:
źródło