关于仿真:使用adb shell将文本粘贴到Android仿真器剪贴板中

Pasting text into Android emulator clipboard using adb shell

我需要使用adb shell将文本粘贴到Android模拟器剪贴板中。
在Android 1.6和2.3.1上尝试过

我尝试使用adb shell命令:剪贴板:[android.text.iclipboard]

"服务呼叫剪贴板",其中服务代码分别为getClipboardText,setClipboardText和hasClipboardText的1、2和3。

1
service call clipboard 2 s16 thisisinsertedtext

似乎不起作用

1
service call clipboard 1

显示剪贴板的内容:

1
2
3
4
service call clipboard 1
Result: Parcel(
   0x00000000: 00000000 00000001 00000001 00000004 '................'
   0x00000010: 00650074 00740078 00000000          't.e.x.t.....    ')

请告知如何为模拟器剪贴板设置值!


自API Level 11以来,似乎不推荐使用所有3种旧方法,因此它不适用于ICS
尚不清楚是否甚至可以使其与服务呼叫剪贴板一起使用...

1
2
3
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


使用以下命令。

service call clipboard 2 i32 1 i32 18 s16 thisisinsertedtext

我认为第一个" i32 1 "是剪贴板中的多少个元素。所以,只有一个。
第二个是字符串的长度。
上面写的命令显示...

Result: Parcel(00000000 '....')
This usually means OK, no error.

所以,我的问题是,有没有办法复制unicode字符串?
我的意思是像韩国人一样,多字节字符集。
我尝试了很多方法,但是失败了。


adb shell service call clipboard 2 i32 1 i32 1 s16"???¥???—"

Result: Parcel(00000000 '....')

没关系。

" ??? ¥ ??? — "是汉字。

第二个\\'i32 1 \\'可以是任何整数,也许...


有一个开放源代码的python脚本可以处理严格的限制:https://github.com/gcb/AdbPaste-它工作得很好,除了长剪贴板文件上传外,它的运行速度非常慢(200行文本文件可能需要20分钟)。

我在GitHub上找到了一个名为Clipper的应用程序的代码,该应用程序可以使用adb通过广播意图填充剪贴板。我对其进行了增强以从文件读取,增强后的代码在这里:https://github.com/RoundSparrow/clipper

构建应用程序,然后在设备上安装。现在,我可以使用ADB命令通过文件填充剪贴板。对于需要上传的3页脚本来说,它就像一个符咒一样工作。本质上,您这样使用:

1
2
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速度要快得多,无论剪贴板内容的大小如何,它只需要一两秒钟。


自API级别11开始,直接使用adb shell命令不起作用。

这是一个解决方案。


尝试一下:

i32:将整数INT写入发送包裹。

s16:将UTF-16字符串STR写入发送包裹中。