Si quieres información sensata, te recomiendo comandos sensatos :) (sin ofender, solo bromeo). Entonces la pregunta debería leer:
¿Cómo obtener información de registro de un dispositivo Android?
Y ahora estamos en el mejor lado. Existen múltiples enfoques que pueden usarse:
- utilizar aplicaciones para mostrar información de registro (codificada por color)
- utilizar ADB (parte del SDK de Android) para extraer de forma remota la misma información
- use ssh desde el control remoto (o una aplicación de terminal local) para obtener la información directamente desde el dispositivo
Para manejar completamente este tema, se necesita más que esta simple respuesta (si está interesado, por ejemplo, puede encontrar información más detallada en muchos sitios web, o en el libro de Andrew Hoog Android Forensics: Investigación, Análisis y Seguridad Móvil para Google Android , que obtuve el honor para traducir al alemán Probablemente también hay muchas otras fuentes.
Así que solo daré algunos ejemplos aquí para comenzar:
Utilizando aplicaciones
La aplicación probablemente más conocida en este contexto es aLogcat , disponible de forma gratuita en la tienda de juegos (y el desarrollador aceptará con gusto su donación para la otra variante de la misma aplicación). Encontrarás una captura de pantalla debajo de 1 . La aplicación le permite filtrar los registros, iniciar / detener la grabación de mensajes de registro e incluso almacenar los fragmentos grabados en su tarjeta SD, por supuesto, en texto plano, como lo solicitó.
Otra aplicación en esta sección es Log Collector , que simplemente intenta tomar todo el registro disponible y enviarlo a través del menú compartido 2 .
El puente de depuración de Android (ADB)
El Kit de desarrollo de software de Android (SDK) incluye el adb
comando para diversas tareas. Entre muchos otros, ofrece adb shell
ejecutar comandos en el dispositivo. Con esto, también puede recopilar la información de registro deseada: solo prefija los comandos a continuación con adb shell
.
Símbolo del sistema en el dispositivo
Usando una aplicación de terminal (por ejemplo, Android Terminal Emulator o Terminal IDE ) puede acceder a los registros directamente en el símbolo del sistema, localmente en su dispositivo. Un poco más cómodo, esto se puede hacer ejecutando un servidor ssh (por ejemplo, DroidSSHd o DropBear SSH Server ) en su dispositivo, y acceder a él desde su computadora. De esta manera, puede trabajar en una pantalla grande, mientras investiga sus registros.
Comandos para acceder a su información de registro
Hay muchos comandos poderosos que puede usar para acceder a su información de registro desde la línea de comandos, y solo daré algunos ejemplos aquí.
dmesg
El dmesg
comando extrae el registro del núcleo:
$ 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
Con logcat
, puede acceder a mucha información de registro, pero la mayoría de las veces, esto requerirá root. Tiene algunos parámetros para filtrar la información, por ejemplo, seleccionando el búfer de registro para leer -b
. Lea la información proporcionada en la página de desarrolladores en logcat para obtener más detalles. Para darle dos ejemplos: logcat -b events
enumeraría eventos o logcat -b radio
información sobre el módulo de radio de su dispositivo.
dumpsys y dumpstate
Los dos comandos dumpsys
y le dumpstate
dan información detallada del sistema:
$ 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>
informe de error
Y si eres demasiado vago para recordarlos a todos, simplemente usa el bugreport
comando, que llama a todo lo anterior y lo agrupa para un buen informe de error al desarrollador ...
Por supuesto, puede redirigir la salida de todos esos comandos a un archivo para copiarla en su computadora, y en la mayoría de los casos debe hacerlo, ya que su búfer de pantalla sería demasiado pequeño para manejarlo todo: bugreport > /mnt/sdcard/bugreport.txt
sería un ejemplo para esa parte.
$ dmesg
odmsg
? Debe haber un error tipográfico en uno de estos :)adb shell pm grant com.nolanlawson.logcat android.permission.READ_LOGS
Para los desarrolladores (u otras partes interesadas) que necesitan analizar este archivo sin procesar, aquí hay algunos recursos:
android_logger_list_read()
para recopilar entradas de registro: https://android.googlesource.com/platform/system/core/+/master/logcat/logcat.cppEl formato real del formato de registro se detalla en:
Una copia de las partes relevantes, ligeramente anotada y reordenada para su conveniencia:
Puede distinguir las versiones de diferencias observando el tercer y cuatro bytes. Aparentemente, el formato también depende de la endianness de su plataforma. Para mensajes v1,
__pad
es igual a0
. Los mensajes v2 (y v3) usan 24 (0x18
).Para
main
,radio
ysystem
los registros demsg
campo se interpreta como sigue ( fuente ):\0
como separador\0
como terminadorSi este mensaje se trunca,
\0
puede faltar el final .events
Sin embargo, para el registro, elmsg
campo contiene los siguientes datos binarios:length
, seguido de loslength
bytes que contienen una cadena codificada en UTF8length
, seguido de loslength
nodos del árbol, cada uno de ellosAndroidEventLogType
.fuente