Вставить текст в эмулятор Android


316

Существует ли простой способ скопировать / вставить содержимое буфера обмена (рабочего стола) в EditViewэмулятор Android?

(просто для облегчения разработки / тестирования)


2
re Joel Beckham-send SMS: > Обычно я отправляю текст, который хочу скопировать, как смс-сообщение> через telnet, а затем копирую текст из смс-сообщения. Вместо использования telnet вы можете использовать eclipse для имитации входящих смс в эмуляторе: в инструментах eclipse android (версия 17 может быть и в более старых версиях) откройте DDMS-Perspective. В разделе «Управление эмулятором» / «Действия с телефонией» вы можете смоделировать входящие смс> Как только эмулятор получает сообщение, вы можете скопировать его и вставить> в любое удобное для вас место.
k3b

2
Для тех, кто смотрит на этот вопрос сейчас; теперь он изначально поддерживается в Android - просто убедитесь, что вы используете последнюю
версию

3
Длительное нажатие на текстовое поле и выберите Вставить
onmyway133

Ответы:


126

С v25.3.x из эмулятора Android и системных образов эмулятора API x86 API уровня 19 (Android 4.4 - Kitkat) и выше вы можете просто копировать и вставлять со своего рабочего стола с помощью мыши или клавиатуры.

Эта функция была анонсирована в Android Studio 2.3

Копирование и вставка с эмулятором Android


27
По состоянию на январь 2018 года в текущей версии эмулятора есть известная ошибка, из-за которой она иногда перестает работать. В качестве обходного пути нажмите значок «...», перейдите в «Настройки» и включите и отключите параметр «Включить общий доступ к буферу обмена». ( Источник )
mhsmith

@mhsmith Как это сделать (сбросить общий доступ к буферу обмена) из командной строки с помощью инструментов командной строки Android или путем редактирования ~/.android/avd/ .iniфайлов?
Хлоя

@Chloe Поскольку эта проблема связана с уже запущенным эмулятором, я сомневаюсь, что любая из этих вещей будет иметь значение.
мсмит

1
Как вы вставляете на Mac? Нажатие Cmd вызывает мультитач. Cmd-V ничего не делает.
января

17
@jcollum щелкните левой кнопкой мыши и удерживайте текстовое поле, в которое вы хотите вставить текст, нажмите «Вставить». cmd + v не будет работать, как и Ctrl + V, я думаю.
Лиам Доусон

306

В терминале введите adb shell input text 'my string here. With some characters escaped like \$ that'

Обратите внимание, что альтернативный метод включения пробелов в тексте заключается в замене %sкаждого spaceсимвола.


22
Если у вас Mac, вы можете вставить содержимое буфера обмена еще проще: adb shell input text "pbpaste"
lowellk

