Освой Android играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Клиент-серверное приложение, которое предоставляет доступ к работающему эмулятору или устройству. С его помощью можно копировать файлы, устанавливать скомпилированные программные пакеты и запускать консольные команды. Используя консоль, вы можете изменять настройки журнала и взаимодействовать с базами данных SQLite, которые хранятся на устройстве. В старых версиях SDK программа находилась в папке tools, теперь находится в папке platform-tools.
Состоит из трёх компонентов: фоновой службы (демона), работающей в эмуляторе, сервиса, запущенного на компьютере разработчика, и клиентской программы (наподобие DDMS), которая связывается со службой через Сервис.
Что бы увидеть весь список параметров и команд, которые можно запустить при помощи adb, введите в командной строке следующее (или в окне студии Terminal):
adb help
Если у вас есть файл приложения APK и вы хотите его установить на эмуляторе, то используйте команду:
adb.exe install d:\program.apk
d:\program.apk - это путь к файлу, который хотите установить в эмулятор. После этого установленное приложение появится в эмуляторе. Если приложение слишком большое (несколько мегабайт), то придётся немного подождать, пока установится. Во время установки в консоли курсор будет мигать, а потом появится надпись Success, что означает успешную установку программы.
Также можно удалить ненужную программу по имени его пакета:
adb uninstall <package name>
Чтобы получить список запущенных эмуляторов и их серийные номера, используйте команду:
adb devices
Вы увидите приблизительно такую картину:
Зная имя устройства, вы можете запустить на нужном устройстве требуемую команду:
adb devices List of devices attached 0070015947d30e4b device 015d2856b8300a10 device $ adb –s 015d2856b8300a10 logcat
Перезагрузить устройство. Если устройств несколько, то нужно указать нужное устройство.
adb reboot adb -s 192.168.56.101:5555 reboot
Чтобы перезапустить сервер:
adb stop-server adb start-server
Сделать бэкап и восстановить из бэкапа можно так:
adb backup adb restore <archive name>
Для копирования файлов с устройства на компьютер и обратно используются команды pull и push.
adb push <local source file path> <device destination file path> adb pull <device source file path> <local destination file path>
Чтобы запустить оболочку (shell) на подключённом устройстве, выполните следующую команду:
adb shell
С ним часто используют команды am и pm. Это не время, а сокращение от Application manager и Package Manager. Например, можно запустить сервис через намерение:
adb shell am startservice –a <intent action>
Для просмотра всех установленных приложений (пакетов):
adb shell pm list packages
Предоставить разрешение приложению/запретить.
adb shell pm grant com.myapp.mypackagename android.permission.INTERNET adb shell pm revoke com.myapp.mypackagename android.permission.INTERNET
Узнать информацию о конкретном приложении.
adb shell dumpsys package ru.alexanderklimov.hellokitty
Получить список доступных системных свойств.
adb shell getprop
Если вы знаете свойство, то можно запросить его значение напрямую.
adb shell getprop ro.build.version.sdk
Получить список всех будильников.
adb shell dumpsys alarm
Информация о всех видимых активностях.
adb shell dumpsys activity top adb shell dumpsys activity adb shell dumpsys activity -h
Символ # обозначает приглашение оболочки (shell prompt).
Вы можете просмотреть список команд, доступных при работе в оболочке, введя следующую информацию по приглашению оболочки:
# ls /system/bin
Чтобы просмотреть список каталогов и файлов, находящихся на корневом уровне (root-level), введите в командной строке оболочки следующую команду:
ls -l
Для просмотра списка баз данных используйте команду:
ls /data/data
В этом каталоге содержится список пакетов, установленных на устройстве. Для примера исследуем пакет com.android.providers.contacts:
ls /data/data/com.android.providers.contacts/databases
Эта команда отобразит файл contacts.db и др., представляющие собой базу данных SQLite.
adb shell logcat --help logcat -t 5
Monkey ([android-sdk-path]**/platform-tools) - утилита для генерации случайных жестов на эмуляторе или устройстве, что напоминает движения глупой мартышки.
Для просмотра всех файлов базы данных *.db используйте команду:
ls -R /data/data/*/databases
Вы увидите, что в Android имеются следующие базы данных (зависимости от версии Android набор может варьироваться):
alarms.db
contacts.db
downloads.db
internal.db
settings.db
mmssms.db
telephony.db
Можно активировать команду sqlitе3 для одной из перечисленных баз данных, введя следующую информацию:
#sqlite3 /data/data/com.android.providers.contacts/databases/contacts.db
Для завершения работы с sqlite3 напишите:
sqlite> .exit
Обратите внимание: приглашение для adb - это #, а приглашение для sqlitе3 - это sqlite>.
Вы можете записать видео с экрана вашего устройства (на эмуляторе не работает):
adb shell screenrecord /sdcard/my_app.mp4
Затем можно сбросить на компьютер.
adb pull /sdcard/my_app.mp4
где /sdcard/my_app.mp4 – путь к файлу с видео (sdcard) и его имя (my_app.mp4).
Максимальное время записи равно трём минутам. Можно прервать запись (Ctrl+C).
Также вы можете управлять качеством записи, разрешением и другими параметрами с помощью следующих команд:
--size <ШИРИНАxВЫСОТА> Задает разрешение, например: 1280x720. По умолчанию этот параметр установлен в соответствии с разрешением главного экрана устройства (если поддерживается), или 1280x720 – если нет.
--bit-rate <СкоростьПотока> Задает скорость потока видео (мегабиты в секунду). По умолчанию – 4 Мб/сек. Например, для записи со скоростью 6 Мб/сек, вам нужно будет ввести следующую команду:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit <Время> Задает максимальную длительность видео в секундах. По умолчанию установлено максимальное значение – 180 сек (3 минуты).
--rotate Поворот видео на 90 градусов. Экспериментальная опция.
--verbose Отображать информацию о процессе записи в окне командной строки.
В Android Studio вы можете начать запись через кнопку записи в панели Android DDMS (Alt-6).
Если вы хотите, чтобы на видео отображались «отпечатки» касаний к экрану, включите в настройках устройства в разделе для разработчиков опцию «Показывать нажатия» или «отображать касания».
Обычно для тестирования программы на реальном устройстве использует USB-соединение. Предположим, кот уволок куда-то USB-кабель или расшатал USB-порт (ага, валите всё котов). В этом случае можно попробовать использовать Wi-Fi. Описанный ниже способ не гарантирует работоспособность на всех устройствах. Пробуйте.
Сначала соединитесь обычным способом через USB (не знаю, как вы собираетесь это сделать, если у вас утащили кабель и сломали порт). Включите Wi-Fi на компьютере и на устройстве.
Запустите команду:
adb usb
Появится ответ.
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting in USB mode
Убедитесь, что устройство присоединено.
adb devices
Ответ (у вас будет свой набор символов):
List of devices attached
05e18acf device
Меняем режим работы с USB на TCP/IP:
adb tcpip 5555
Ответ:
restarting in TCP mode port: 5555
Теперь вам надо узнать IP-адрес вашего устройства. Пример для Nexus 7: Запускаем Настройки | О планшете | Общая информация | IP-адрес. Перепишите адрес на бумажку. Запускаем команду с этим адресом (у вас будет свой адрес).
adb connect 192.168.1.32
Ответ:
connected to 192.168.1.32:5555
Теперь можете отсоединить кабель. Отдайте его коту, пусть играет.
Проверяем, что устройство по прежнему на связи.
adb devices
Ответ:
List of devices attached
192.168.1.32:5555 device
Отлично! Запускайте приложение и оно по воздуху установится на устройстве.
Учтите, что передача данных будет идти медленнее и для больших приложений будет не слишком удобно использовать данный способ. Хотя я особых тормозов не заметил для учебных примеров.
Если вам надо вернуться к старому способу, то вызываем команду:
adb usb
Указанный способ очень удобен. Недаром на баше есть такие строчки:
Слава Wi-Fi! Котэ не может его перегрызть.
А вот другому повезло меньше и на баше описана его ситуация:Звонок в техподдержку одного интернет-провайдера.
ТП(техподдержка): Добрый день! Я вас слушаю.
А (абонент): У меня тут проблема возникла.
ТП: Какая у вас проблема?
А: Я гонял кота шашкой и перерубил кабель.
Если бы абонент позаботился о настройке через Wi-Fi, то и проблемы бы не было.