O ile mi wiadomo, w Androidzie „wydanie kompilacji” jest podpisanym plikiem APK. Jak to sprawdzić z kodu, czy Eclipse ma jakieś tajne definicje?
Potrzebuję tego do debugowania wypełniania elementów ListView z danych usługi internetowej (nie, logcat nie jest opcją).
Moje myśli:
- Aplikacje
android:debuggable
, ale z jakiegoś powodu nie wyglądają na wiarygodne. - Zakodowanie identyfikatora urządzenia nie jest dobrym pomysłem, ponieważ używam tego samego urządzenia do testowania podpisanych plików APK.
- Używasz ręcznej flagi gdzieś w kodzie? Prawdopodobne, ale na pewno zapomnę kiedyś o zmianie, a wszyscy programiści są leniwi.
android
debugging
certificate
Im0rtality
źródło
źródło
Odpowiedzi:
Istnieją różne sposoby sprawdzenia, czy aplikacja jest zbudowana przy użyciu certyfikatu debugowania lub wydania, ale następujący sposób wydaje mi się najlepszy.
Zgodnie z informacją w dokumentacji systemu Android. Podpisywanie aplikacji , klucz debugowania zawiera nazwę wyróżniającą podmiotu: „ CN = Android Debug, O = Android, C = US ”. Możemy użyć tych informacji do sprawdzenia, czy pakiet jest podpisany kluczem debugowania bez zakodowania podpisu klucza debugowania na stałe w naszym kodzie.
Dany:
Możesz zaimplementować metodę isDebuggable w ten sposób:
źródło
java.security.cert.X509Certificate
,java.security.cert.CertificateException
iandroid.content.pm.Signature
. Wszystkie inne klasy nie prezentują dla mnie wielu meczówAby sprawdzić flagę debugowalną, możesz użyć tego kodu:
Kotlin:
Aby uzyskać więcej informacji, zobacz Zabezpieczanie aplikacji Android LVL .
Alternatywnie, jeśli poprawnie używasz Gradle, możesz sprawdzić, czy
BuildConfig.DEBUG
jest to prawda, czy fałsz.źródło
Odpowiedział Mark Murphy
Najprostszym i najlepszym długoterminowym rozwiązaniem jest użycie
BuildConfig.DEBUG
. To jestboolean
wartość, która będzietrue
dotyczyła kompilacji do debugowania, wfalse
przeciwnym razie:źródło
Jeśli chcesz sprawdzić
APK
statycznie, możesz użyćTe wyjścia
0
, jeśliAPK
nie jest debuggable i1
jeśli to jest.źródło
aapt
mieszka tutaj/Users/USER_NAME/library/Android/sdk/build-tools/28.0.3/aapt
Może późno, ale iosched używa
BuildConfig.DEBUG
źródło
Najpierw dodaj to do pliku build.gradle, pozwoli to również na równoległe uruchamianie kompilacji debugowania i wydania:
Dodaj tę metodę:
źródło
Kompilacja debugowania jest również podpisywana, tylko z innym kluczem. Jest generowany automatycznie przez Eclipse, a jego certyfikat jest ważny tylko przez rok. O co chodzi
android:debuggable
? Możesz uzyskać tę wartość z kodu za pomocąPackageManager
.źródło
Inna opcja, o której warto wspomnieć. Jeśli chcesz wykonać jakiś kod tylko wtedy, gdy dołączony jest debugger, użyj tego kodu:
źródło
Rozwiązany z
android:debuggable
. Był to błąd w odczycie elementu, w którym w niektórych przypadkach flaga debugowania elementu nie była zapisywana w rekordzie iif (m.debug && !App.isDebuggable(getContext()))
zawsze była ocenianafalse
. Mój błąd.źródło
Rozwiązanie w Kotlinie, którego w tej chwili używam:
w ten sposób nadal mogę ZALOGOWAĆ się w debugowaniu, a te zostaną zgłoszone do Crashlytics (na przykład w przypadku procesu kontroli jakości)
źródło