[Android] 使用 adb shell 傳送文字到模擬器裡
常常有時候想要把電腦上複製的一段文字,直接貼到 Android 模擬器裡去,
可是 Android 模擬器並沒有提供這樣的功能…
有些可行的解法是在模擬器裡裝一些 app,像是 AirDroid 之類的,
大概就能透過 app 的功能,把剪貼簿的內容傳進去…
今天正好又在 stackoverflow: Paste text on Android Emulator
查到另外一種方式,是利用 adb shell~
舉例來說,下面的指令會把 abc 這三個字元傳送到模擬器裡面去:
adb shell input text "abc"
但如果字串中有空白的話,用像是 adb shell input text “abc def” 是不行的,
只有 abc 會被傳過去,空白字元和之後的字元都傳不過去…
空白字元要改用 %s 取代才行,所以需要輸入下列的指令,
才能在模擬中打出 “abc def” 這樣包含空白字元的字串:
adb shell input text "abc%sdef"
在 Mac 上的話,用 pbpaste 可以取得目前剪貼簿的內容,
因此我寫了下面這個小 python 程式,用來取得剪貼簿的內容,
再分段用 adb shell 傳送到模擬器中~
這邊要分段是因為如果一次傳過去的話,adb 會出現錯誤訊息…
同時分段的大小如果稍大的話,adb shell 可能沒有錯誤訊息,
但傳過去的文字會漏 (像我原本設成 100 的話就會漏),
因此後來是設成 32,比較 OK~
#!/usr/bin/env python import subprocess MAX_CHUNK_LEN = 32 # Get text from clipboard proc = subprocess.Popen(["pbpaste"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) text_to_send = proc.communicate()[0] text_len_all = len(text_to_send) text_len_sent = 0 for i in xrange(text_len_all/MAX_CHUNK_LEN + 1): # Get a partial text chunk = text_to_send[i*MAX_CHUNK_LEN:(i+1)*MAX_CHUNK_LEN] print "Sending (%02d%%): %s" % (100*text_len_sent/text_len_all, chunk) proc = subprocess.Popen(["adb", "shell", "input", "text", chunk.replace(" ", "%s")], stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdout, stderr) = proc.communicate() text_len_sent += len(chunk)
這個方法目前似乎只能傳送 ASCII 字元,像中文字元是傳不過去的…
而且傳送的速度會有點慢,可以看到一個字一個字在模擬器上出現…
不過如果只是少量傳送的話,也還算是可用的工具啦~
(本頁面已被瀏覽過 890 次)