Мне интересно узнать, как записывать (и, если возможно, читать) в буфер обмена Android-устройства.
Я надеюсь сделать это с помощью ADB через USB, и я не заинтересован в установке каких-либо приложений, которые бы помогли мне сделать это, поскольку я планирую делать это редко.
Буду очень признателен за любые предложения или помощь, направляющие меня в правильном направлении.
adb
system
copy-paste
earthmeLon
источник
источник
Ответы:
Да, вы действительно можете сделать это. Это выглядит глупо, когда вы просматриваете буфер обмена, но он работает просто отлично.
Во-первых, вы можете проверить текущее содержимое буфера обмена с
service call clipboard 1
помощью оболочки adb (или без шелласа вначалеadb shell service call clipboard 1
). После перезагрузки он может начинаться с нуля, например:Вы можете поместить текст в буфер обмена с помощью
service call clipboard 2
, который в основном принимает 3 параметра - два целых и строку, которую вы хотите поместить в буфер обмена:Если честно, я не уверен, каковы первые два параметра. Один из ответов на переполнение стека предполагает, что первое int - это «количество элементов в посылке» (в данном случае один), а второе - длина строки. Тем не менее, я использовал 0 для второго параметра, и он работает нормально, и я не могу найти никакой документации, которая бы соответствовала этой конкретной функции ... так что возьмите это для себя.
В любом случае, это в основном создание объекта Parcel с 3 полями, а затем передача его в буфер обмена. Затем буфер обмена распаковывает Parcel и устанавливает значение строки, переданное как содержимое буфера обмена. Вы можете увидеть это, когда перейдете к получению значения впоследствии:
Точно так же, если вы долго нажмете на поле ввода текста и нажмете «Вставить» после этого, вы получите текст, который был установлен через
call service clipboard 2
строку выше (и это будет выглядеть совершенно нормально).(Приведенные выше примеры взяты из моего HTC EVO под управлением CyanogenMod 7)
источник
'........U.n.k.n.' 'o.w.n. .p.a.c.k.' 'a.g.e. ..... ')
при изготовленииcall service clipboard 2
Я использовал эту методологию, и она отлично работала в 4.x, но мне не удалось в леденце. В поисках альтернативного решения я нашел это: /programming/3391160/paste-text-on-android-emulator
это не совсем то, что вы хотели, но для себя большую часть времени я хочу скопировать текст в буфер обмена, потому что я хочу вставить его в поле пароля.
в качестве дополнительного бонуса вот мой сценарий ( отредактированный 2015-04-24, чтобы разрешить пробелы в тексте ):
источник
echo "$TEXT" | adb shell xargs -0 input text
который должен обрабатывать любой текст, кроме символов \ 0 (NUL). К сожалению, старые версии adb не пересылают stdin команде, указанной в командной строке adb. Это исправлено в новых версиях ADB, но это необходимо для Android N работать .input
команды на устройстве Android, а не для используемой оболочкиadb shell
. Кроме того, это необходимо только для SDK версии 22 и ниже (я думаю, Lollipop и ниже) в соответствии с этим ответом .Вот улучшенная версия скрипта от Galets выше. Как и в случае с этим сценарием, он не записывает данные в буфер обмена, а отправляет ввод в текущее поле ввода, что в любом случае часто является тем, что вам нужно.
Этот скрипт улучшен, чтобы избежать специальных символов, чтобы не перепутать оболочку Android с ними. Это должно позволить отправлять любую строку без изменений. Чтобы
read
команда не интерпретировала (завершающий) обратный слеш, я добавил туда -r.Это было проверено с использованием следующего списка специальных символов:
Вот сценарий:
источник
Я попробовал и немного погуглил, и кажется, что подход call-service-clipboard-подхода перестал работать в новых андроидах, у меня не получилось на 4.4.4 версии Android. Т.е. вам понадобится приложение для доступа к буферу обмена (чтение и запись) из adb-оболочки. Я использую клипер из Маджидо на GitHub . Apk также размещен, так что нет необходимости компилировать его самостоятельно. После установки вы можете общаться с ним, используя широковещательные команды (приложение сообщит вам точные команды). Приложение не требует рута.
источник
Другой сценарий, который используется
adb shell input
для отправки символов, можно найти здесь: https://github.com/gcb/AdbPaste.Это скрипт на Python, который можно клонировать из github, а также напрямую загружать и запускать:
источник