Мобильность. Android и секреты работы с Shell. Часть 2

Что такое Shell и как с ним работать

Консоль (Shell) или Интерфейс командной строки (Command line interface, CLI) — разновидность текстового интерфейса между человеком и компьютером, в котором инструкции компьютеру даются в основном путём ввода с клавиатуры текстовых строк (команд). Википедия
Для доступа в консоль Android нам понадобится ADB, настройку которого мы рассматривали в первой части. Альтернативный способ доступа в консоль — установка любого эмулятора терминала на устройство.
Для работы с консолью вам не понадобятся права администратора на устройстве — все команды описанные в данной статье можно выполнять на устройстве из коробки, лишь включив на нем режим отладки.
В статье напротив некоторых команд будут стоять пометки: (5.0) — они будут указывать на минимальную версию Android с которой доступна та или иная команда. Минимальная рассматриваемая версия — Android 4.1. Если что-то не работает на версиях ниже — то скорее всего там это еще не было реализовано.
Для запуска Shell команд через ADB можно выбрать два пути:

  • Вход в CLI устройства и выполнение всех команд в нем. Для этого нам достаточно в консоли ввести adb shell или adb -s <идентификатор устройства> shell, после чего можно вводить все команды описанные ниже. В данном случае при попытке перенаправить вывод в файл, например echo 1 > /sdcard/1.txt файл будет создаваться на устройстве.
  • Выполнение команд без входа в CLI устройства. В таком случае все ваши команды будут выглядеть следующим образом: adb shell <команда>, adb -s <идентификатор устройства> shell <команда>

Команды

Скриншот экрана

screencap /sdcard/path/to/your/file.png
screencap -p /sdcard/path/to/your/file

Команда принимает в качестве параметра путь к файлу на телефоне куда будет сохранен скриншот экрана. Скриншот делается в режиме реального времени. После создания скриншота — вы можете получить доступ к нему через файловый менеджер в телефоне. Альтернативный вариант — выполнить команду adb pull и сохранить файл на компьютер.
Пример однострочной команды для создания скриншота и сохранения его на компьютер:

adb shell screencap /sdcard/1.png && adb pull /sdcard/1.png test.png

На выходе вы получите файл test.png с вашим текущим изображением на экране

Запись видео с экрана устройства (4.2)

screenrecord /sdcard/path/to/your/file.mp4
screenrecord --size=640x480 --bit-rate=4M --bugreport --time-limit=10 --verbose /sdcard/film.mp4

Команда принимает в качестве параметра путь к файлу на телефоне куда будет сохранено видео записи экрана. Запись начинается после запуска команды, для того чтобы остановить запись видео — необходимо нажать CTRL+C. Максимальное время видео — 1800 секунд. Так же через параметры можно задать:

  • --size=640x480 — размер видео — соотношение сторон в пикселях. По-умолчанию: 1280×720
  • --bit-rate=4M — бит-рейт. По-умолчанию: 20M
  • --bugreport — добавить дополнительную информацию на видео (полезно для баг репортов). В том числе время.
  • --time-limit=10 — ограничение по времени в секундах.
  • --verbose — вывод дополнительной информации о ходе записи видео.

Список параметров актуален для Android Oreo (8.*). Возможно, часть параметров будет недоступна на более ранних версиях Android.
Для того, чтобы сохранить видео на компьютер — так же придется воспользоваться командой adb pull

Работа с экраном устройства

wm size
wm size 720x1280
wm size reset
wm density
wm density 120
wm density reset

Когда-то наступает момент, что вам не хватает ваших устройств — у одного слишком большое разрешение, у другого слишком маленькое. Представленные выше команды помогут сделать из телефона планшет и наоборот. Чем выше разрешение — тем меньше картинка на экране. Чем выше значение плотности — тем крупнее элементы на экране. Для того, чтобы все системные элементы приняли заданные размеры — необходимо перезагружать устройство. Иначе будут лишние артефакты :(.
Список основных разрешений экранов устройств:

  • HVGA (640 x 240 или 320 x 480)
  • VGA (640 x 480)
  • WVGA (800 x 480)
  • qHD (960 x 540)
  • HDV 720p (HD 720p) (1280 x 720)
  • WXGA (1280 x 768)
  • WXGA+ (1440 x 900)
  • FullHD (1920 x 1080)

Остальные разрешения сильно зависят от конкретного производителя устройства — с появлением «вытянутых» экранов разрешения сильно разнятся.

Работа с Package Manager

Установка приложения

pm install /path/to/package.apk

Устанавливает пакет apk с устройства. Имеет такой же список параметров, как и adb install

Удаление приложения

pm uninstall package.name

Удаляет приложение с устройства по его имени пакета

Очистка данных приложения

pm clear package.name

Очищает все данные приложения — имитация чистой установки

Получение списка приложений

pm list packages - Android <=8.0
cmd packages list packages - Android 8.1>=

Выводит список всех установленных пакетов на устройстве. После команды можно так же указывать фильтрующий параметр — выводиться будут только пакеты с соответствующим именем пакета.
Основные дополнительные параметры:

  • -3 — только сторонние пакеты
  • -s — только системные пакеты
  • -d — только отключенные пакеты
  • -e — только включенные пакеты
  • -f — выводит информацию о пути к файлу apk

Дамп системы

dumpsys — полный дамп всех данных о системе (рекомендую сразу сохранять в файл dumpsys > /sdcard/file.txt)
Примеры дампа конкретных данных о системе:

dumpsys alarm - данные о сервисах которые будят телефон
dumpsys activity - информация о всех недавних activity
dumpsys activity package.name - информация об activity конкретного пакета
dumpsys battery
dumpsys batterystats
dumpsys cpuinfo - статистика процессора
dumpsys display - информация о дисплее устройства
dumpsys gfxinfo - информация по использованию графики
dumpsys gfxinfo package.name - информация по использованию графики конкретным приложением
dumpsys location - статистика по использованию сервисов геопозиционирования
dumpsys meminfo - статистика по использованию оперативной памяти
dumpsys meminfo package.name - статистика по RAM для конкретного приложения
dumpsys package package.name - информация по конкретному пакету в системе
dumpsys package package.name | grep versionName - версия конкретного пакета
dumpsys procstats - статистика процессов
dumpsys procstats package.name - статистика процессов для конкретного пакета
dumpsys wifi - информация по wifi
dumpsys wifiscanner - статистика по сканированию сетей wifi

Другие полезные команды

Т.к. Android ведет свое начало от Linux-подобных систем, в его консоли так же есть большое количество полезных команд:

  • df — информация о разделах на устройстве
  • cat /path/to/file — вывести в консоль содержимое текстового файла
  • cp first/path/file second/file — скопировать файл из одного места, в другое
  • mv first/path/file second/file — перенести файл из одного места в другое (так же его можно и переименовать)
  • cmp first.file second.file — сравнить два файла. Можно применять как для текстовых, так и для бинарных файлов. Утилита не очень удобна, для сравнения больших файлов, но поможет найти какие-то мелкие изменения, если они присутствуют
  • ifconfig — выводит информацию о доступных сетевых интерфейсах
  • ls — выводит список файлов в директории. Можно добавить пусть к папке в качестве параметра и посмотреть файлы в ней
  • kill — завершить процесс под номером переданным первым параметром (требует ROOT прав)
  • mkdir directory — создать указанную директорию в текущей папке, или в любой другой (нужно указать полный путь до новой директории)
  • rm -rf file — удалить файл/файлы в директории рекурсивно и принудительно
  • pwd — узнать текущий путь где вы находитесь