rdp-cli
Управление Android по USB или Wi-Fi с помощью ИИ-агента
Подключите Android 12 или новее, получите снимок экрана, введите текст, передайте файл и возьмите управление тем же сеансом rdp-cli.
Минимальная поддерживаемая версия — Android 12. Проверенное устройство — Google Pixel 3 с Android 12. Это не означает проверку всех производителей и последующих версий Android.
Подготовка телефона
- Включите параметры разработчика и отладку по USB, подключите кабель для передачи данных и подтвердите разрешение на разблокированном телефоне.
- Для Wi-Fi включите беспроводную отладку и используйте показанные телефоном код и порт сопряжения. Порт подключения отличается; USB-кабель не нужен.
- Для USB в Windows нужен драйвер WinUSB, подходящий телефону и архитектуре компьютера, в том числе ARM64. rdp-cli не устанавливает драйверы и не закрывает другие средства отладки. В Linux (x86_64 / ARM64) предоставьте обычному пользователю доступ к USB-устройству телефона через подходящее правило udev или группу устройств и выполняйте команды ниже в Bash. Запускайте rdp-cli без sudo. macOS использует системный USB-интерфейс.
Замените DEVICE_SERIAL, SESSION, OBSERVATION, PHONE_IP и оба порта реальными значениями. Сохраните data.session из connect и используйте data.observation каждого снимка. Вместо wifi:PHONE_GUID укажите полученный идентификатор wifi:. Выберите имя PHONE_REF для сохранения сопряжения на этом компьютере. По запросу введите текущий шестизначный код; команда передаст его через стандартный ввод.
Windows PowerShell: rdp-cli → .\rdp-cli.exe.
Обнаружение и подключение
Явно выберите обнаруженный ID устройства. Подключение не открывает окно и не включает звук.
rdp-cli android devices
rdp-cli connect --protocol adb --device usb:DEVICE_SERIAL --transport usb
rdp-cli screenshot --session SESSION --out before.png
Выполнить небольшую задачу
Откройте приложение заметок на разрешённом телефоне и создайте пустую заметку. Проверьте before.png, замените X и Y координатами поля и нажмите. Посмотрите focused.png и используйте его data.observation как NEW_OBSERVATION перед вставкой. Проверьте текст по result.png. Окно просмотра на компьютере не требуется.
rdp-cli android touch --session SESSION --kind tap --x X --y Y --observation OBSERVATION
rdp-cli screenshot --session SESSION --out focused.png
Для Unicode и многострочного текста используйте явный метод буфера обмена. Он заменяет буфер телефона, не синхронизируя его с компьютером. Замените пример своим текстом. После поворота экрана или истечения наблюдения сделайте новый снимок и проверьте его.
rdp-cli android text --session SESSION --method clipboard --text "Удалённая задача выполнена." --observation NEW_OBSERVATION
rdp-cli screenshot --session SESSION --out result.png
Файлы и папки
Создайте локальный note.txt с тестовым текстом. Загрузите его, сохраните data.transfer_id как UPLOAD_TRANSFER и дождитесь completed. Скачайте под другим локальным именем, сохраните новый ID как DOWNLOAD_TRANSFER и снова дождитесь completed перед сравнением. Пути относятся к папке сеанса на телефоне, а не к закрытым каталогам приложений. Существующие файлы по умолчанию не перезаписываются.
rdp-cli files upload --session SESSION --local ./note.txt --path note.txt
rdp-cli files status --session SESSION --transfer-id UPLOAD_TRANSFER
rdp-cli files download --session SESSION --path note.txt --local ./note-returned.txt
rdp-cli files status --session SESSION --transfer-id DOWNLOAD_TRANSFER
Беспроводное подключение
Wi-Fi — альтернатива USB. Если у телефона уже есть USB-сеанс, сначала выполните disconnect --session SESSION. Затем выполните сопряжение и подключитесь с полученным ID устройства и текущим портом подключения. Сохраните новый data.session и сделайте новый снимок перед вводом.
Для Wi-Fi включите беспроводную отладку и используйте показанные телефоном код и порт сопряжения. Порт подключения отличается; USB-кабель не нужен.
macOS / Linux · Bash
printf '%s' 'Код сопряжения: '
IFS= read -r -s rdp_pair_code
printf '\n'
printf '%s' "$rdp_pair_code" | rdp-cli android pair --host PHONE_IP --port PAIR_PORT --code-stdin --save-device-auth PHONE_REF
unset rdp_pair_code
rdp-cli connect --protocol adb --device wifi:PHONE_GUID --transport wifi --host PHONE_IP --port CONNECT_PORT --device-auth-ref PHONE_REF
Windows · PowerShell
$pairingCode = Read-Host 'Код сопряжения' -AsSecureString
try {
[System.Net.NetworkCredential]::new('', $pairingCode).Password |
.\rdp-cli.exe android pair --host PHONE_IP --port PAIR_PORT --code-stdin --save-device-auth PHONE_REF
} finally {
$pairingCode.Dispose()
}
.\rdp-cli.exe connect --protocol adb --device wifi:PHONE_GUID --transport wifi --host PHONE_IP --port CONNECT_PORT --device-auth-ref PHONE_REF
Общий сеанс
Агент, нативное окно и авторизованные браузеры используют один постоянный сеанс. При необходимости приостановите его или перехватите управление.
rdp-cli watch --session SESSION --viewer window
rdp-cli watch --session SESSION --viewer web
Особенности работы
Если список USB пуст, проверьте кабель передачи данных и права доступа. ADB_DEVICE_BUSY означает занятость другим отладчиком; явно закройте его соединение. Для Wi-Fi проверьте текущий порт подключения и сохранённую идентичность телефона; порт сопряжения не подходит. Успешный ввод подтверждает отправку, а результат проверяется новым снимком или готовым файлом.
- Сеанс управляет существующим экраном телефона. Физические касания и другие средства отладки по-прежнему могут влиять на него.
- Вставка Unicode явно изменяет буфер обмена телефона. Буфер обмена компьютера не читается и не синхронизируется.
- Звук воспроизведения требует подтверждения системного запроса на телефоне и соблюдает ограничения приложений на захват. Микрофон телефона — отдельный источник; передача микрофона компьютера в приложения не предусмотрена.
- По умолчанию звук выключен; переподключение не возобновляет запись. Временные компоненты развёртываются только на авторизованном телефоне, без root и замены клавиатуры.
Завершение
Выключите звук телефона и отключитесь. Готовые файлы и пользовательские приложения останутся на телефоне.
rdp-cli audio android --session SESSION --source off
rdp-cli disconnect --session SESSION