Вставка текста в буфер обмена эмулятора Android с помощью оболочки adb
Мне нужно вставить текст в буфер обмена эмулятора Android с помощью оболочки adb.
на Android 1.6 и 2.3.1
Я попытался использовать команду adb shell: clipboard: [android.text.iclipboard]
"service clipboard", где служебные коды 1, 2 и 3 для getClipboardText, setClipboardText и hasClipboardText соответственно.
service call clipboard 2 s16 thisisinsertedtext
похоже, не работает
в то время как
service call clipboard 1
показывает содержимое буфера обмена:
service call clipboard 1
Result: Parcel(
0x00000000: 00000000 00000001 00000001 00000004 '................'
0x00000010: 00650074 00740078 00000000 't.e.x.t..... ')
Пожалуйста, сообщите, как установить значение для буфера обмена эмулятора!
Ответы
Ответ 1
Используйте команду ниже.
сервис-буфера обмена 2 i32 1 i32 18 s16 thisisinsertedtext
Я думаю, что первое, "i32 1" - это количество элементов в буфере обмена. Итак, только один.
Вторая - длина строки.
Команда, написанная выше, показывает...
Результат: Посылка (00000000 '....') Обычно это означает "ОК", никаких ошибок.
Итак, мой вопрос в том, есть ли способ скопировать строку unicode?
Я имею в виду, muti-byte набор символов, как корейский.
Я пробовал много, но это не удалось.
Ответ 2
Похоже, что все 3 старые методы устарели с уровня API 11, поэтому он не будет работать для ICS
Неясно, возможно ли даже сделать это с буфером обслуживания вызовов больше...
static final int TRANSACTION_getClipboardText 1
static final int TRANSACTION_hasClipboardText 3
static final int TRANSACTION_setClipboardText 2
www.androidjavadoc.com/1.0_r1_src/constant-values.html
http://developer.android.com/reference/android/content/ClipboardManager.html
http://developer.android.com/guide/topics/text/copy-paste.html
Ответ 3
служба обмена сообщениями службы adb оболочки я i я i я i я 1 1 1 1 1 s16 "你 好吗"
Результат: Посылка (00000000 '....')
Это нормально.
"你 好吗" - это китайский символ.
Второй "i32 1" может быть любым целым числом, возможно...
Ответ 4
Попробуйте следующее:
i32: записать целое INT в отправленную партию.
s16: Введите строку STR UTF-16 в посылку отправки.
Ответ 5
Использование команды adb shell напрямую не работает с уровня API 11.
Здесь - это решение.
Ответ 6
Существует открытый python с открытым исходным кодом script, который может справиться с серьезными ограничениями: https://github.com/gcb/AdbPaste - и он работает достаточно хорошо, за исключением для файла с длинным буфером загружает его невероятно медленно (200-строчный текстовый файл может занимать 20 минут).
Я нашел код в GitHub для приложения под названием clipper, который может использовать adb для заполнения буфера обмена через намерение трансляции. Я улучшил его для чтения из файла, расширенный код здесь: https://github.com/RoundSparrow/clipper
Создайте приложение, установите его на устройство. Теперь я могу использовать команды ADB для заполнения буфера обмена через файл. Работает как шарм для 3 страницы script Мне нужно загрузить. По существу вы используете вот так:
adb push clipboard_content_file.txt /sdcard/clipboard_content_file.txt
adb shell am broadcast -a clipper.setfile -e filepath \'/sdcard/clipboard_content_file.txt\'
Он намного быстрее AdbPaste, он занимает всего секунду или два независимо от размера содержимого буфера обмена.