Wenn Sie vernünftige Informationen wünschen, empfehle ich vernünftige Befehle :) (nichts für ungut, nur ein Scherz). Die Frage sollte also lauten:
Wie erhalte ich Protokollinformationen von einem Android-Gerät?
Und jetzt sind wir auf der besseren Seite. Es gibt mehrere Ansätze, die verwendet werden können:
- Verwenden Sie Apps, um (farbcodierte) Protokollinformationen anzuzeigen
- Verwenden Sie ADB (Teil des Android SDK), um dieselben Informationen aus der Ferne zu extrahieren
- Verwenden Sie ssh von der Fernbedienung (oder einer lokalen Terminal-App), um die Informationen direkt vom Gerät abzurufen
Um dieses Thema vollständig zu behandeln, ist mehr als diese einfache Antwort erforderlich (bei Interesse finden Sie z. B. detailliertere Informationen auf vielen Websites oder in Andrew Hoogs Buch Android Forensics: Untersuchung, Analyse und mobile Sicherheit für Google Android , das ich hatte Ehre, ins Deutsche zu übersetzen. Es gibt wahrscheinlich auch viele andere Quellen.
Ich werde hier nur einige Beispiele nennen, um Ihnen den Einstieg zu erleichtern:
Apps nutzen
Die wahrscheinlich bekannteste App in diesem Zusammenhang ist aLogcat , die kostenlos im Playstore erhältlich ist (und der Entwickler nimmt Ihre Spende für die andere Variante derselben App gerne entgegen). Unter 1 finden Sie einen Screenshot . Mit der App können Sie die Protokolle filtern, die Aufzeichnung von Protokollnachrichten starten / stoppen und sogar die aufgezeichneten Schnipsel auf Ihrer SD-Karte speichern - natürlich im Klartext, wie Sie es gewünscht haben.
Eine weitere App in diesem Abschnitt ist Log Collector , die einfach versucht, das gesamte verfügbare Protokoll abzurufen und über das Freigabemenü 2 zu senden .
Die Android Debug Bridge (ADB)
Das Android Software Development Kit (SDK) enthält den adb
Befehl für verschiedene Aufgaben. Unter anderem bietet es die Möglichkeit adb shell
, Befehle auf dem Gerät auszuführen. Auf diese Weise können Sie auch die gewünschten Protokollinformationen erfassen: Stellen Sie den Befehlen einfach das Präfix mit voran adb shell
.
Eingabeaufforderung auf dem Gerät
Mit einer Terminal-App (z. B. Android Terminal Emulator oder Terminal IDE ) können Sie direkt an der Eingabeaufforderung lokal auf Ihrem Gerät auf die Protokolle zugreifen. Etwas komfortabler können Sie einen SSH-Server (z. B. DroidSSHd oder DropBear SSH Server ) auf Ihrem Gerät ausführen und von Ihrem Computer aus darauf zugreifen. Auf diese Weise können Sie auf einem großen Bildschirm arbeiten und gleichzeitig Ihre Protokolle untersuchen.
Befehle zum Zugriff auf Ihre Protokollinformationen
Es gibt viele leistungsstarke Befehle, mit denen Sie über die Befehlszeile auf Ihre Protokollinformationen zugreifen können, und ich werde hier nur einige Beispiele nennen.
dmesg
Der dmesg
Befehl extrahiert das Kernelprotokoll:
$ dmesg
<6>[82839.126586] PM: Syncing filesystems ... done.
<7>[82839.189056] PM: Preparing system for mem sleep
<4>[82839.189361] Freezing user space processes ... (elapsed 0.05 seconds) done.
<4>[82839.240661] Freezing remaining freezable tasks ... (elapsed 0.00 seconds) done.
<7>[82839.242279] PM: Entering mem sleep
<4>[82839.242889] Suspending console(s) (use no_console_suspend to debug)
<7>[82839.252410] vfp_pm_save_context: saving vfp state
<6>[82839.252716] PM: Resume timer in 26 secs (864747 ticks at 32768 ticks/sec.)
<6>[82842.091369] Successfully put all powerdomains to target state
<6>[82842.092468] wakeup wake lock: wifi_wake
logcat
Mit logcat
können Sie auf viele Protokollierungsinformationen zugreifen. In den meisten Fällen ist jedoch root erforderlich. Es verfügt über einige Parameter zum Filtern der Informationen, z. B. durch Auswahl des zu lesenden Protokollpuffers -b
. Bitte lesen Sie die Informationen auf der Entwicklerseite von logcat für Details. Um Ihnen zwei Beispiele zu geben: logcat -b events
würde Ereignisse oder logcat -b radio
Informationen zum Funkmodul Ihres Geräts auflisten.
dumpsys und dumpstate
Die beiden Befehle dumpsys
und dumpstate
geben Sie detaillierte Systeminformationen:
$ dumpsys
Currently running services:
LocationProxyService
SurfaceFlinger
accessibility
account
activity
<snip>
DUMP OF SERVICE account:
Accounts: 1
Account {[email protected], type=com.google}
<snip>
DUMP OF SERVICE alarm:
$ dumpstate
========================================================
== dumpstate: 2012-08-18 23:39:53
========================================================
Build: Gingerbread GWK74 - CyanogenMilestone2
Bootloader: 0x0000
Radio: unknown
<snip>
------ MEMORY INFO (/proc/meminfo) ------
MemTotal: 487344 kB
MemFree: 10436 kB
Buffers: 14136 kB
Cached: 145460 kB
<snip>
Fehlerbericht
Und wenn Sie zu faul sind, um sich an alle zu erinnern, verwenden Sie einfach den bugreport
Befehl - der alle oben genannten Elemente aufruft und für einen netten, summenden Fehlerbericht an den Entwickler bündelt ...
Natürlich können Sie die Ausgabe all dieser Befehle in eine Datei umleiten, um sie auf Ihren Computer zu kopieren, und in den meisten Fällen sollten Sie dies tun - da Ihr Bildschirmpuffer viel zu klein wäre, um alles zu verarbeiten: bugreport > /mnt/sdcard/bugreport.txt
wäre ein Beispiel dafür dieser Teil.
$ dmesg
oderdmsg
? Es muss einen Tippfehler in einem dieser geben :)adb shell pm grant com.nolanlawson.logcat android.permission.READ_LOGS
Für Entwickler (oder andere interessierte Parteien), die diese Rohdatei analysieren müssen, sind hier einige Ressourcen aufgeführt:
android_logger_list_read()
zum Sammeln von Protokolleinträgen auf: https://android.googlesource.com/platform/system/core/+/master/logcat/logcat.cppDas tatsächliche Format des Protokollformats ist detailliert unter:
Eine Kopie der relevanten Teile, leicht kommentiert und für Ihre Bequemlichkeit nachbestellt:
Sie können die unterschiedlichen Versionen anhand des dritten und des vier Bytes unterscheiden. Das Format hängt offenbar auch von der Endianness Ihrer Plattform ab. Für v1 Nachrichten,
__pad
gleich zu0
. v2 (und v3) Nachrichten verwenden 24 (0x18
).Für
main
,radio
undsystem
logsmsg
Feld wird wie folgt interpretiert ( Quelle ):\0
als Trennzeichen\0
als TerminatorWenn diese Nachricht abgeschnitten wird,
\0
fehlt möglicherweise das Trailing .Für das
events
Protokollmsg
enthält das Feld jedoch die folgenden Binärdaten:length
, gefolgt von denlength
Bytes, die eine UTF8-codierte Zeichenfolge enthaltenlength
, gefolgt von denlength
jeweils eigenen BaumknotenAndroidEventLogType
.quelle