MyTetra Share
Делитесь знаниями!
Команды adb
02.04.2017
08:42
Раздел: Android - Ресурсы - ADB

ADB


./gradlew installDebug && adb shell am start -n com.example.bb.myapplication/.MainActivity



(Android Debug Bridge - Отладочный мост Android) - инструмент, который устанавливается вместе с Android-SDK и позволяет управлять устройством на базе ОС Android. Работает на всех Android-устройствах, где данный функционал не был намеренно заблокирован производителем. Здесь и далее: PC - ПК, компьютер к которому подключено устройство. ADB - консольное приложение для PC, с помощью которого производится отладка Android устройств, в том числе и эмуляторов.  Работает по принципу клиент-сервер. При первом запуске ADB с любой командой создается сервер в виде системной службы (демона), которая будет прослушивать все команды, посылаемые на порт 5037. Официальная страница ADB позволяет:

  • Посмотреть какие устройства подключены и могут работать с ADB.
  • Просматривать логи.
  • Копировать файлы с/на аппарат.
  • Устанавливать/Удалять приложения.
  • Удалять (очищать) раздел data.
  • Прошивать (перезаписывать) раздел data.
  • Осуществлять различные скрипты управления.
  • Управлять некоторыми сетевыми параметрами.

Поставляется ADB в составе инструментария разработчика Андроид (Android SDK), который, в свою очередь входит в состав Android Studio.


Установка

Распаковываем архив (рекомендуется распаковывать в корень диска или в другую папку, не содержащую русских букв в пути, ). Например: c:\adb\ или a:\adb\
В итоге должна получиться папка в корне диска с содержимым:
#:\adb\adb.exe - непосредственно сам ADB, с которым будем работать.
#:\adb\AdbWinApi.dll - библиотека для работы ADB.
#:\adb\AdbWinUsbApi.dll - библиотека для работы ADB.
#:\adb\fastboot.exe - управление устройством переведенным в режим fastboot.
Инструкции по установке (Windows, OS X и Linux)
Настройки соединения, устройства. Драйверы.
Настраиваем телефон. 
Для этого в телефон->настройки->приложения->разработка помечаем Отладка USB.
При подключении USB-кабеля выбираем Только зарядка.
Проверяем соединение на компьютере.
Создаем в распакованной папке 
adb файл devices.cmd (проверяем что .cmd это расширение файла а не его имя) и пишем туда:

echo off
adb devices
pause

Запускаем созданный файл. Если все сделано правильно, будут видны строки:

D:\adb>devices.cmd
adb devices
List of devices attached
HT16GV402012 device
D:\adb>pause
Для продолжения нажмите любую клавишу . . .

Если что-то неправильно, то в списке подключенных устройств (List of devices attached) будет пусто.

Так как ADB - консольное приложение, работать в Windows с ним не очень комфортно. Есть несколько способов работы с консолью.  Например, с помощью cmd.exe (Обработчика команд Windows).  Запускается любым из следующих способов:  1. Пуск -> Выполнить -> сmd -> Ввод (Enter).  2. Сочетанием клавиш WIN+R -> сmd -> Ввод (Enter). 3. В папке Windows\System32 находим файл cmd.exe и запускаем его. Попадаем в обработчик.  Переходим в каталог ADB командой: cd c:\adb\.  Далее работаем посредством команд ADB.


Скрытые команды ADB adb -d Команда посылается только на устройство подключенное через USB. Внимание: Выдаст ошибку, если подключено больше одного устройства. adb -e Команда посылается на устройство в эмуляторе. Внимание: Выдаст ошибку, если подключено больше одного эмулятора. adb -s <серийный_номер_устройства> Команда посылается на устройство с указанным серийным номером: adb -p <имя устройства или путь> Команда посылается на устройство с указанным именем: Если ключ -p не указан, используется значение переменной ANDROID_PRODUCT_OUT.
adb devices
 Список всех подсоединенных устройств. 
adb connect <хост>[:<порт>]
 Подсоединиться к андроид хосту по протококу TCP/IP через порт 5555 (по умолчанию, если не задан). 
