web-dev-qa-db-ja.com

「adbシェル入力テキスト」はソフトウェアのキーボード入力をシミュレートしますか?

adb Shell input text "sometext"

OR

adb Shell input keyevent eventid

これらはそれぞれ仮想/ハードウェアキーボードからの実際の入力をシミュレートしますか?

これらのコマンドのドキュメントがdeveloper.Android.com/に見つかりませんでした

これらのコマンドの信頼できるドキュメントはありますか?

10
l'-'l

adb Shell input help生成(入力デバイスの長いリストの後):

The commands and default sources are:
  text <string> (Default: touchscreen)
  keyevent [--longpress] <key code number or name> ... (Default: keyboard)
  tap <x> <y> (Default: touchscreen)
  swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
  press (Default: trackball)
  roll <dx> <dy> (Default: trackball)

したがって、「テキスト」は実際に仮想(デフォルト:タッチスクリーン)用であり、キーイベントは物理(デフォルト:キーボード)用であるように見えます。

テキスト入力デバイスを上書きできます-adb Shell input keyboard text "foo"は問題なく動作します。ただし、画面から生のキーコードを送信することはできません。

5
SF.

に関連する

_adb Shell input text "some\ text"
_

ソースコードしか見つかりません:例: Android 8.1はこちら

メソッドprivate void sendText(int source, String text) {はエンコーディングに関連しています。

そして、私が見つけた前の方法で使用されている_KeyCharacterMap.VIRTUAL_KEYBOARD_を検索します 「仮想キー文字コード表ファイル」という見出しの説明はここにあります

その情報から私は古いSM-G900Fを調べました。 _/system/usr/keychars/Virtual.kcm_の下で見つけました。そのファイル内で、主要なイベントを最も一般的な文字(ほとんどはASCIIのみ)にマップします。

だからあなたの質問に:

これらはそれぞれ仮想/ハードウェアキーボードからの実際の入力をシミュレートしますか?

はい、コードはテキストを受け取り、KeyCharacterMap.VIRTUAL_KEYBOARDを介してキーイベントにマップし直そうとし、それらを送信します。

私の経験では、すべての未知の文字はテキスト全体のキャンセルにつながります。また、一部の文字をエスケープする必要があります--- %sまたは '\'を含むスペース、&などの他の特殊文字もエスケープする必要があります。

また、一部のデバイスでは、_adb Shell input text "<longText>"_で記述された長いテキスト(約200文字)が部分的に失われていることを経験しました。メーカーによっては見えました。

3
BitLauncher

adb Shell input *コマンドに利用できる適切な説明があります。入力するだけです。

adb Shell input help

adb Shell keyeventコマンドの場合、さまざまな キーコード を使用できます。

2
Ravi Bhayani