3
в итоге занял сегодня несколько часов и написал обходной путь на python для решения проблем с пробелами. теперь гораздо проще завершить создание букмарклетов в стоковом браузере, не создавая дюжину учетных записей синхронизации. github.com/gcb/AdbPaste (написано, пока
ожидание

2
Похоже, что это не работает с некоторыми UTF-символами - после попытки отправки 'ლ\(ಠ益ಠლ\)'он просто говорит «Убито» или, кажется, завершается успешно, и ничего не набрано, и у меня нет ничего вставляемого в эмуляторе. Метод SMS (я пробовал из DDMS) здесь даже не работает, он отображается как «? (????)» :(
Groxx

2
Я тоже не могу отправить строки с пробелами; Я должен использовать% s.
Питер

2
@ Питер и Роуз, есть ли способ добавить новую строку? adb shell input text "This%sis%stext\nDoes%snot%work%here."выводит "Это текст \ nНе работает здесь."
Повелитель огня

84

Я обычно отправляю текст, который хочу скопировать, в виде смс-сообщения через telnet, а затем копирую текст из смс-сообщения. Вот как:

Подключиться через телнет:

  • Синтаксис: telnet localhost <port>
  • Пример: telnet localhost 5554

(5554 является портом по умолчанию. В строке заголовка эмулятора отображается используемый порт, поэтому вы можете увидеть, отличается ли он).

Отправить сообщение:

  • Синтаксис: sms send <senders phone number> <message>
  • Пример: sms send 1231231234 This is the message you want to send

(Вы можете просто указать номер телефона отправителя)

Это работает очень хорошо для ссылок, так как сообщение автоматически преобразуется в гиперссылку, по которой вы можете щелкнуть без необходимости копировать / вставлять его в браузер.

Как только эмулятор получает сообщение, вы можете скопировать его и вставить в любое место.


3
вам даже не нужен telnet ... вы можете отправлять смс с ddms (но ddms требует telnet). Но хорошая идея :)
Тима

@ Мур - это отличная идея. Спасибо!
Джоэл Бекхэм

1
Для тех, кто заинтересован, просто создал сценарий оболочки для этого: gist.github.com/2050770
Тодд Мазерски

7
Этот ответ является излишним. использовать adb. Смотри мой ответ.
Роуз Перроне

1
Избыток или нет, но он позволяет вставлять текст как есть, без необходимости экранирования специальных символов.
Дмитрий

28

Просто скопируйте откуда угодно, нажмите и удерживайте текст редактирования телефона эмулятора, куда вы хотите, чтобы текст шел (вроде как вы нажимаете и удерживаете, чтобы вставить на реальный телефон), появится опция PASTE, затем PASTE.


3
Спасибо! Определенно мой любимый ответ. С текущей версией эмулятора это очень удобно. (В текущем эмуляторе есть настройка в элементах управления эмулятора в разделе «Настройки», которая позволяет совместно использовать буфер обмена.)
albert c braun

Это как вставить на Mac, так как командная клавиша запускает сенсорные жесты по умолчанию.
Джим

19

Не уверен, что это полезно, но если вам нужно открыть длинный URL-адрес из браузера настольного компьютера в мобильном браузере, вы можете отправить SMS с этим URL-адресом и открыть его непосредственно из приложения сообщений.

введите описание изображения здесь


Вы даже можете скопировать этот текст. Я нашел этот путь одним из самых простых и хитрых!
Hirbod Behnam

Я получил эту ошибку: «Не
удается

Это определенно полезно! Прямо из того же интерфейса эмулятора, без телнета, без параметров. И вариант использования URL просто отвечает моим потребностям. Очень эффективное решение.
Альберто де Каро

11

Если вы используете Android Studio на Mac, вам может потребоваться указать полный путь к adbисполняемому файлу. Чтобы найти этот путь, откройте:

Android Studio > Tools > Android > SDK Manager

Скопируйте путь к местоположению SDK. adbИсполняемый файл будет находиться в пределах platform-toolsкаталога. Для меня это был путь:

~/Library/Android/sdk/platform-tools/adb

Теперь вы можете запустить эту команду:

~/Library/Android/sdk/platform-tools/adb shell input text 'thetextyouwanttopaste'

7

Я устал от этой проблемы, поэтому я просто создал этот псевдоним:

alias ap="pbpaste | xargs adb shell input text"

Затем, когда вы открываете новое окно терминала, ввод «ap» вставит все, что находится в вашем буфере обмена, в активно выбранное текстовое поле эмулятора.

Настроить

Просто добавьте это в свой профиль (для большинства пользователей, предназначенных ~/.bash_profileдля пользователей zsh ~/.zshrc), чтобы псевдоним был доступен везде. В качестве альтернативы, если вы пользователь bash (по умолчанию для MacOS), вы можете запустить следующую команду в терминале, чтобы настроить ее для вас:

echo "alias ap='pbpaste | xargs adb shell input text'" >> ~/.bash_profile && source ~/.bash_profile

илиalias ap="adb shell input text `pbpaste`"
gderaco

Я использую Windows и псевдоним, 'alias' is not recognized as an internal or external command, operable program or batch file. что делать
shareef

6

Только для уровня API> = 24

Скопируйте любой текст с вашего локального компьютера, а затем просто запустите эту команду

adb shell input keyevent 279

Убедитесь, что в настройках эмулятора Android Enable Clipboard Sharingвключены опции


5

может быть немного сложнее, но вы можете отправить смс на эмулятор с помощью элемента управления эмулятора. тогда вам не придется перепечатывать весь текст, если он длиннее, и вы можете скопировать и вставить его в эмулятор.

Другой способ: подключиться к эмулятору через «telnet localhost PORT», а затем использовать аппаратную отправку событий для отправки события ввода текста в эмулятор (должен быть UTF-8). посмотри на это


5

Вы можете сделать это и без обходных путей. Просто нажмите и удерживайте немного в поле ввода, пока не появится уведомление о вставке, а затем нажмите на вставку. Это оно!


4

В Linux это будет вставлять текст прямо из буфера обмена

adb shell input text "'$(xclip -selection c -o)'"

Также очень полезно создать глобальную комбинацию клавиш с помощью этой команды, например Ctrl+Shift+Super+V



2

Вы смотрели на C2DM? chrome2phone и fox2phone могут отправлять ссылки и текст буфера обмена и автоматически копировать его на телефон. Также попробуйте использовать оболочку adb. Есть служебная команда (/ system / bin / service), которая может использовать службы (буфер обмена служебными вызовами ...). Коды транзакций 1, 2 и 3 для getClipboardText, setClipboardText и hasClipboardText соответственно.


1

Используя эмулятор Visual Studio, вот мой метод.

Сначала найдите виртуальную SD-карту:

  1. Используйте дополнительные инструменты (маленький значок >>) для эмулятора и перейдите на вкладку SD-карта.
  2. Выберите папку на вашем компьютере для синхронизации с виртуальной SD-картой.
  3. Вытащите с SD-карты, которая создаст структуру папок в выбранной папке.

Настройте текстовый файл для передачи текста:

  1. Используйте Google Play Store, чтобы установить текстовый редактор на ваш выбор
  2. Создайте текстовый файл, содержащий ваш текст, на вашем компьютере в каталоге загрузки каталога виртуальной карты SD, который вы создали ранее.

Всякий раз, когда мне нужно отправить текст в буфер обмена.

  1. Отредактируйте текстовый файл, созданный выше.
  2. Перейдите в Дополнительные инструменты (маленькая иконка >>) и выберите Push To SD Card.
  3. Откройте текстовый файл в текстовом редакторе, который я установил, и скопируйте текст в буфер обмена. (Нажмите и удерживайте кнопку мыши, когда откроется диалоговое окно, выберите «Выбрать все», а затем щелкните значок копирования).

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


Кроме того, текстовый редактор, который я использую, уведомляет меня о том, что контент изменился, и спрашивает, хочу ли я его перезагрузить.
Александр Хиггинс

1

(преобразование комментария обсуждения в ответ)

Единственное решение для Windows: https://github.com/gcb/AdbPaste

написал за пару часов, чтобы обойти эту проблему. Теперь я вернулся на 100% Linux, поэтому не стесняйтесь присоединиться к нему в качестве участника или сопровождающего!


Спасибо за это. Примечание для других: это медленно для отправки нескольких строк. У меня есть 3-страничный скрипт LUA для загрузки, и это решение занимает около 20 минут из источника файла. Google действительно должен решить эту проблему. Я знаю о приложении Keyboard с открытым исходным кодом, у которого есть интерфейс telnet, который был бы намного быстрее, но переключение ввода / вывода клавиатуры стало дополнительным шагом.
RoundSparrow Hilltx

1
Чтобы решить проблему скорости, упомянутую в моем последнем комментарии: я обнаружил, что гораздо быстрее просто установить на устройство маленькое вспомогательное приложение, которое может получать содержимое буфера обмена из команды adb broadcast. Это заполняет буфер обмена вместо прямого ввода, как это делает AdbPaste, но я смог улучшить его для чтения текстового файла, и для моего 3-страничного сценария LUA теперь требуется всего 1 или 2 секунды, чтобы перейти от команды adb к наличию в Android текстовое окно. Приложение называется Clipper и улучшено для чтения текстового файла здесь: github.com/RoundSparrow/clipper
RoundSparrow hilltx

1

Команда ввода: adb devices (отобразится список подключенных в данный момент устройств). Выберите Textbox, где вы хотите написать текст. Введите команду: adb shell, введите текст «Yourtext» (убедитесь, что для выполнения этой команды подключено только одно устройство) Готово!


0

Я пришел сюда в поисках решения той же проблемы и в итоге написал приложение для Android, чтобы решить эту проблему. Вы можете скачать его по адресу http://www.box.net/shared/6203bn441bfltkimajmk . Просто укажите URL через меню «Предпочтения», чтобы указать место, где вы можете легко изменить ответ в Интернете. Первая строка веб-ответа будет скопирована для вас в буфер обмена вашего эмулятора. Более подробную информацию можно найти по адресу http://agilesc.barryku.com/?p=255 .


1
Вы не должны размещать исполняемый код здесь. Исходный код был бы намного лучше.
lowellk

0

Для Mac и Linux попробуйте эту функцию в вашем файле aliases_bash (находится в / etc / aliases_bash для людей Mac, обязательно используйте sudo vim / etc / aliases_bash)

function adbtx {
  userinput="$(sed 's/ /%s/g' <<< $1)"
  adb shell input text "${userinput}";
}
export -f adbtx

Затем в командной строке введите:

adbtx 'Your text to emulator input'

« Ваш ввод текста в эмулятор » будет введен в текстовое поле эмулятора.

Престижность Элиоту за его строку замены для sed.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.