Soweit ich weiß, ist in Android "Release Build" APK signiert. Wie kann man es anhand des Codes überprüfen oder hat Eclipse eine Art geheime Definition?
Ich benötige dies, um das Auffüllen von ListView-Elementen aus Webdienstdaten zu debuggen (nein, logcat ist keine Option).
Meine Gedanken:
- Anwendungen
android:debuggable
, aber aus irgendeinem Grund sieht das nicht zuverlässig aus. - Die Hardcodierung der Geräte-ID ist keine gute Idee, da ich dasselbe Gerät zum Testen signierter APKs verwende.
- Verwenden Sie die manuelle Flagge irgendwo im Code? Plausibel, aber ich werde definitiv vergessen, mich irgendwann zu ändern, und alle Programmierer sind faul.
android
debugging
certificate
Unverschämtheit
quelle
quelle
Antworten:
Es gibt verschiedene Möglichkeiten, um zu überprüfen, ob die Anwendung mithilfe eines Debug- oder Release-Zertifikats erstellt wurde. Die folgende Methode erscheint mir jedoch am besten.
Gemäß den Informationen in der Android-Dokumentation Signing Your Application enthält der Debug-Schlüssel den folgenden Betreffnamen: " CN = Android Debug, O = Android, C = US ". Wir können diese Informationen verwenden, um zu testen, ob das Paket mit dem Debug-Schlüssel signiert ist, ohne die Debug-Schlüsselsignatur in unserem Code fest zu codieren.
Gegeben:
Sie können eine isDebuggable-Methode folgendermaßen implementieren:
quelle
java.security.cert.X509Certificate
,java.security.cert.CertificateException
undandroid.content.pm.Signature
. Alle anderen Klassen präsentieren nicht mehrere Spiele für michUm das debuggable Flag zu überprüfen, können Sie diesen Code verwenden:
Kotlin:
Weitere Informationen finden Sie unter Sichern von Android LVL-Anwendungen .
Wenn Sie Gradle richtig verwenden, können Sie alternativ überprüfen, ob
BuildConfig.DEBUG
es wahr oder falsch ist.quelle
Beantwortet von Mark Murphy
Die einfachste und beste langfristige Lösung ist die Verwendung
BuildConfig.DEBUG
. Dies ist einboolean
Wert, dertrue
für einen Debug-Build verwendet wird,false
andernfalls:quelle
Wenn Sie eine
APK
statische überprüfen möchten , können Sie verwendenDies wird ausgegeben,
0
wenn dasAPK
nicht debuggbar ist und1
wenn es ist.quelle
aapt
lebt hier/Users/USER_NAME/library/Android/sdk/build-tools/28.0.3/aapt
Vielleicht spät, aber iosched verwendet
BuildConfig.DEBUG
quelle
Fügen Sie dies zuerst zu Ihrer build.gradle-Datei hinzu. Dadurch können auch Debug- und Release-Builds nebeneinander ausgeführt werden:
Fügen Sie diese Methode hinzu:
quelle
Ein Debug-Build wird ebenfalls signiert, nur mit einem anderen Schlüssel. Es wird automatisch von Eclipse generiert und das Zertifikat ist nur ein Jahr gültig. Was ist das Problem mit
android:debuggable
? Sie können diesen Wert aus dem Code mit abrufenPackageManager
.quelle
Eine weitere erwähnenswerte Option. Wenn Sie Code nur ausführen müssen, wenn der Debugger angehängt ist, verwenden Sie diesen Code:
quelle
Gelöst mit
android:debuggable
. Es war ein Fehler beim Lesen eines Elements, bei dem in einigen Fällen das Debug-Flag für ein Element nicht im Datensatz gespeichert wurde undif (m.debug && !App.isDebuggable(getContext()))
immer ausgewertet wurdefalse
. Mein Fehler.quelle
Lösung in Kotlin, die ich gerade benutze:
Auf diese Weise kann ich mich immer noch beim Debuggen SIGNIEREN und diese werden an Crashlytics gemeldet (Beispiel für den QS-Prozess).
quelle