Se você quiser informações sensatas, recomendo comandos sensatos :) (sem ofensa, apenas brincando). Portanto, a pergunta deve ser:
Como obter informações de log de um dispositivo Android?
E agora estamos do lado melhor. Existem várias abordagens que podem ser usadas:
- utilize aplicativos para exibir informações de log (codificadas por cores)
- utilize o ADB (parte do Android SDK) para extrair remotamente as mesmas informações
- use ssh do controle remoto (ou de um aplicativo de terminal local) para obter as informações diretamente do dispositivo
Para lidar completamente com esse tópico, é preciso mais do que esta resposta simples (se estiver interessado, você pode, por exemplo, encontrar informações mais detalhadas em muitos sites, ou no livro Android Forensics: Investigação, Análise e Segurança Móvel para Andrew Android, de Andrew Hoog , que eu tinha o honra de traduzir para o alemão.Há provavelmente muitas outras fontes também.
Então, apenas darei alguns exemplos aqui para você começar:
Utilizando aplicativos
O aplicativo provavelmente mais conhecido nesse contexto é o aLogcat , disponível gratuitamente no playstore (e o desenvolvedor aceitará com prazer sua doação para a outra variante do mesmo aplicativo). Você encontrará uma captura de tela abaixo 1 . O aplicativo permite filtrar os logs, iniciar / parar a gravação de mensagens de log e até armazenar os trechos gravados no seu cartão SD - é claro em texto simples, conforme solicitado.
Outro aplicativo nesta seção é o Log Collector , que simplesmente tenta pegar todo o log disponível e enviá-lo pelo menu de compartilhamento 2 .
A ponte de depuração do Android (ADB)
O Android Software Development Kit (SDK) inclui o adb
comando para várias tarefas. Entre muitos outros, oferece o adb shell
comando para executar no dispositivo. Usando isso, você também pode coletar as informações de log desejadas: basta prefixar os comandos abaixo com adb shell
.
Prompt de comando no dispositivo
Usando um aplicativo de terminal (por exemplo, Android Emulator Terminal ou Terminal IDE ), você pode acessar os logs diretamente no prompt de comando, localmente no seu dispositivo. Um pouco mais confortável, isso pode ser feito com um servidor ssh (por exemplo, DroidSSHd ou DropBear SSH Server ) no seu dispositivo e acessá-lo no seu computador. Dessa forma, você pode trabalhar em uma tela grande enquanto investiga seus logs.
Comandos para acessar suas informações de log
Existem muitos comandos poderosos que você pode usar para acessar suas informações de log na linha de comando, e apenas darei alguns exemplos aqui.
dmesg
O dmesg
comando extrai o log do kernel:
$ 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
Com logcat
, você pode acessar muitas informações de log - mas, na maioria das vezes, isso exige raiz. Possui alguns parâmetros para filtrar as informações, por exemplo, selecionando o buffer de log para leitura -b
. Leia as informações fornecidas na página de desenvolvedores no logcat para obter detalhes. Para dar dois exemplos: você listaria logcat -b events
eventos ou logcat -b radio
informações no módulo de rádio do seu dispositivo.
dumpsys e dumpstate
Os dois comandos dumpsys
e dumpstate
fornecem informações detalhadas do 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>
relatório de erro
E se você estiver com preguiça de se lembrar de todos, basta usar o bugreport
comando - que chama todos os itens acima e o agrupa para um desenvolvedor, humm, bom relatório de bug ao desenvolvedor ...
Obviamente, você pode redirecionar a saída de todos esses comandos para um arquivo para copiar para o seu computador e, na maioria dos casos, você deve fazê-lo - pois o buffer da tela seria muito pequeno para lidar com tudo: bugreport > /mnt/sdcard/bugreport.txt
seria um exemplo para aquela parte.
$ dmesg
oudmsg
? Deve haver um erro de digitação em um destes :)adb shell pm grant com.nolanlawson.logcat android.permission.READ_LOGS
Para desenvolvedores (ou outras partes interessadas) que precisam analisar esse arquivo bruto, aqui estão alguns recursos:
android_logger_list_read()
para reunir entradas de log: https://android.googlesource.com/platform/system/core/+/master/logcat/logcat.cppO formato real do formato de log é detalhado em:
Uma cópia das partes relevantes, ligeiramente anotada e reordenada para sua conveniência:
Você pode diferenciar as versões das diferenças observando o terceiro e o quatro bytes. Aparentemente, o formato também depende da capacidade de endereçamento da sua plataforma. Para mensagens v1,
__pad
é igual a0
. As mensagens v2 (e v3) usam 24 (0x18
).Para
main
,radio
esystem
registros demsg
campo é interpretado da seguinte forma ( fonte ):\0
como separador\0
como terminadorSe esta mensagem estiver truncada, o final
\0
pode estar faltando.Para o
events
registro, no entanto, omsg
campo contém os seguintes dados binários:length
, seguido peloslength
bytes que contêm uma sequência codificada em UTF8length
, seguido peloslength
nós da árvore, cada um por siAndroidEventLogType
.fonte