adb disconnect [<хост>[:<порт>]] 
Отсоединиться от андроид подключенного через TCP/IP порт 5555 (по умолчанию, если не задан). Если не задан ни один параметр, отключиться от всех активных соединений. adb push <путь на PC> <путь на андроид> Копировать файл/папку PC->девайс. adb pull <путь на андроид> [<путь на PC>] Копировать файл/папку девайс->PC.
adb sync [<каталог>]
 Копировать PC->девайс только новые файлы. Ключи: -l Не копировать, только создать список. adb shell Запуск упрощенного unix shell. Примеры использования adb emu <команда> Послать команду в консоль эмулятора adb install [-l] [-r] [-s] <название_приложения.apk> Послать приложение на устройство и установить его. Пример: adb install c:/adb/app/autostarts.apk Установить файлautostarts.apk лежащий в папке /adb/app/ на диске с: Ключи: -l Блокировка приложения -r Переустановить приложение, с сохранением данных -s Установить приложение на карту памяти adb uninstall [-k] <название_приложения.apk> Удаление приложения с устройства. Ключи: -k Не удалять сохраненные данные приложения и пользователя. adb wait-for-device Ждать подключения устройства. adb start-server Запустить службу/демон. adb kill-server Остановить службу/демон. adb get-state Получить статус:  offline Выключен. bootloader В режиме начальной загрузки. device В режиме работы. adb get-serialno Получить серийный номер. adb status-window Непрерывный опрос состояния. adb remount Перемонтировать для записи. Требуется для работы скриптов, которые изменяют данные на.
adb reboot bootloader
 Перезагрузка в режим bootloader. adb reboot recovery Перезагрузка в режим recovery. adb root Перезапуск демона с правами root adb usb Перезапуск демона, прослушивающего USB. adb tcpip <порт> Перезапуск демона, прослушивающего порт TCP.  adb ppp <tty> [параметры] Запуск службы через USB. Note: you should not automatically start a PPP connection. <tty> refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1 Параметры: defaultroute debug dump local notty usepeerdns



Команды FastBoot

FastBoot - консольное приложение для PC. Используется для действий над разделами 


fastboot devices Список присоединенных устройств в режиме fastboot.
fastboot flash <раздел> <файл> Прошивает файл .img в раздел устройства.

fastboot erase <раздел> Стереть раздел.
Разделы:
 boot, recovery, system, userdata, radio
Пример:
 fastboot erase splash1 splash1.img Прошивка загрузочного экрана Splash.

fastboot update <имя_файла.zip> Прошивка из файла имя_файла.zip

fastboot flashall Прошивка boot + recovery + system.

fastboot getvar <имя_переменной> Показать переменные bootloader.
Пример: fastboot getvar version-bootloader Получить версию bootloader.

fastboot boot <kernel> [<ramdisk>] Скачать и загрузить kernel.

fastboot flash:raw boot <kernel> [<ramdisk>] Создать bootimage и прошить его.

fastboot devices Показать список подключенных устройств.

fastboot continue Продолжить с автозагрузкой. 

fastboot reboot Перезагрузить аппарат.

f
astboot reboot-bootloader Перезагрузить девайсв режим bootloader.
Перед командами fastboot можно использовать ключи:
-w стереть данные пользователя и кэш
-s <серийный номер> Указать серийный номер устройства.
-p <product> Указать название устройства.
-c <cmdline> Переопределить kernel commandline.
-i <vendor id> Указать вручную USB vendor id.
-b <base_addr> Указать в ручную базовый адрес kernel.
-n <page size> Указать размер страниц nand. по умолчанию 2048.

Отладка

Что такое LogCat и как им пользоваться?
Чтение и запись логов (Logcat) в Linux
Как снять logcat различными способами и приложениями
adb logcat [<Ключи>] [<фильтр>] Посмотреть логи с отладочной информацией:

Команду logcat можно использовать с машины разработки
$ adb logcat 
или из удаленного shell
# logcat Каждое сообщение лога в Android имеет тэг и приоритет
Тэг – это строка указывающая компонент системы, от которого принято сообщение (например: View для системы view)
Приоритет – имеет одно из нижеследующих значений (в порядке от меньшего к большему):
V - Verbose (Низший приоритет).
D - Debug
I - Info
W - Warning
E - Error
F - Fatal
S - Silent (Наивысший приоритет, при котором ничего не выводится).

Получить список тэгов, используемых в системе, вместе с их приоритетами можно запустив logcat. В первых двух столбцах каждого из выведенных сообщений будут указаны <приоритет>/<тэг>.
Пример выводимого logcat сообщения:
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...} 

Для уменьшения вывода лога до приемлемого уровня нужно использовать выражения фильтра. Выражения фильтра позволяют указать системе нужные комбинации <тэг> и <приоритет>, остальные сообщения система не выводит.
Выражения фильтра имеют следующий формат <тэг>:<приоритет> ..., где <тэг> указывает нужный тэг, <приоритет> указывает минимальный уровень приоритета для выбранного тэга. Сообщения с выбранным тэгом и приоритетом на уровне или выше указанного записываются в лог. Можно использовать любое количество пар <тэг>:<приоритет> в одном выражении фильтра. Для разделения пар <тэг>:<приоритет> используется пробел.

Пример ниже выводит в лог все сообщения с тэгом "ActivityManager" с приоритетом "Info" или выше, и сообщения с тэгом "MyApp" и приоритетом "Debug" или выше:
adb logcat ActivityManager:I MyApp:D *:S 
Последний элемент в выражении фильтра *:S устанавливает приоритет "silent" для всех остальных тэгов, тем самым обеспечивая вывод сообщений только для "View" и "MyApp". Использование *:S – это отличный способ для вывода в лог только явно указанных фильтров (т.е. в выражении фильтра указывается "белый список" сообщений, а *:S отправляет все остальное в "черный список").

