adb shell输入unicode字符

Era*_*dir 8 unicode android text adb

了解ADB Shell输入事件中描述的基本键映射,我可以很好地模拟文本输入和特殊键.但是Unicode字符怎么样?例如,我想使用德国QWERTZ键盘布局的变音符号.

这让我:

$ adb shell input text ö
Killed
Run Code Online (Sandbox Code Playgroud)

所以它似乎崩溃了

adb shell input text \xFC
Run Code Online (Sandbox Code Playgroud)

在输入上打印xFC.我已尝试过这些事件,getevent但我没有找到直接映射,我也查看了键映射文件/system/usr/keylayout/Qwerty.kl

我相信唯一的可能性是通过剪贴板,但正如在使用adb shell文本粘贴到Android模拟器剪贴板的问题中所指出的,似乎不知道如何将它用于Android Ice Cream Sandwich或更高版本.

小智 15

我编写了一个接受广播意图的虚拟键盘,因此您可以通过adb将unicode字符发送到editText视图.

例如adb shell am broadcast -a ADB_INPUT_TEXT --es msg"你好吗!你好!"

这是github项目:https: //github.com/senzhk/ADBKeyBoard

希望这个小项目能有所帮助.


小智 7

其实ADBKeyBoard非常好!谢谢Eric Tang!

一些有用的扩展,以方便使用:

从adb切换到ADBKeyBoard:

   adb shell ime set com.android.adbkeyboard/.AdbIME   
Run Code Online (Sandbox Code Playgroud)

检查可用的le虚拟键盘:

ime list -a  
Run Code Online (Sandbox Code Playgroud)

如果您的shell不接受"!",请使用简单的引号字符 - 不像上面的示例那样加倍 (说明标志)

adb shell am broadcast -a ADB_INPUT_TEXT --es msg 'Accented characters here'
Run Code Online (Sandbox Code Playgroud)

切换回原始虚拟键盘:(在我的情况下swype ...)

adb shell ime set com.nuance.swype.dtc/com.nuance.swype.input.IME  
Run Code Online (Sandbox Code Playgroud)

使用adb over wifi来简化你的生活... :)

  • 这需要将应用程序安装在设备上.使用"adb"本身有没有办法实现它? (3认同)

Die*_*ano 3

input不起作用,因为它只能通过虚拟键盘发送单键事件(如果您不明白我的意思,请检查源代码)。

\n

我认为剩下的唯一方法是使用Instrumentation我想您可以为您的Activity创建一个测试,然后执行以下操作:

\n
                final Instrumentation instrumentation = getInstrumentation();\n                final long downTime = SystemClock.uptimeMillis();\n                final long eventTime = SystemClock.uptimeMillis();\n                \n                final KeyEvent altDown = new KeyEvent(downTime, eventTime, KeyEvent.ACTION_DOWN,\n                        KeyEvent.KEYCODE_GRAVE, 1, KeyEvent.META_ALT_LEFT_ON);\n                final KeyEvent altUp = new KeyEvent(downTime, eventTime, KeyEvent.ACTION_UP,\n                        KeyEvent.KEYCODE_GRAVE, 1, KeyEvent.META_ALT_LEFT_ON);\n                \n                instrumentation.sendKeySync(altDown);\n                instrumentation.sendCharacterSync(KeyEvent.KEYCODE_A);\n                instrumentation.sendKeySync(altUp);\n                instrumentation.sendKeySync(altDown);\n                instrumentation.sendCharacterSync(KeyEvent.KEYCODE_E);\n                instrumentation.sendKeySync(altUp);\n                instrumentation.sendKeySync(altDown);\n                instrumentation.sendCharacterSync(KeyEvent.KEYCODE_I);\n                instrumentation.sendKeySync(altUp);\n                instrumentation.sendKeySync(altDown);\n                instrumentation.sendCharacterSync(KeyEvent.KEYCODE_O);\n                instrumentation.sendKeySync(altUp);\n                instrumentation.sendKeySync(altDown);\n                instrumentation.sendCharacterSync(KeyEvent.KEYCODE_U);\n                instrumentation.sendKeySync(altUp);\n
Run Code Online (Sandbox Code Playgroud)\n

这将发送修改后的密钥: \xc3\xa0\xc3\xa8\xc3\xac\xc3\xb2\xc3\xb9

\n

更新2022

\n

/sf/answers/4995704451/显示了使用AndroidViewClient/culebraCulebraTester2-public后端的另一个解决方案。

\n