Если вам нужна вменяемая информация, я рекомендую вменяемые команды :) (без обид, просто шучу). Поэтому вопрос должен гласить:
Как получить информацию журнала с устройства Android?
И теперь мы на лучшей стороне. Существует несколько подходов, которые можно использовать:
- использовать приложения для отображения (с цветовой кодировкой) информации журнала
- использовать ADB (часть Android SDK) для удаленного извлечения той же информации
- используйте ssh с удаленного компьютера (или приложения локального терминала) для получения информации непосредственно с устройства
Чтобы полностью разобраться с этой темой, требуется нечто большее, чем этот простой ответ (если вы заинтересованы, например, вы можете найти более подробную информацию на многих веб-сайтах или в книге Эндрю Хуга « Криминалистика Android: расследование, анализ и мобильная безопасность для Google Android» , где я честь переводить на немецкий. Вероятно, есть и много других источников.
Поэтому я приведу несколько примеров, чтобы вы могли начать:
Использование приложений
Вероятно, самым известным приложением в этом контексте является aLogcat , доступное бесплатно в игровом магазине (и разработчик с радостью примет ваше пожертвование для другого варианта того же приложения). Вы найдете скриншот ниже 1 . Приложение позволяет фильтровать журналы, запускать / останавливать запись сообщений журнала и даже сохранять записанные фрагменты на SD-карту - конечно, в виде простого текста, как вы и просили.
Другое приложение в этом разделе - Log Collector , который просто пытается захватить весь доступный журнал и отправить его через меню общего доступа 2 .
Android Debug Bridge (ADB)
Комплект разработчика программного обеспечения Android (SDK) включает adb
команду для различных задач. Среди многих других, он предлагает adb shell
выполнять команды на устройстве. Используя это, вы также можете собрать желаемую информацию журнала: просто введите префикс ниже команд с adb shell
.
Командная строка на устройстве
С помощью приложения терминала (например, Android Terminal Emulator или Terminal IDE ) вы можете получить доступ к журналам прямо из командной строки, локально на вашем устройстве. Немного более удобно, это можно сделать, запустив на своем устройстве ssh-сервер (например, DroidSSHd или DropBear SSH Server ) и получить к нему доступ со своего компьютера. Таким образом, вы можете работать на большом экране, изучая ваши журналы.
Команды для доступа к вашей информации журнала
Существует множество мощных команд, которые вы можете использовать для доступа к информации журнала из командной строки, и я приведу здесь лишь несколько примеров.
dmesg
Команда dmesg
извлекает журнал ядра:
$ 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
С помощью logcat
вы можете получить доступ ко многим данным журналов, но в большинстве случаев для этого потребуется root. Он имеет некоторые параметры для фильтрации информации, например, путем выбора буфера журнала для чтения -b
. Пожалуйста, прочитайте информацию, предоставленную на странице разработчиков на LogCat для деталей. Чтобы дать вам два примера: logcat -b events
перечислите события или logcat -b radio
информацию о модуле радиосвязи вашего устройства.
dumpsys и dumpstate
Две команды dumpsys
и dumpstate
дают вам подробную информацию о системе:
$ dumpsys
Currently running services:
LocationProxyService
SurfaceFlinger
accessibility
account
activity
<snip>
DUMP OF SERVICE account:
Accounts: 1
Account {name=xxxxxxx@googlemail.com, 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>
отчет об ошибке
И если вам лень вспоминать их все, просто используйте bugreport
команду, которая вызывает все вышеперечисленное и связывает ее для красивого, хм, сообщения об ошибках для разработчика ...
Конечно, вы можете перенаправить вывод всех этих команд в файл для копирования на ваш компьютер, и в большинстве случаев вам следует это сделать - так как ваш экранный буфер будет слишком мал, чтобы справиться со всем этим: bugreport > /mnt/sdcard/bugreport.txt
это будет один пример для эта часть.
$ dmesg
илиdmsg
? Должна быть опечатка в одном из них :)adb shell pm grant com.nolanlawson.logcat android.permission.READ_LOGS
Для разработчиков (или других заинтересованных сторон), которым необходимо проанализировать этот необработанный файл, вот несколько ресурсов:
android_logger_list_read()
сбор записей журнала: https://android.googlesource.com/platform/system/core/+/master/logcat/logcat.cppФактический формат формата журнала детализирован в:
Копия соответствующих частей, слегка аннотированная и переупорядоченная для вашего удобства:
Различия между версиями можно различить, взглянув на третий и четыре байта. Формат, по-видимому, также зависит от порядкового номера вашей платформы. Для сообщений v1
__pad
равно0
. сообщения v2 (и v3) используют 24 (0x18
).Для получения
main
,radio
иsystem
журналыmsg
поле интерпретируется следующим образом ( источник ):\0
как разделитель\0
как терминаторЕсли это сообщение обрезано, трейлинг
\0
может отсутствовать.Для
events
журнала, однако,msg
поле содержит следующие двоичные данные:length
, за которым следуютlength
байты, содержащие строку в кодировке UTF8length
, за которым следуютlength
узлы дерева, каждый из которых имеет свои собственныеAndroidEventLogType
.источник