При помощи следующего выражения фильтра отображаются все сообщения с приоритетом "warning" или выше для всех тэгов:
adb logcat *:W 

Если logcat запускается на машине разработчика (не через удаленный adb shell), можно также установить значение выражения фильтра по умолчанию задав переменную окружения ANDROID_LOG_TAGS:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S" 

Следует обратить внимание что задав переменную окружения ANDROID_LOG_TAGS она не будет работать в эмуляторе/устройстве, если вы будете использовать logcat в удаленном shell или используя adb shell logcat.
Вышеописанная команда export работает в ОС *nix и не работает в Windows.

Контроль формата вывода лога

Сообщения лога в дополнение к тэгу и приоритету содержат несколько полей метаданных. Можно изменять формат вывода сообщений показывая только конкретные поля метаданных. Для этого используется параметр -v и указывается один из ниже перечисленных форматов вывода.

brief Показывать приоритет/тэг и PID процесса (формат по умолчанию).
process Показывать только PID.
tag Показывать только приоритет/тэг.
thread Показывать только процесс:поток и приоритет/тэг.
raw Показать необработанное сообщение, без полей метаданных.
time Показывать дату, время вызова, приоритет/тэг и PID процесса.
long Показывать все поля метаданных и отдельно сообщения с пустыми строками. 

При запуске 
logcat можно указать формат вывода используя параметр -v:
adb logcat [-v <format>] 
Пример, который показывает сообщения в формате thread:
adb logcat -v thread 
Нужно отметить, что можно использовать только один формат с параметром -v.

Просмотр альтернативного буфера лога

Система логов Android держит несколько кольцевых буферов для лога сообщений и не все сообщения отправляются в основной буфер. Для отображения дополнительных сообщений лога нужно запустить logcat с параметром -b. 

Таким образом можно посмотреть один из альтернативных буферов:
radio Просмотр буфера с сообщениями связанными с радио/телефоном.
events Просмотр буфера с сообщениями связанными с событиями.
main Просмотр основного буфера (по умолчанию). 

Пример ниже показывает буфер с радио и телефонными сообщениями:
adb logcat -b radio 

Просмотр stdout и stderr

По умолчанию система Android шлет вывод stdout и stderr (System.out и System.err) в /dev/null (удаляет). В процессах, которые выполняются в виртуальной машине Dalvik (Dalvik VM) может осуществляться запись копии вывода в лог файл. В этом случае система записывает сообщения в лог используя тэги stdout и stderr с приоритетом I.
Для перенаправления вывода нужно остановить эмулятор/устройство, затем выполнить команду shell setprop для включения перенаправления вывода. Пример того как это делается:
$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start 

Система сохраняет эту настройку, пока работает эмулятор/устройство. Чтобы использовать эту настройку по умолчанию в эмуляторе/устройстве, нужно добавить эту команду в
 /data/local.prop в эмуляторе/устройстве.

Список параметров команды logcat
-b <buffer> Загрузить альтернативный буфер лога для просмотра, такой как event или radio. Основной буфер используется по умолчанию. 
-c Очистить (сбросить) лог и выйти. 
-d Вывести лог на экран и выйти. 
-f <filename> Записать сообщения лога в файл <filename>. По умолчанию в stdout. 
-g Вывести размер указанного буфера лога и выйти. 
-n <count> Установить максимальное количество ротаций лога (количество хранимых сжатых фрагментов лога) <count>. По умолчанию 4. Требует параметр -r. 
-r <kbytes> Выполнять ротацию каждые <kbytes> вывода (разделять лог на фрагменты по <kbytes>). По умолчанию 16. Требует параметр -f. 
-s Устанавливает silent фильтром по умолчанию. 
-v <format> Устанавливает формат вывода сообщений лога. По умолчанию brief.

Получение logcat определённого приложения

adb shell "logcat | grep <PID>"

Без использования pid:

adb shell "logcat | grep "`pgrep <name.of.package>`""

Без использования pid(лично у меня работает):

adb shell pgrep <имя пакета>
adb shell logcat | grep <число, которое написала предыдущая программа>

Без использования adb shell(например в терминале):

logcat | grep "`pgrep <имя пакета>`"

Второй вариант при возникновении ошибок типа Android Terminal Emulator (Пост Geo_GEO #51357000)

argv @ 22.07.2016, 20:27 

logcat | grep -E "`pgrep com.estrongs.android.pop | tr \"\\n\" '|' | head -c -1`"

, где com.estrongs.android.pop - любое приложение.

 
MyTetra Share v.0.52
Яндекс индекс цитирования