adb shellinputunicode字符

了解ADB Shellinput事件中描述的基本键映射,我可以仿真文本input和特殊键,效果很好。 但是Unicode字符呢? 例如,我想使用德语QWERTZ键盘布局的元音变音。

这让我:

$ adb shell input text ö Killed 

所以它似乎崩溃了

 adb shell input text \xFC 

在input上打印xFC。 我已经尝试了与getevent的事件,但我还没有find一个直接的映射,我也看到了keymapping文件/system/usr/keylayout/Qwerty.kl

我相信唯一的可能性是通过剪贴板,但正如在问题中指出的使用adb shell将文本粘贴到Android模拟器剪贴板 ,似乎不知道如何使用它的Android冰淇淋三明治或更高版本。

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

我认为剩下的唯一方法就是使用Instrumentation 。 我想你可以创build一个testing你的活动 ,然后做这样的事情:

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

这将发送修改的键: àèìòù

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

例如adbshell广播-a ADB_INPUT_TEXT –es msg“你好吗!你好!

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

希望这个小项目会有所帮助。

其实ADBKeyBoard是非常好的! 感谢Eric Tang!

一些有用的扩展为舒适的用法:

从adb切换到ADBKeyBoard:

  adb shell ime set com.android.adbkeyboard/.AdbIME 

检查您可用的虚拟键盘:

 ime list -a 

使用简单的引号字符 – 不要像上面的例子那样使用双引号 – 如果你的shell不接受“!” (说明符号)

 adb shell am broadcast -a ADB_INPUT_TEXT --es msg 'Accented characters here' 

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

 adb shell ime set com.nuance.swype.dtc/com.nuance.swype.input.IME 

通过WiFi使用adb来简化你的生活… 🙂