adb shell input text: полное руководство по вводу текста через ADB

Команда adb shell input text перестаёт работать или выдаёт искажённый текст чаще всего из-за неэкранированных пробелов и спецсимволов — оболочка ADB интерпретирует их иначе, чем ожидает пользователь. Если при автоматизации ввода на Android-устройстве текст обрывается на первом пробеле или знаки вроде & и % исчезают, проблема почти наверняка в синтаксисе, а не в самом устройстве.

Эта команда входит в набор инструментов Android Debug Bridge и позволяет эмулировать нажатия клавиш и ввод символов без физической клавиатуры. Она незаменима при тестировании приложений, настройке устройств в пакетном режиме и написании скриптов автоматизации. Ниже разберём синтаксис, ограничения и типичные ошибки.

Что делает команда adb shell input text

Утилита input внутри оболочки Android отправляет события ввода напрямую в систему — так же, как это делает драйвер физической клавиатуры. Подкоманда text преобразует строку в последовательность событий нажатия клавиш и передаёт её активному полю ввода на экране устройства.

Важно понимать: команда не «вставляет» текст через буфер обмена, а именно эмулирует набор. Поэтому скорость ввода ограничена, а длинные строки набираются заметно медленнее, чем при вставке. Ещё одно следствие — текст попадёт только туда, где сейчас находится фокус ввода.

Базовый синтаксис выглядит так:

adb shell input text "Hello"

После выполнения в активное текстовое поле на устройстве будет введено слово Hello. Если фокуса нет, команда завершится без ошибки, но и видимого результата не будет — это частый источник путаницы у новичков.

Подготовка: включение ADB и проверка подключения

Прежде чем отправлять команды, необходимо активировать отладку по USB на устройстве. Для этого откройте настройки, перейдите в раздел «О телефоне» и несколько раз нажмите на пункт «Номер сборки», пока не появится сообщение о разблокировке режима разработчика. Точное название пунктов зависит от оболочки производителя — сверьтесь с документацией вашей модели, если путь отличается.

Затем в появившемся меню «Для разработчиков» включите отладку по USB, подключите устройство к компьютеру и подтвердите запрос на разрешение отладки на экране смартфона. Проверить соединение можно командой:

adb devices

Если устройство отображается со статусом device — можно работать. Статус unauthorized означает, что разрешение на отладку не подтверждено на экране, а пустой список обычно указывает на проблему с кабелем или драйверами на компьютере.

☑️ Перед первым вводом текста через ADB

Выполнено: 0 / 5

Синтаксис и работа с пробелами

Главная особенность команды — обработка пробелов. Внутри adb shell пробел является разделителем аргументов, поэтому строка с пробелами без экранирования будет обрезана или вызовет ошибку. Есть два рабочих способа передать пробел:

  • 🔹 Заменить каждый пробел последовательностью %s — это встроенный механизм самой команды input text.
  • 🔹 Экранировать пробел обратным слэшем: \ — способ срабатывает, когда строка передаётся через оболочку.
  • 🔹 Заключить всю строку в кавычки и дополнительно экранировать спецсимволы — комбинированный вариант для сложных строк.

Пример с использованием %s:

adb shell input text "Hello%sworld"

На устройстве появится строка Hello world. Обратите внимание: символ процента сам по себе тоже специальный — чтобы ввести литеральный знак %, его нужно удвоить или экранировать в зависимости от оболочки, иначе команда попытается интерпретировать его как начало escape-последовательности.

📊 Для каких задач вы используете adb shell input text?
Автоматизация тестирования приложений
Скрипты настройки устройств
Ввод паролей без клавиатуры
Изучаю возможности ADB

Спецсимволы и их экранирование

Помимо пробела, проблемы вызывают символы, которые имеют особое значение в shell: &, |, ;, <, >, $, кавычки и обратный слэш. Каждый из них нужно экранировать символом \, иначе оболочка выполнит перенаправление, конвейер или подстановку вместо передачи символа на устройство.

СимволКак передатьКомментарий
Пробел%sВстроенная замена команды input
&\&Иначе shell отправит команду в фон
|\|Без экранирования — конвейер
"\"Экранирование внутри кавычек
%%25 или экранированиеПоведение зависит от версии shell

Практический пример со сложной строкой:

adb shell input text "user\&pass%s123"
⚠️ Внимание: поведение экранирования различается между Windows (cmd, PowerShell) и Linux/macOS (bash). Одна и та же команда, работающая в bash, может дать другой результат в cmd.exe. Перед запуском скрипта на новой платформе проверьте ввод на короткой тестовой строке.

