Запуск приложений через консоль android
Привет! Меня давно интересовал вопрос, насколько Android есть Linux и можно ли в нем запускать терминальные (консольные) приложения, минуя песочницу под названием Dalvik.
Для этого я освоил способ создания приложений на языке C/C++ для Android с использованием Android NDK. NDK позволяет создавать как библиотеки с native-методами (C/C++) для Java, так и исполняемые приложения для запуска из командной строки.
Здесь я расскажу, как сделать первые шаги быстро и просто. Заранее оговорюсь, что Android NDK для Windows — это неудобно, поэтому далее рассматриваются OSX и Linux. Виртуалка c Ubuntu в помощь!
Написанное рассчитано на тех, кто уже пробовал следующие действия:
1. Создавал hello world на C/C++;
2. Устанавливал и пробовал ADB, SDK.
3. Включал режим отладки на Android-смартфоне (Debug mode).
Следующим шагом необходимо поставить на машину NDK и настроить переменные окружения. Рекомендую ставить не самую свежую версию ndk, так как с ней бывают глюки. Сам поставил ndk-r10d. Почитать инструкции здесь: Ubuntu and SDK | NDK Getting Started | Tools, ADB, SDK, NDK для mac.
Теперь рассмотрим создание простейшего консольного сумматора двух целых чисел. Создадим директорию simpleApp и поместим в ней поддиректорию jni. В jni необходимо создать файл с исходным кодом нашего приложения simpleApp.c со следующим содержимым:
Затем в этой же директории необходимо создать файл с настройками компиляции Android.mk. Подробное описание этого файла доступно здесь доки по Android.mk, но я приведу лишь минимум необходимого содержания для компиляции:
После подготовки simppleApp.c и Android.mk входим в директорию simpleApp через terminal и запускаем команду ndk-build:
Теперь в директории simpleApp появилась папка /libs/. В ней должны появиться поддиректории с исполняемыми файлами для разных платформ. Возьмем, например, файл для платформы arm из директории armeabi (подойдет для многих распространенных аппаратов) и скопируем его в реальный телефон в директорию /data/local/tmp с помощью adb и команды push:
Теперь заходим в устройство через терминал, переходим в директорию с нашим приложением simpleApp и запускаем его:
Отлично! Консольное приложение заработало, запросило ввод чисел и выдало правильный результат! Надеюсь, мои заметки помогут кому-то на первых шагах освоения инструмента Android NDK.
Android основан на ядре Linux, включает в себя набор стандартных UNIX-команд и простой шелл sh. Все это значит, что мы можем не только использовать командную строку для выполнения низкоуровневых операций, но и писать шелл-скрипты, которые будут выполнять функции, недоступные из графического интерфейса. В этой статье мы поговорим о том, что с их помощью можно сделать и зачем все это нужно.
Для прошлого номера журнала я написал статью о Tasker — системе, которая позволяет автоматизировать работу Android и заменить сотни сторонних приложений. К сожалению, Tasker ограничен высокоуровневыми функциями Android и не позволяет выполнять такие низкоуровневые операции, как монтирование файловых систем, изменение параметров ядра, системных переменных или запуск демонов. Зато все это можно сделать с помощью скриптов.
Сразу оговорюсь, что в этой статье речь пойдет о шелл-скриптах в традиционном для Linux понимании, без использования инструментов вроде SL4A, QPython или Roboto. Главное назначение таких скриптов — изменение поведения системы, параметров ядра, работа с демонами (ADB, например) и тому подобное. Скрипты могут стартовать на этапе загрузки ОС, установки новой прошивки, после тапа по кнопке или же по традиции — из терминала.
В статье я расскажу, как писать такие скрипты, как заставить их стартовать автоматически, привязывать к определенному системному событию. В качестве бонуса также объясню, как заставить консоль восстановления (recovery) выполнить необходимые тебе действия перед установкой или сразу после установки новой прошивки. Начинаем.
Установка программ
ADB можно использовать для установки приложений без необходимости копировать их на смартфон. Достаточно выполнить такую команду:
В команду также можно добавить дополнительные ключи. Полезными будут -е — переустановить приложение с сохранением данных и -d — установить версию меньше текущей.
Программы можно и удалять, но для этого нужно знать название пакета (как узнать, расскажу чуть позже). На примере игры Angry Birds Seasons команда будет выглядеть так:
Список устройств
Первым делом, посмотрим список подключенных устройств к нашему компьютеру. Для этого используется команда devices:
Если к системе подключено несколько смартфонов, то по умолчанию действия будут применяться к первому. Но вы можете задать нужное имя устройства с помощью опции -s. Например:
adb -s 0123456789ABCDEF logcat
Также указать имя устройства, к которому необходимо применять команды программы adb можно с помощью переменной ANDROID_SERIAL:
Тогда все команды adb будут применяться к устройству, указанному в этой переменной.
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
Существует множество инструментов для работы с подключенным с помощью USB-кабеля или Wi-Fi смартфоном. Особо развитые инструменты позволяют перемещать файлы, устанавливать и удалять софт, просматривать контакты, делать скриншоты экрана и даже отправлять СМС, однако ни один графический инструмент не сравнится с мощью, которую может дать консоль Android. В этой статье мы поговорим об ADB (Android Debug Bridge) — стандартном инструменте для отладки и работы с консолью Android с компа.
Описанные в статье команды можно выполнять непосредственно на устройстве, скачав из маркета эмулятор терминала, но удобнее это делать, конечно же, с компа через adb.
Запуск скриптов до и после установки прошивки
Почти каждый, кто устанавливает на свой гаджет стороннюю прошивку, также ставит поверх нее пакет с фирменными приложениями Google (gapps), который включает в себя маркет, YouTube, Gmail и другой софт. Каждый раз, когда происходит обновление прошивки, раздел /system, содержащий ее и gapps, полностью стирается, но приложения Google всегда остаются на месте. Это происходит потому, что, кроме всего прочего, gapps содержит в своем составе специальный скрипт, который размещается в каталоге /system/addon.d/ и запускается консолью восстановления до и после установки прошивки. Этот скрипт делает бэкап и восстановление приложений Google.
Мы можем использовать эту возможность для выполнения наших собственных действий до и после установки прошивки. Вот так, например, выглядит мой скрипт восстановления, который ничего не бэкапит, но подчищает прошивку от мусора сразу после ее установки:
Скрипт удаляет рингтоны, уведомления, движок синтеза речи и несколько приложений. Все эти действия запускаются в ответ на передачу скрипту опции командной строки restore (это делает консоль восстановления после установки прошивки), однако также предусмотрены и варианты обработки таких опций, как backup, pre-backup, post-backup, pre-restore и post-restore. Здесь это просто заглушки, но если бы мы захотели сделать бэкап некоторых файлов и приложений перед установкой прошивки, мы могли бы добавить их в блок backup, как это сделано в скрипте /system/addon.d/70-gapps.sh:
Этот кусок скрипта прекрасно иллюстрирует, как сделать бэкап файлов. Ключевые элементы здесь: функция listfiles, которая при запуске выводит листинг файлов, и функция backupfile, которая является частью консоли восстановления (определена в файле /tmp/backuptool.functions). Она делает бэкап файлов в цикле.
Содержимое /system/addon.d/ в CyanogenMod 11 на Motorola Defy
Скрипт бэкапа приложений Google
По словам разработчика mksh, изначально пользовательские версии Android-смартфонов вообще не должны были иметь в своем составе шелл, но после выпуска смартфона для разработчиков HTC (T-Mobile) G1 он фактически стал стандартной частью системы.
Версии Android 2.3 и ниже вместо mksh использовали минималистичный шелл ash, который входит в базовый комплект всех BSD-систем.
Чтобы получить одни и те же скрипты на всех устройствах, можно использовать приложение DropSync или FolderSync (автоматическая синхронизация через Dropbox).
Первый пример
Теперь давайте попробуем написать первый скрипт. Делать это лучше на компе, а еще лучше в Linux или редакторе, который умеет создавать текстовые файлы без символа возврата каретки (который при открытии в Android будет выглядеть как ^M в конце каждой строки). Наш первый скрипт будет состоять всего из двух строк, которые делают бэкап всех установленных приложений на карту памяти. Его код (требует BusyBox):
Сохраняем (пусть он называется apk_backup.sh) и перекидываем на смартфон с помощью ADB:
Теперь его нужно запустить. Проще всего сделать это с помощью все того же ADB:
Примерно таким же образом скрипт можно запустить из консоли на самом смартфоне/планшете:
Само собой, такой способ не очень удобен. Поэтому нам нужен какой-то быстрый способ запуска скрипта. Наиболее удобное из найденных мной решений — это приложение QuickTerminal. Устанавливаем, запускаем, переходим на вкладку Quick Command, нажимаем кнопку «+», вбиваем имя (произвольное) и команду (sh /sdcard/apk_backup.sh), в поле Output Type выбираем либо Dialog Output, либо Nothing. В первом случае во время выполнения скрипта на экране появится окно с результатом, во втором все пройдет в фоне. Кому что удобнее. Далее сохраняем и получаем кнопку, с помощью которой скрипт можно будет запустить быстро и легко.
Теперь напишем скрипт, который восстановит наш бэкап:
В нем мы задействовали команду pm с опцией install и флагами -t и -r, которые заставляют систему устанавливать приложения, даже если они подписаны тестовым ключом или уже установлены. Также можно использовать флаг -s, который принуждает приложения к установке на карту памяти (если такая возможность есть), или -f — установка во внутреннюю память устройства.
Почти все команды Android имеют подробную справку
Имея рут, можно даже сделать бэкап настроек всех приложений с помощью копирования и архивации каталога /data/data/, однако восстановить его будет очень проблематично, так как в Android каждое приложение исполняется от имени созданного специально для него Linux-юзера и хранит настройки внутри каталога, принадлежащего этому пользователю. Проблема здесь в том, что идентификатор Linux-юзера для каждого приложения генерируется динамически, поэтому после восстановления бэкапа в заново установленной системе идентификаторы не будут совпадать и приложения не смогут прочитать свои настройки. Придется вручную выяснять ID юзера для каждого приложения и менять права доступа на каталоги с данными.
С другой стороны, мы можем использовать встроенный в Android Backup Manager, позволяющий сторонним приложениям использовать возможности системы для бэкапа и восстановления приложений и их данных. Управлять им можно из консоли (а значит, и с помощью скриптов), но сам по себе он никакого бэкапа не производит, а возлагает эту работу на сторонние приложения. Helium — одно из таких приложений. Если установить и настроить его, операцию бэкапа и восстановления можно будет заскриптовать. Например, следующий простой скрипт сделает резервную копию всех сторонних приложений:
Конструкция $ здесь нужна, чтобы обрезать слово «packages:», которое pm добавляет в начало имени каждого пакета. Чтобы восстановить бэкап, можно использовать либо тот же Helium, либо команду bmgr:
Резервное копирование
Вы можете создать резервную копию своей прошивки и всех системных файлов Android для того, чтобы ее потом очень просто и быстро восстановить. Для этого используется команда backup. Сначала рассмотрим ее синтаксис:
$ adb backup опции пакеты
Опции указывают какие данные нужно копировать. Каждая опция может иметь приставку no, которая означает, что эти данные копировать не нужно. Рассмотрим основные опции:
- -apk - сохранять apk файлы для программ, по умолчанию отключено;
- -obb - сохранять расширения установленные расширения apk файлов в формате obb. По умолчанию отключено;
- -shared - сохранять данные приложений из SD карты или памяти телефона, отключено;
- -all - сохранить все установленные приложения;
- -system - сохранить системные приложения, эти приложения уже входят в список all.
Последний параметр позволяет указать какие приложения нужно сохранять. Если указана опция all, то, естественно, что этот параметр не нужен. Таким образом, команда для резервного копирования системы будет выглядеть вот так:
adb backup -apk -obb -shared -all -f backup.ab
С помощью опции -f мы задаем имя файла архива, он будет сохранен в текущей папке. Если его не задать, то имя по умолчанию будет backup.ab. Вам нужно будет подтвердить создание копии на телефоне, можно ввести пароль для шифрования:
Для восстановления из резервной копии используйте команду restore. Ей достаточно передать адрес файла:
adb restore android.ab
Полезные команды ADB
Перед тем как мы сможем управлять устройством, необходимо еще кое-что сделать. Команде adb требуется специальная служба для связи с Android необходимо ее запустить. Для этого используйте такую команду:
После завершения работы вы можете отключить службу чтобы она не потребляла лишние ресурсы:
Теперь можно выполнять adb команды для android.
Консоль в консоли
Наряду с упомянутой консолью, которая является DOS-консолью под Windows, в Android существует и своя. Она вызывается через adb shell и представляет собой по сути стандартную Linux-консоль, но с неполным набором команд, расширить который можно, установив из маркета BusyBox. Использовать эту консоль можно двумя способами. В интерактивном режиме она запускается командой
В консоли появляется знак $ (далее по тексту этот знак будет означать необходимость ввода предварительной команды adb shell), и после этого можно вводить серию команд, получая после каждой отклик. Второй способ — если необходимо ввести только одну команду, можно писать ее подряд за adb shell.
В шелле работают стандартные команды для копирования, перемещения и удаления файлов: cp, mv и rm. Можно менять каталоги (cd) и смотреть их содержимое (ls). Кроме стандартных Linux-команд, о которых можно узнать из любого справочника, в Android есть несколько своих специализированных инструментов, но, чтобы использовать некоторые из них, придется получить на смартфоне права root, а после запуска консоли выполнять команду su:
Вывод свободного пространства на устройстве командой adb shell df
Пример работы команды ls для вывода информации о разделах
Консоль Android
С помощью команды shell вы можете войти в консоль Android и выполнять там необходимые действия. Здесь доступно большинство привычных нам команд linux. Мы подробно рассматривали все доступные команды в статье команды Android Terminal Emulator. Сейчас же поговорим про саму команду shell и приведем несколько примеров. Чтобы войти в консоль наберите:
Дальше откроется командная строка adb на Android. Если вам не нужна консоль, а нужно только выполнить команду и вернуть результат, то вы можете передать команду сразу после shell:
adb shell ls /system
Например, с помощью такой команды вы можете сделать снимок экрана:
adb shell screencap -p /sdcard/screenshot.jpg
А так можно снять экран смартфона на видео:
adb shell screenrecord /sdcard/video.mp4
Перезагрузка устройства
В утилиты adb есть даже команды для перезагрузки устройства. Можно просто перезагрузить смартфон с помощью команды reboot:
Можно загрузиться в режим recovery:
adb reboot recovery
Или в режим настройки загрузчика:
adb reboot bootloader
Загрузка файла с устройства
Таким же образом вы можете скачать файл с устройства. Синтаксис команды pull:
$ adb push /адрес/удаленного/файла /адрес/локального/файла
Например, скопируем отправленный файл обратно:
adb pull /sdcard/file ~/file1
Вместо выводов
Для кого-то все описанное в статье может показаться несколько надуманным. Дескать, все это можно сделать с помощью стандартного софта и Tasker. Но зачем использовать тяжелый Java-софт там, где нужное действие можно выполнить с помощью простенького скрипта, который не занимает лишней памяти и может быть легко перенесен на другое устройство? Скрипты удобны, просты, быстро отрабатывают и дают возможность тонкой настройки под себя.
Продвинутый уровень
В одной из своих статей я показывал, как можно доставать информацию из баз данных различных приложений. Ну а теперь посмотрим, как проделать это прямо из консоли, не качая базы на комп и не устанавливая на устройство просмотрщики баз. Для этого используется команда sqlite3. Выведем на экран историю браузера Chrome:
Чтобы база читалась, необходимо выгрузить браузер из работающих приложений. Прервать выполнение скрипта sqlite можно, нажав Ctrl + Z, а выйти — командой .quit. Если в ответ на команду ты получишь ошибку /system/bin/sh: sqlite3: not found, значит, на смартфоне нет sqlite3 и ее придется скачать, закинуть в /system/bin и дать файлу все права. Я использую sqlite3, который вытащил когда-то из Titanium Backup.
История браузера Chrome
Также с помощью sqlite3 можно выдернуть все контакты с телефона. Для этого в консоли на компе должен использоваться шрифт Lucida Console и перед началом выполнения команд необходимо перевести кодировку на UTF-8. Иначе вместо русских букв будут отображаться непонятные символы. Сами команды выглядят так:
Если все сделано правильно, то в консоли ты увидишь таблицу с порядковым номером записи, номером телефона и контактами, отсортированными по имени. Для контактов с более одного номера будет несколько записей подряд.
Вывод контактов из базы contacts2.db
Можно вывести данные не на экран, а сразу в текстовый файл. Для этого команды нужно изменить:
Альтернативный способ вывода контактов в файл — команда, требующая установленного BusyBox:
Бэкап приложений
В Android есть встроенные функции бэкапа, которые также можно запустить с помощью командной строки. Для этого используется команда adb backup и набор опций:
- -f указывает имя создаваемого файла и его расположение на компе. При отсутствии ключа будет создан файл backup.ab в текущем каталоге;
- -apk|-noapk указывает, включать ли в бэкап только данные приложения или сам .apk тоже (по умолчанию не включает);
- -obb|-noobb указывает, включать ли в бэкап расширения .obb для приложений (по умолчанию не включает);
- -shared|-noshared указывает, включать ли в бэкап содержимое приложения на SD-карте (по умолчанию не включает);
- -all указывает на необходимость бэкапа всех установленных приложений;
- -system|-nosystem указывает, включать ли в бэкап системные приложения (по умолчанию включает);
Если мы хотим создать бэкап всех несистемных прог, включая сами .apk, в определенное место, то команда будет выглядеть так:
После ввода необходимо подтвердить начало выполнения бэкапа на самом устройстве. Для восстановления полученного бэкапа нужно выполнить соответствующую команду:
Процесс бэкапа
Просмотр журналов
Самое частое действие, которое приходится делать разработчикам и тестировщикам мобильных приложений в поиске ошибок - это просмотр журналов системы и приложений. Для этого применяется команда logcat:
adb logcat -d > ~/android.log
С помощью опции -c можно очистить все логи на устройстве:
adb logcat com android.settings
adb logcat com android.settings:E
Или выведем только ошибки для всей системы целиком:
Основы работы с ADB
Для начала работы с ADB его следует активировать на устройстве и установить утилиту adb и драйверы на комп. Первая задача выполняется с помощью включения «Отладки по USB» в пункте настроек «Для разработчиков» (если этот пункт скрыт, нажми семь раз на номер сборки в меню «О телефоне»).
Для установки ADB на комп качаем Adb Kit и распаковываем в любую папку (рекомендую использовать названия папок без русских символов). Также скачиваем и устанавливаем драйверы ADB.
Работать с adb нужно из командной строки. Нажимаем Win + R и вводим cmd, далее переходим в папку, в которой лежит adb. Для моей папки команда будет следующей:
Чтобы не проделывать все эти манипуляции каждый раз, можно добавить нужную папку в переменную Path. Для этого необходимо зайти в «Панель управления -> Система -> Дополнительные параметры системы -> Переменные среды», найти переменную Path и добавить в конец строки, через точку с запятой, путь до папки с adb. Теперь после запуска консоли можно сразу вводить необходимые команды.
Добавление adb в переменную Path
Проверим наше подключение к телефону с помощью следующей команды (она должна вывести список подключенных устройств):
С ADB можно работать через Wi-Fi. Для этого нужны права root и приложение WiFi ADB. Запускаем приложение, жмем переключатель и подсоединяемся к смартфону с помощью команды connect и показанного приложением IP-адреса:
Далее работа с ADB ничем не отличается.
Скопировать вывод консоли после выделения мышкой, а также вставить скопированную команду или имя файла в консоль можно правой кнопкой мыши. Включается в свойствах консоли.
Удаление приложений
Удалить приложение тоже очень просто. Для этого достаточно передать имя его пакета команде uninstall. Например, удалим браузер Firefox:
adb uninstall org.mozilla.firefox
Автозапуск
Другой популярный способ автозапуска — это использование средств автоматического исполнения скриптов при загрузке в сторонних прошивках. Сегодня почти все сколько-нибудь известные кастомные прошивки умеют стартовать скрипты из каталога /system/etc/init.d/, а в стоке такую функциональность можно получить с помощью приложения Universal init.d из маркета. С последним, однако, надо быть осторожным, так как оно запускает скрипты не на раннем этапе загрузки, как это происходит в том же CyanogenMod, а уже после полной загрузки системы.
Итак, что мы можем поместить в автозагрузку? Например, скрипт запуска демона ADB в сетевом режиме:
Для подключения к нему с ПК набираем такую команду:
Также мы можем применить некоторые оптимизации подсистемы виртуальной памяти:
Ну или подогнать механизм lowmemorykiller (автоматическое убийство фоновых приложений при нехватке памяти) под наши нужды:
Ну и конечно же, автоматический выбор планировщика процессов:
Все это можно сделать с помощью специализированного софта, но зачем загружать систему дополнительным ПО, которое еще и будет висеть в фоне, когда можно обойтись несколькими простыми скриптами?
Как запустить скрипт с помощью Tasker
Системные утилиты
Кратко остановлюсь на нескольких полезных командах (работоспособность некоторых, однако, может зависеть от версии прошивки и модели телефона).
Изменение DPI. Не требует root и работает на Android 5.0+. Стандартное значение для Nexus 5 — 480. При значении 420 на рабочем столе стокового лаунчера помещается пять иконок в ряд вместо четырех:
Подключение /system в режиме записи. Для части команд, которые меняют системные файлы, необходимо сначала перемонтировать раздел /system на запись. Это необходимо в том числе при удалении системных приложений. Перемонтирование выполняется следующей командой:
Мягкая перезагрузка:
Перевод смартфона в режим энергосбережения Doze (Android M+):
. повторяем действия, пока не увидим idle.
Батарейка в процентах (Android 4.4+):
Выводы
Как видишь, с помощью ADB можно сделать много интересного. И чем больше пользуешься консолью, тем быстрее можно выполнить некоторые действия без установки дополнительного софта на устройство. Надеюсь, данная статья помогла разобраться с ADB и подтолкнула к чтению документации и поиску новых полезных команд.
Если у вас есть смартфон на Android и вы знакомы с Linux то наверное хоть раз интересовались как использовать терминал в Android. Как вы знаете операционная система Android основана на ядре Linux, а это значит что здесь есть командная оболочка и в ней доступны множество стандартных команд Linux. По умолчанию стандартной утилиты терминала в Android нет. Получить к нему доступ можно несколькими путями:
- первый - скачать приложение Android Terminal Emulator с GooglePlay.
- второй подключиться к смартфону с компьютера с помощью отладчика adb.
Но наша статья не об этом, сегодняшняя тема: команды в Aandroid Terminal Emulator или точнее команды терминала Android.
В интернете есть много статей на эту тему но во всех них чего-то не хватает, описана пара специфичных команд и на этом все, а хочется полный список, включая команды Linux, тогда я и решил написать эту статью. Я не говорю что я опишу все команды, но постараюсь охватить большинство. Здесь приведено лишь короткое описание о некоторых командах Android я расскажу подробнее в следующих статьях, а о командах Linux можно найти подробную информацию в интернете.
Теперь об обозначениях — для некоторых команд необходимы права root, перед ними я буду ставить знак @.
Начнем. Команды терминала это ничто иное как небольшие консольные утилиты, большинство системных утилит находиться в папке /system/bin и еще несколько в /vendor/bin. Те что в vendor мы трогать не будем. Чтобы было удобнее расположу все команды по алфавиту.
adb - Отладчик андроид. Поскольку Android это все же Linux, к нему по USB можно подключать другие устройства в том числе смартфоны, adb позволяет ими управлять и дает доступ к их терминалу. описание его команд и возможностей тянет на целую статью, я опишу все в одной из следующих статей.
am - Менеджер окон (Action Manager), с помощью него можно запустить и остановить любое приложение или сервис. Например запуск приложения настройки:
am start -n com.android.settings/.Settings
badblocks — проверка флешки на наличие битых секторов:
Результат можно записать в файл:
badblocks /dev/block/mmcblk0 > /sdcard/badblocks
или вывести на экран:
badblocks -v /dev/block/mmcblk0
bmgr — управление резервным копированием Android.
cat — консольная утилита для просмотра содержимого файла.
chmod — аналогична команде Linux, меняет права доступа файла, доступен только восьмеричный формат записи.
Например дать все права (чтение, запись, выполнение):
chmod 777 /sdcard/file
chown — меняет владельца файла в Linux, Например:
chown root /sdcard/file
cmp — сравнивает два файлы
cmp /sdcard/file1 /sdcard/file2
cp — копирует файл, из источника(параметр 1) в приемник(параметр 2).
cp /sdcard/file1 /sdcard1/
Подробнее о cp можно почитать в статье копирование файлов в linux
date — показать текущую дату в системе.
Sat Nov 14 13:44:56 EET 2015
dd — создать образ диска, Параметры if= файл устройства диска, of=файл для записи
dd /dev/block/mmcblk0 /sdcard/img.iso
Будет создан образ флешки mmcblk0.
df — анализ свободного места на диске. Например:
df -h /dev/block/mmcblk1
Filesystem Size Used Free Blksize
/mnt/secure 484.5M 0.0K 484.5M 4096
/mnt/asec 484.5M 0.0K 484.5M 4096
/mnt/obb 484.5M 0.0K 484.5M 4096
/system 1.4G 971.7M 435.8M 4096
du — просмотр размера файла.
@ ext4_resize изменение размера раздела с файловой системой ext4.
@ fsck_msdos — проверка флешки на ошибки.
grep — утилита для фильтрации текста. Например вывести только строки содержащие terminal:
cat ~/sdcard/file | grep terminal
@ ifconfig — просмотр и управление сетевыми устройствами. Например просмотр информации о карте wifi:
Или отключение wifi:
ifconfig wlan0 down
Узнать список сетевых устройств можно командой:
iptables — управление настройками фаервола iptables, это очень обширная тема которой мы касаться не будем.
kill — уничтожить процесс по его PID.
Чтобы узнать pid можно использовать утилиту ps.
ln — создать ссылку на файл или папку, если указан параметр -s — символическую ссылку.
ln /sdcard/file /sdcard/file2
log — записать строку в лог системы.
logcut — просмотр лога системы в реальном времени.
ls — просмотр списка файлов и папок в директории:
lsmod — просмотр загруженных модулей ядра
lsof — просмотр открытых в системе файлов.
make_ext4fs — форматировать флешку в файловую систему ext4
md5 — подсчитать контрольную суму файла.
mkdir — создать папку, в текущем каталоге.
make2fs — форматировать флешку в файловую систему ext2
mount — примонтировать диск, образ или папку. Например:
mount -t ext2 /dev/block/mmcblk1p1 /mnt/sdcard
Подробнее о монтировании можно почитать в моей статье: Монтирование в Android
mv — переместить файл, аналогично cp
netcfg — просмотр информации об сетевых соединениях.
notify — утилита для слежения за изменениями в файловой системы с помощью подсистемы ядра inotify.
ping — известная утилита для проверки доступности сетевого узла.
pm — пакетный менеджер android, позволяет, устанавливать, удалять и просматривать установленные пакеты.
ps — просмотр всех запущенных процессов и информации о них.
USER PID PPID VSIZE RSS WCHAN PC NAME
root 1 0 1000 848 c0106ef8 0001bfb4 S /init
root 2 0 0 0 c006e038 00000000 S kthreadd
root 3 2 0 0 c0057a54 00000000 S ksoftirqd/0
reboot — перезагрузить смартфон из консоли.
resize2fs — аналогично resize_ext4, только для ext2
rm — удалить файл.
rmdir — удалить папку.
rmmod — выгрузить модуль ядра.
route — управление таблицей маршрутизации.
touch — создать пустой файл.
top — интерактивный вариант списка запущенных процессов.
@ screenshot — сделать снимок экрана.
shutdown — выключить смартфон.
service — управление сервисами. Например посмотреть список запущенных сервисов:
Это были все команды описание которых я нашел, по возможности список будет пополняться.
Если у вас есть смартфон с операционной системой Android и вы часто с ним экспериментируете, что-то настраиваете или перепрошиваете, то, скорее всего, вы уже знакомы с инструментом ADB или (Android Debug Bridge). Это программа для управления смартфоном через компьютер по USB, которая содержит множество полезных команд.
Вы можете просматривать журналы, устанавливать и удалять приложения, управлять устройством и выполнять множество других полезных команд. Из этой статьи вы узнаете как пользоваться ADB в Linux, мы рассмотрим полезные команды ADB для пользователей Android и подробно разберем эту утилиту. Но сначала рассмотрим как установить сам инструмент на компьютер.
Выводы
В этой статье мы рассмотрели как пользоваться утилитой adb для управления Android смартфоном, а также основные команды программы adb, которые вы можете применять. Команды adb shell - это те же команды, что вы можете выполнять в терминале Android, поэтому нет смысла их разбирать еще раз. Надеюсь, информация из этой статьи была вам полезной.
Состояние устройства
С помощью команды get-state вы можете узнать состояние устройства:
Команда вернет одно из значений: device - работает, bootloader - загружается, offline - выключено. С помощью команды status-window можно постоянно отслеживать состояние:
Снятие графического ключа, PIN, facelock
Допустим, ты забыл PIN или не совсем трезвым поставил графический ключ, ну или друзья пошутили и поставили распознавание по лицу. Так вот, если устройство по какой-то причине заблокировано, то блокировку можно снять (при условии включенной отладки по USB) через ту же консоль:
Команда удалит все пароли и графические ключи. Сами файлы в зависимости от прошивки и модели устройства могут быть: gesture.key, password.key, cm_gesture.key, personalpattern.key, personalbackuppin.key. Также за блокировку отвечают файлы locksettings.db, locksettings.db-shm, locksettings.db-wal.
После этого достаточно перегрузить устройство и ввести любой ключ, пароль. Если это не помогает, можно попробовать следующее:
Установка приложений
С помощью adb можно напрямую устанавливать приложения. Эта возможность может быть очень удобной для разработчиков. Команде install нужно передать только адрес apk файла:
После этого приложение установлено и готово к работе на вашем устройстве. Если вам нужно обновить приложение до более новой версии, тогда используйте опцию -r. Это очень важно. Иначе получите ошибку:
Еще доступны опции -s - для установки на флешку и -d - для понижения версии программы.
Что еще?
С помощью скриптов в Android можно сделать намного больше, чем бэкапы и настройка параметров системы. Вот, например, скрипт, который просыпается каждые десять минут и, если уровень заряда батареи стал меньше 30%, отключает Wi-Fi и Bluetooth:
Чтобы скрипт работал в фоне, достаточно вызвать его следующим образом:
А это скрипт, который позволяет быстро заполнять формы, требующие ввода имэйла и пароля (в приложениях и на веб-сайтах):
Запускать его можно разными способами. Либо перед запуском приложения, установив задержку:
Либо повесить на какое-то событие Tasker, например на взмах смартфоном. Другой вариант — использовать буфер обмена. В Android, чтобы вставить нужный текст в буфер обмена, достаточно выполнить такую команду:
Не ахти как удобно, зато работает. Как мы можем использовать такую функциональность? Например, сделать простенький скрипт clip.sh:
Соль в том, что скрипт можно вызывать через удаленный ADB либо вообще поместить в /system/etc/init.d/, заменив $1 на нужный текст. Так нужные нам данные всегда будут под рукой, а бесполезный на смартфоне механизм копирования/вставки получит хоть какое-то назначение. Консольные команды можно использовать и для более высокоуровневых операций, например позвонить по указанному номеру:
Или просто открыть окно номеронабирателя с нужным номером:
Скрипт принимает два аргумента: номер телефона и содержимое SMS. После запуска он откроет окно SMS-приложения, вставит в него нужный текст, а затем нажмет кнопку Enter для отправки, после чего окно закроется.
Другие полезные при скриптинге команды:
- Перезагрузка в режим recovery:
- Мягкая перезагрузка (без перезапуска ядра):
- Открыть нужное приложение (в данном примере — «Настройки»):
- Открыть веб-страницу:
- Сообщить приложениям о низком уровне заряда батареи (есть софт, который при этом снижает свою активность):
- Изменить MAC-адрес:
- Активировать вибратор:
- Включить фонарик:
- Проиграть файл (может не сработать):
- Отключить указанное приложение (можно организовать цикл для отключения bloatware по списку):
- Получить список приложений, которые имеют уведомления в строке состояния:
- Оптимизировать внутренние базы данных с настройками (можно добавить скрипт в автозагрузку, требуется BusyBox):
- Переключить Wi-Fi-тизеринг на основной интерфейс (нужно для обмана операторов, которые ограничивают скорость соединения при раздаче интернета по Wi-Fi):
Управление приложениями
Для управления приложениями используются две команды: pm (package manager) — менеджер пакетов и am (activity manager) — менеджер активностей. У данных команд есть немало ключей, которые можно посмотреть на портале разработчиков. Остановимся на некоторых.
Для начала получим список установленных на устройстве приложений в виде названий пакетов, которые пригодятся позже:
Добавив в конец -s, ты увидишь только системные приложения, -3 — только сторонние, -f покажет пути установки пакетов, а -d — отключенные приложения. Далее, зная названия пакетов, можно совершать над ними различные насильственные действия :). Например, отключить ненужный календарь:
Ну а совсем удалить можно так:
Для использования activity manager понадобятся более глубокие знания структуры Android и понимание того, что такое Avtivity и Intent. Это позволит тебе запускать различные приложения, например браузер или настройки:
Завершить работу приложения можно противоположной командой:
Ну а убить все запущенные приложения — такой командой:
Тот же activity manager поможет сделать звонок на нужный номер телефона:
А так можно открыть страницу в браузере:
Запуск браузера из консоли
В данной команде input keyevent эмулирует нажатие кнопок и может использоваться как для хардварных, так и для кнопок внутри приложения. В нашем примере 22 соответствует перевод фокуса вправо (джойстик вправо — dpad right), а 66 — Enter.
С помощью команды input можно, например, разблокировать телефон. Для этого необходимо ввести:
Но данная команда не сработает на последних версиях Android. Для управления питанием и беспроводными коммуникациями там используется утилита svc. Например, включить передачу данных через мобильную сеть или управлять Wi-Fi можно через команды
Также можно заставить смартфон оставаться включенным при подключении к USB-порту/зарядке/Wi-Fi-сети или всегда:
Возвращаясь к команде input, стоит выделить еще одну команду для вставки текста в текущее поле. Кому-то это может показаться более привлекательным способом набора текста с компа, чем нажимать на кнопки небольшой области экрана. Выглядит команда так:
Кроме опции text, у команды input есть и другие. Полная форма команды такова:
В качестве источника можно указывать trackball, joystick, touchnavigation, mouse, keyboard, gamepad, touchpad, dpad, stylus, touchscreen. В качестве команд будут:
- text (Default: touchscreen) [delay]
- keyevent [–longpress] … (Default: keyboard)
- tap (Default: touchscreen)
- swipe [duration(ms)] (Default: touchscreen)
- press (Default: trackball)
- roll (Default: trackball)
Как видно из команд, можно, хотя и с трудом, управлять устройством через команды input touch и input swipe при разбитом экране, если не поддерживается работа мышки через USB-OTG. Например, вытянуть шторку с уведомлениями получится так (отсчет координат идет от левого верхнего угла):
А так можно узнать разрешение экрана:
Для Nexus 5 разрешение выдаст 1080 х 1920. Тогда нажать на кнопку «Меню приложений» стандартного лаунчера от Google, которая находится над кнопкой «Домой», можно так:
Скрипты
Создание скриншота
Выполняется одной строчкой:
После этого картинку нужно выдернуть из устройства командой adb pull:
В recovery скриншот можно сделать следующей командой:
Затем необходимо преобразовать файл fb0 в нормальное изображение с помощью FFmpeg, который нужно скачать и положить в папку с adb. Расширение необходимо ставить своего устройства:
Передача файлов на устройство
$ adb push /адрес/локального/файла /адрес/удаленного/файла
Например, загрузим файл из домашней папки на устройство:
adb push ~/file /sdcard/file
Файл будет мгновенно передан на устройство и вы можете в этом убедиться. Дополнительно можно использовать опцию -p для отображения прогресса, а также опцию -a чтобы сохранить оригинальный timestamp.
Особенности Android-окружения
В самой своей основе, там, где нет Java и Dalvik, Android представляет собой минималистичный Linux-дистрибутив со всеми свойственными ему атрибутами: ядром, системой инициализации, набором библиотек, демонов, консольных команд и, конечно же, шеллом. Последний — это не что иное, как mksh из MirBSD, переименованный в sh; простой командный интерпретатор с поддержкой языковых конструкций классического Bourne shell из UNIX и автодополнением по нажатию Tab.
В качестве комплекта базовых UNIX-команд здесь используется toolbox, своего рода урезанная альтернатива BusyBox, которая позволяет вызывать несколько разных команд из одного бинарника (с помощью симлинков). Toolbox включает в себя очень ограниченный набор команд, в котором нет не только grep или sort, но даже cp. Поэтому для полноценной работы со скриптами настоятельно рекомендуется установка BusyBox, благо в маркете полно бесплатных инсталляторов.
Основное назначение скриптинга в Android — работа с ядром и системными утилитами. Ядро тут стандартное и экспортирует все те же интерфейсы /proc и /sys, через которые можно рулить железом и состоянием системы. Плюс есть набор специфичных для Android утилит, которые будут очень полезны при разработке скриптов:
- pm — менеджер пакетов, позволяет устанавливать, удалять и перемещать софт;
- am — менеджер активностей (Activity), может быть использован для запуска приложений;
- dumpsys — дамп в консоль массы различной информации о состоянии системы;
- screencap — утилита для снятия скриншота;
- screenrecord — утилита для записи скринкастов;
- getprop/setprop — команды для чтения и изменения системных переменных;
- start/stop — запуск и остановка системных служб;
- input — позволяет отправлять в текущее окно кей-коды (эмуляция клавиатуры);
- service — утилита для управления Java-сервисами, имеет очень много возможностей;
- svc — позволяет управлять Wi-Fi, USB-подключением и питанием.
Другие статьи в выпуске:
Установка ADB в Linux
Программа ADB входит в стандартный набор утилит Android SDK. Вы можете установить эту среду и получите нужную утилиту. Но не всегда хочется тянуть на компьютер целую среду исполнения. Иногда нужна только одна программа. Ее можно очень просто установить отдельно. В Ubuntu для этого можно выполнить команду:
sudo apt install android-tools-adb
Для Red Hat, CentOS команда будет немного отличаться:
sudo yum install android-tools-adb
Если вам нужно установить ADB в Windows, то придется скачать пакет SDK Platform Tools из официального сайта.
Снятие логов
После этого можно запускать проблемное приложение и смотреть, что именно вызывает ошибку. Также поддерживается вывод информации из альтернативных буферов. Этим способом можно посмотреть, что приложения делают в фоне и, например, какие события происходят после включения экрана:
Вывод команды adb logcat -b events
Подготовка смартфона
Для того чтобы вы смогли использовать adb вместе со своим смартфоном вам необходимо включить режим отладки по USB. Эта возможность скрыта во всех версиях Android начиная с 4.2. Чтобы стать разработчиком сначала зайдите в "Настройки" -> "О телефоне" и семь раз нажмите на пункте "Номер сборки":
Затем в главном меню настроек появится пункт "Для разработчиков":
Тут необходимо поставить галочку напротив раздела "Разрешить отладку по USB":
Теперь ваш телефон готов к работе с adb. Подключите его по USB к вашему компьютеру и начнем работать.
Запись видео, происходящего на экране устройства
Данная команда начнет записывать видео с разрешением 1280 x 720 (если не указать, то будет использовано нативное разрешение экрана устройства), с битрейтом 6 Мбит/с, длиной 20 с (если не указать, то будет выставлено максимальное значение 180 с), с показом логов в консоли. Записанное видео будет находиться в /sdcard (файл video.mp4).
Все запущенные из консоли и в adb shell процессы, занимающие некоторое время для выполнения, можно прервать с помощью комбинации Ctrl + C. Выйти из шелла и вернуться к выполнению обычных команд adb — Ctrl + D.
Читайте также: