在做一些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做的IME,可以adb shell input輸入unicode,它幫你轉成中文之類的字元。沒真正嘗試過。