Ограничения команды

У input text есть несколько принципиальных ограничений, о которых нужно знать заранее. Во-первых, ввод работает только в поле, находящееся в фокусе: если на экране открыта клавиатура, но курсор не установлен в поле, символы уйдут «в никуда». Во-вторых, поддержка Unicode ограничена — кириллица, эмодзи и иероглифы через эту команду обычно не вводятся или вводятся некорректно.

Для ввода русского текста существуют обходные пути, но все они требуют дополнительных инструментов. Один из распространённых подходов — сторонние приложения-клавиатуры, принимающие текст через intent или broadcast, однако их настройка выходит за рамки базовой команды и зависит от конкретного решения.

  • 🚫 Нет гарантированной поддержки кириллицы и эмодзи — только базовый ASCII-набор работает стабильно.
  • 🐢 Низкая скорость ввода: каждая буква — отдельное событие, длинные тексты набираются медленно.
  • 🎯 Требуется фокус на поле ввода — иначе команда завершается без видимого эффекта.
  • 🔐 Некоторые поля ввода паролей и защищённые экраны могут блокировать программный ввод.

Типичные ошибки и их решение

Самая частая жалоба — «команда выполняется, но текст не появляется». Возможная причина — отсутствие фокуса или активная экранная клавиатура, перехватывающая события. Проверьте, что на экране устройства курсор действительно стоит в нужном поле, и при необходимости сымитируйте нажатие по нему через input tap.

Вторая типичная ситуация — текст обрывается на первом пробеле. Это верный признак того, что пробелы не заменены на %s и не экранированы. Третья — вместо спецсимволов появляются неожиданные результаты или ошибки shell: значит, символы &, | или $ были интерпретированы оболочкой компьютера ещё до отправки на устройство.

⚠️ Внимание: не используйте input text для ввода реальных паролей в скриптах, которые хранятся в открытом виде, — команда и её аргументы видны в истории shell и логах. Для автоматизации используйте тестовые учётные данные.
Альтернативы для сложных сценариев

Для ввода Unicode-текста применяют сторонние IME с поддержкой broadcast-интентов (например, решения класса ADBKeyBoard), которые принимают строку в кодировке Base64. Для нажатия отдельных клавиш вместо текста используйте adb shell input keyevent с кодом клавиши — например, KEYCODE_ENTER для подтверждения ввода.

Комбинирование с другими командами input

В реальной автоматизации input text редко используется отдельно. Типичный сценарий входа в приложение выглядит как цепочка: нажатие на поле логина, ввод логина, нажатие на поле пароля, ввод пароля, нажатие кнопки подтверждения. Каждый шаг — отдельная команда input.

adb shell input tap 540 600

adb shell input text "username"

adb shell input tap 540 800

adb shell input text "pass%sw0rd"

adb shell input keyevent 66

Здесь keyevent 66 соответствует клавише Enter. Координаты для tap зависят от разрешения экрана конкретного устройства — универсальных значений не существует, поэтому перед написанием скрипта определите их на своём устройстве через отображение координат касаний в настройках разработчика.

Часто задаваемые вопросы

Почему adb shell input text не вводит русские буквы?

Команда рассчитана на базовый ASCII-набор и не гарантирует корректную передачу Unicode-символов. Для кириллицы используются сторонние клавиатурные решения, принимающие текст через intent, либо ввод через буфер обмена с помощью дополнительных инструментов.

Как ввести пробел в adb shell input text?

Замените пробел последовательностью %s — например, adb shell input text "Hello%sworld". Альтернатива — экранирование пробела обратным слэшем, но поведение зависит от используемой оболочки на компьютере.

Команда выполняется без ошибок, но текст не появляется. Что делать?

Проверьте, что на устройстве активно нужное поле ввода и в нём стоит курсор. Установите фокус командой adb shell input tap с координатами поля, затем повторите ввод. Также убедитесь, что поле не является защищённым от программного ввода.

Как ввести символы &, | или % через input text?

Спецсимволы shell нужно экранировать обратным слэшем: \&, \|. Символ процента — особый случай, так как %s зарезервировано под пробел; надёжный способ зависит от версии оболочки, поэтому проверяйте результат на тестовой строке.

Можно ли ускорить ввод длинного текста?

Сама команда отправляет каждое событие отдельно, и ускорить её нельзя. Для объёмных текстов эффективнее использовать вставку через буфер обмена с помощью сторонних утилит или специализированные IME, принимающие строку целиком через broadcast-интент.