W najnowszej wersji ADT (r17) dodano wygenerowaną stałą, BuildConfig.DEBUG
która jest ustawiana zgodnie z typem kompilacji. Problem polega na tym, że nigdy nie jest ustawiony na false, spodziewałem się, że zmieni się podczas wykonywania „Narzędzia Android -> Eksportuj podpisany pakiet aplikacji”, ale tak się nie stało.
Jak więc zmienić typ kompilacji?
Dodano funkcję, która umożliwia uruchamianie części kodu tylko w trybie debugowania. Kompilacje generują teraz klasę o nazwie BuildConfig zawierającą stałą DEBUG, która jest automatycznie ustawiana zgodnie z typem kompilacji. Możesz sprawdzić stałą (BuildConfig.DEBUG) w kodzie, aby uruchomić funkcje tylko do debugowania
Odpowiedzi:
Obecnie można uzyskać poprawne zachowanie, wyłączając opcję „Buduj automatycznie”, czyszcząc projekt, a następnie eksportując za pomocą opcji „Narzędzia systemu Android -> Eksportuj podpisany pakiet aplikacji”. Po uruchomieniu aplikacja
BuildConfig.DEBUG
powinna być fałszywa.źródło
W Eclipse zawsze wyłączam opcję „Buduj automatycznie” przed wyeksportowaniem aplikacji w wersji. Następnie czyszczę projekt i eksportuję. W przeciwnym razie rozpocznie kompilację w trybie debugowania, a następnie wartość BuildConfig.DEBUG może być nieprawidłowa.
W Android Studio po prostu dodaję własną zmienną niestandardową w pliku build.gradle:
Kiedy buduję projekt, BuildConfig.java jest generowany w następujący sposób:
Następnie w swoim kodzie mogę użyć:
Polecam wyczyścić po przełączeniu kompilacji debugowania / wydania.
źródło
Nie działa poprawnie:
Problem 27940 : BuildConfig.DEBUG ma wartość „prawda” dla wyeksportowanego pakietu aplikacji
To rozczarowujące, że czasami wypuszczają błędne funkcje.
źródło
Działa, ale pamiętaj, że plik kodu nigdy się nie zmienia, nawet podczas eksportowania podpisanego pliku. Eksport proces zmienia wartość tej zmiennej na FALSE, co może dać fałszywe wrażenie, że to nie działa. Przetestowałem to z instrukcjami logowania, takimi jak
Podczas testowania moje instrukcje Log nie generują już żadnych danych wyjściowych.
źródło
Sprawdź
imports
, czy czasami BuildConfig jest importowany z dowolnej klasy biblioteki. Na przykład:W tym przypadku BuildConfig.DEBUG zawsze zwróci false ;
W tym przypadku BuildConfig.DEBUG zwróci Twój prawdziwy wariant kompilacji .
ps Po prostu skopiowałem ten z mojej odpowiedzi tutaj: BuildConfig.DEBUG zawsze fałsz podczas budowania projektów biblioteki za pomocą gradle
źródło
android.support.compat
. Myślę, że to kolejny powód, aby po prostu zdefiniować własne pole pod inną nazwą.Od przygotowania do wydania :
Więcej informacji znajduje się pod linkiem.
źródło
Rozwiązanie dla mnie:
Działa w r20
źródło
Chciałbym zaproponować proste obejście, jeśli używasz proguard podczas eksportu APK.
Proguard zapewnia sposób usuwania wywołań określonych funkcji w trybie wydania. Wszelkie wywołania dzienników debugowania można usunąć za pomocą następującego ustawienia w
proguard-project.txt
.I ustawianie optymalizacji
project.properties
.Dzięki temu nie musisz przejmować się niepotrzebnym przekazywaniem obliczeń String do dziennika debugowania, na który wskazywał @Jeremyfa. Obliczenia zostały właśnie usunięte w kompilacji wydania.
Tak więc obejście dla BuildConfig.DEBUG używa tej samej funkcji proguard, co śledzenie.
I po ustawieniu
proguard-project.txt
.Wolałbym używać tego
Build Automatically
zamiast wyłączać opcję, ponieważ nie zależy to od indywidualnych ustawień IDE konstruktora, ale jest utrzymywane jako zatwierdzony plik, który jest współdzielony przez programistów.źródło
O ile zrozumiałem, nie działa poprawnie ( numer 22241 )
Miałem problemy z projektem (praca z Eclipse), ta stała nie była ustawiona na true podczas eksportowania podpisanego pliku APK mojego projektu :(
Chciałbym usłyszeć, że to działa
źródło
dobrym sposobem jest stworzenie własnej klasy:
źródło
Widziałem dziwne zachowanie, które ma związek z ustawieniem wartości w BuildConfig na ostateczne wartości. Może to mieć coś wspólnego z Twoim problemem.
Proste wyjaśnienie jest takie, że wartości domyślne są ustawiane początkowo przed uruchomieniem Proguard, a następnie po uruchomieniu Proguard plik BuildConfig jest ponownie generowany z odpowiednimi wartościami. Jednak Proguard już zoptymalizował Twój kod do tego momentu i masz problemy.
Oto błąd, który stworzyłem przeciwko Gradle. https://code.google.com/p/android/issues/detail?id=182449
źródło