使用MonkeyRunner、adb shell向Android应用中自动输入中文字符

在做一些Android自动化脚本,比如向手机QQ中输入中文聊天内容,由于使用Robotium、Appium等工具来做时,由于TX作了签名校验的,所以登录不了QQ的。后来只能使用最傻的MonkeyRunner来做,不过它是完全模拟人为点击,而数据中文就很麻烦了。为此我们尝试了多种方案,简单分享一下:

1. 通过PC的剪贴板与Android模拟器中共享来实现:先将要输入的中文放到PC的剪贴板中,再到Android模拟器中粘贴到QQ聊天输入框中。其缺点是,很不稳定,有时候成功,有时候比较莫名的失败。

2. adb shell input 命令可直接将字符串输入到Android应用的Input框中,但问题来了,它不支持unicode字符啊(仅支持ASICC字符)。于是,我根据网上资料找到了一个方法:使用unicode字符原样输出,然后再转化为encoded字符。比如:https://github.com/bingwei/inputchineseviaadb,就实现了这样的转换,在app中复制到android的剪贴板中,然后可以在QQ聊天框等地方粘贴就好了。当然这里他这个gitlab项目中utils/inputunicode.py文件有点小bug,对于python 2.x,需要在adb shell input后跟的string用encode(‘unicode-escape’)编码。
这个种方式的速度不是很快,不过还是算不错的,因为本来做UI自动化耽误个一两秒钟也是可以接受的;我们最终就是采用了这种方案,目前运行下来是非常稳定的。

3. 使用一个外部REST服务器,搞一个key-value对放到REST sever中,其中key是全英文的,而value中可以包含中文;然后通过adb shell input将key传入到Andoid中,在Android中根据key去请求远程REST API从而得到包含中文字符的Value。没试过这种方法,不过应该是可行的;但其效率估计比第2中方法还要效率低下。

4. 一种专门为unicode做的输入法,可以adb shell input输入unicode,它帮你转成中文之类的字符。没真正尝试过。

2016-01-02 更新:2015年做App UI自动化时,后来发现了这个,也很不错:https://github.com/senzhk/ADBKeyBoard 可用于直接输入中文字。

参考资料:
http://blog.csdn.net/xiqobai/article/details/8204653
https://github.com/bingwei/inputchineseviaadb
https://github.com/smilejay/android-app/tree/master/CopyToClipboard
https://github.com/senzhk/ADBKeyBoard

master

Stay hungry, stay foolish.

5 Comments

  1. 兄弟,android input text ‘中文’ 这个adb shell 命令 不支持中文, 请问您是怎么解决的?我用你的办法,并没有解决。请问能加个QQ 联系下吗 2-9-6-5-8-9-8-2-2-0

    • 一般不上QQ 谢谢!~ 上面给的方案可以解决的,看你是否有仔细去尝试探索。

  2. ADBKeyBoard可以输入中文,当时在android中还是显示乱码

  3. 貌似通过binder传进来的字符被改了,看ascii码,那种编码都不对;没办法,只能改ADBKeyBoard里面的代码,输入的时候填byte数组,ADBKeyBoard再转成字符

发表评论

电子邮件地址不会被公开。 必填项已用*标注