ADBシェルの入力イベント


222

基本的な違いは何ですかadb shell input keyeventとはadb shell sendevent?文字の入力にはどちらを使用すればよいですか?キーコードは、両方のコマンドに渡すものと同じですか?

回答:


417

によってadb shell input keyeventevent_codeまたはのいずれかstringがデバイスに送信されます。

usage: input [text|keyevent]
  input text <string>
  input keyevent <event_code>

可能な値event_codeは次のとおりです。

0 -->  "KEYCODE_UNKNOWN" 
1 -->  "KEYCODE_MENU" 
2 -->  "KEYCODE_SOFT_RIGHT" 
3 -->  "KEYCODE_HOME" 
4 -->  "KEYCODE_BACK" 
5 -->  "KEYCODE_CALL" 
6 -->  "KEYCODE_ENDCALL" 
7 -->  "KEYCODE_0" 
8 -->  "KEYCODE_1" 
9 -->  "KEYCODE_2" 
10 -->  "KEYCODE_3" 
11 -->  "KEYCODE_4" 
12 -->  "KEYCODE_5" 
13 -->  "KEYCODE_6" 
14 -->  "KEYCODE_7" 
15 -->  "KEYCODE_8" 
16 -->  "KEYCODE_9" 
17 -->  "KEYCODE_STAR" 
18 -->  "KEYCODE_POUND" 
19 -->  "KEYCODE_DPAD_UP" 
20 -->  "KEYCODE_DPAD_DOWN" 
21 -->  "KEYCODE_DPAD_LEFT" 
22 -->  "KEYCODE_DPAD_RIGHT" 
23 -->  "KEYCODE_DPAD_CENTER" 
24 -->  "KEYCODE_VOLUME_UP" 
25 -->  "KEYCODE_VOLUME_DOWN" 
26 -->  "KEYCODE_POWER" 
27 -->  "KEYCODE_CAMERA" 
28 -->  "KEYCODE_CLEAR" 
29 -->  "KEYCODE_A" 
30 -->  "KEYCODE_B" 
31 -->  "KEYCODE_C" 
32 -->  "KEYCODE_D" 
33 -->  "KEYCODE_E" 
34 -->  "KEYCODE_F" 
35 -->  "KEYCODE_G" 
36 -->  "KEYCODE_H" 
37 -->  "KEYCODE_I" 
38 -->  "KEYCODE_J" 
39 -->  "KEYCODE_K" 
40 -->  "KEYCODE_L" 
41 -->  "KEYCODE_M" 
42 -->  "KEYCODE_N" 
43 -->  "KEYCODE_O" 
44 -->  "KEYCODE_P" 
45 -->  "KEYCODE_Q" 
46 -->  "KEYCODE_R" 
47 -->  "KEYCODE_S" 
48 -->  "KEYCODE_T" 
49 -->  "KEYCODE_U" 
50 -->  "KEYCODE_V" 
51 -->  "KEYCODE_W" 
52 -->  "KEYCODE_X" 
53 -->  "KEYCODE_Y" 
54 -->  "KEYCODE_Z" 
55 -->  "KEYCODE_COMMA" 
56 -->  "KEYCODE_PERIOD" 
57 -->  "KEYCODE_ALT_LEFT" 
58 -->  "KEYCODE_ALT_RIGHT" 
59 -->  "KEYCODE_SHIFT_LEFT" 
60 -->  "KEYCODE_SHIFT_RIGHT" 
61 -->  "KEYCODE_TAB" 
62 -->  "KEYCODE_SPACE" 
63 -->  "KEYCODE_SYM" 
64 -->  "KEYCODE_EXPLORER" 
65 -->  "KEYCODE_ENVELOPE" 
66 -->  "KEYCODE_ENTER" 
67 -->  "KEYCODE_DEL" 
68 -->  "KEYCODE_GRAVE" 
69 -->  "KEYCODE_MINUS" 
70 -->  "KEYCODE_EQUALS" 
71 -->  "KEYCODE_LEFT_BRACKET" 
72 -->  "KEYCODE_RIGHT_BRACKET" 
73 -->  "KEYCODE_BACKSLASH" 
74 -->  "KEYCODE_SEMICOLON" 
75 -->  "KEYCODE_APOSTROPHE" 
76 -->  "KEYCODE_SLASH" 
77 -->  "KEYCODE_AT" 
78 -->  "KEYCODE_NUM" 
79 -->  "KEYCODE_HEADSETHOOK" 
80 -->  "KEYCODE_FOCUS" 
81 -->  "KEYCODE_PLUS" 
82 -->  "KEYCODE_MENU" 
83 -->  "KEYCODE_NOTIFICATION" 
84 -->  "KEYCODE_SEARCH" 
85 -->  "TAG_LAST_KEYCODE"

sendeventユーティリティは、タッチやキーボードのイベントだけでなく、ハードウェア・イベントをシミュレートするための他のイベントを送信します。詳細については、この記事を参照してください:Android、低レベルのシェルが画面をクリックします


1
こんにちは@chwentong!「入力テキスト<string>」をより詳細に説明している場所を指摘してください。developer.android.com/reference/android/view/KeyEvent.htmlのように、何も見つかりません 。ありがとうございます。
スタンサルト2012

こんにちは!Windowsコマンドラインコンソールでスペースを含む文字列を入力するにはどうすればよいですか。私は入ろうとします>adb shell input text "a b"が、働きません。
魏ヤン

1
「input」コマンドの情報はどこで入手しましたか?他のどの機能がドキュメントから隠されていますか(ここ:developer.android.com/tools/help/adb.html)?
Android開発者

4
@WeiYang、これを試してください> adb shell input text "a%sb"
NatanLotérioFeb

3
この投稿は、Androidタブレットの画面が壊れてタッチしても反応しない場合に非常に役立ちました。adb shell input keyeventを使用してピンを「タイプ」し、自分の道を見つけることができました。ありがとう!
j0aqu1n 2015年

194

更新中:

使用adb shell input

テキストを挿入:

adb shell input text "insert%syour%stext%shere"

(obs:%sはスペースを意味します)

..

イベントコード:

adb shell input keyevent 82

(82 ---> MENU_BUTTON)

「その他のキーイベントコードについては、以下のリストを参照してください」

..

X、Y位置をタップします。

adb shell input tap 500 1450

タップする正確なX、Y位置を見つけるには、次の場所に移動します。

設定>開発者向けオプション> POINTER SLOCATIONオプションをチェック

..

スワイプX1 Y1 X2 Y2 [期間(ミリ秒)]:

adb shell input swipe 100 500 100 1450 100

この例では、X1 = 100、Y1 = 500、X2 = 100、Y2 = 1450、期間= 100ms

..

LongPress XY:

adb shell input swipe 100 500 100 500 250

同じコマンドをスワイプに使用して長押しをエミュレートします

この例では、X = 100、Y = 500、期間= 250ms

..

イベントコード更新リスト:

0 -->  "KEYCODE_0" 
1 -->  "KEYCODE_SOFT_LEFT" 
2 -->  "KEYCODE_SOFT_RIGHT" 
3 -->  "KEYCODE_HOME" 
4 -->  "KEYCODE_BACK" 
5 -->  "KEYCODE_CALL" 
6 -->  "KEYCODE_ENDCALL" 
7 -->  "KEYCODE_0" 
8 -->  "KEYCODE_1" 
9 -->  "KEYCODE_2" 
10 -->  "KEYCODE_3" 
11 -->  "KEYCODE_4" 
12 -->  "KEYCODE_5" 
13 -->  "KEYCODE_6" 
14 -->  "KEYCODE_7" 
15 -->  "KEYCODE_8" 
16 -->  "KEYCODE_9" 
17 -->  "KEYCODE_STAR" 
18 -->  "KEYCODE_POUND" 
19 -->  "KEYCODE_DPAD_UP" 
20 -->  "KEYCODE_DPAD_DOWN" 
21 -->  "KEYCODE_DPAD_LEFT" 
22 -->  "KEYCODE_DPAD_RIGHT" 
23 -->  "KEYCODE_DPAD_CENTER" 
24 -->  "KEYCODE_VOLUME_UP" 
25 -->  "KEYCODE_VOLUME_DOWN" 
26 -->  "KEYCODE_POWER" 
27 -->  "KEYCODE_CAMERA" 
28 -->  "KEYCODE_CLEAR" 
29 -->  "KEYCODE_A" 
30 -->  "KEYCODE_B" 
31 -->  "KEYCODE_C" 
32 -->  "KEYCODE_D" 
33 -->  "KEYCODE_E" 
34 -->  "KEYCODE_F" 
35 -->  "KEYCODE_G" 
36 -->  "KEYCODE_H" 
37 -->  "KEYCODE_I" 
38 -->  "KEYCODE_J" 
39 -->  "KEYCODE_K" 
40 -->  "KEYCODE_L" 
41 -->  "KEYCODE_M" 
42 -->  "KEYCODE_N" 
43 -->  "KEYCODE_O" 
44 -->  "KEYCODE_P" 
45 -->  "KEYCODE_Q" 
46 -->  "KEYCODE_R" 
47 -->  "KEYCODE_S" 
48 -->  "KEYCODE_T" 
49 -->  "KEYCODE_U" 
50 -->  "KEYCODE_V" 
51 -->  "KEYCODE_W" 
52 -->  "KEYCODE_X" 
53 -->  "KEYCODE_Y" 
54 -->  "KEYCODE_Z" 
55 -->  "KEYCODE_COMMA" 
56 -->  "KEYCODE_PERIOD" 
57 -->  "KEYCODE_ALT_LEFT" 
58 -->  "KEYCODE_ALT_RIGHT" 
59 -->  "KEYCODE_SHIFT_LEFT" 
60 -->  "KEYCODE_SHIFT_RIGHT" 
61 -->  "KEYCODE_TAB" 
62 -->  "KEYCODE_SPACE" 
63 -->  "KEYCODE_SYM" 
64 -->  "KEYCODE_EXPLORER" 
65 -->  "KEYCODE_ENVELOPE" 
66 -->  "KEYCODE_ENTER" 
67 -->  "KEYCODE_DEL" 
68 -->  "KEYCODE_GRAVE" 
69 -->  "KEYCODE_MINUS" 
70 -->  "KEYCODE_EQUALS" 
71 -->  "KEYCODE_LEFT_BRACKET" 
72 -->  "KEYCODE_RIGHT_BRACKET" 
73 -->  "KEYCODE_BACKSLASH" 
74 -->  "KEYCODE_SEMICOLON" 
75 -->  "KEYCODE_APOSTROPHE" 
76 -->  "KEYCODE_SLASH" 
77 -->  "KEYCODE_AT" 
78 -->  "KEYCODE_NUM" 
79 -->  "KEYCODE_HEADSETHOOK" 
80 -->  "KEYCODE_FOCUS" 
81 -->  "KEYCODE_PLUS" 
82 -->  "KEYCODE_MENU" 
83 -->  "KEYCODE_NOTIFICATION" 
84 -->  "KEYCODE_SEARCH" 
85 -->  "KEYCODE_MEDIA_PLAY_PAUSE"
86 -->  "KEYCODE_MEDIA_STOP"
87 -->  "KEYCODE_MEDIA_NEXT"
88 -->  "KEYCODE_MEDIA_PREVIOUS"
89 -->  "KEYCODE_MEDIA_REWIND"
90 -->  "KEYCODE_MEDIA_FAST_FORWARD"
91 -->  "KEYCODE_MUTE"
92 -->  "KEYCODE_PAGE_UP"
93 -->  "KEYCODE_PAGE_DOWN"
94 -->  "KEYCODE_PICTSYMBOLS"
...
122 -->  "KEYCODE_MOVE_HOME"
123 -->  "KEYCODE_MOVE_END"

コマンドの完全なリストは、http//developer.android.com/reference/android/view/KeyEvent.htmlにあります。


1
このリストは、例えば4.2.2のために、我々はそれらを見つけることができ、以降のAndroidのバージョンについては明らかに長くなってandroid.view.KeyEvent.java彼らは219までの数
not2qubit

スワイプコマンドをありがとう、私はそれをたくさん探していました。
David

開発者向けオプションで、「ポインターの場所」を有効にして、タッチイベントを入力するときに正しい座標を決定します。
ディックルーカス

追加情報のみ。スワイプは、時間が120を超える場合にのみ私の電話で機能しました。adb shell input swipe 200 800 200 400 200
ホセロドリゲス

74

また、入力コマンドで埋め込みスペースを送信する場合は、%sを使用します

adb shell input text 'this%sis%san%sexample'   

譲ります

this is an example 

入力されています。

%それ自体はエスケープする必要がありません-特別な%sペアのみが特別に扱われます。これはもちろん、リテラル文字列をどのように入力するかという明白な質問につながります%s...これは、2つの別々のコマンドで行う必要があります。


ここで自動修正をオフにする方法はありますか?それ以外の場合はうまく機能します:)
Patrick Boos 2014年

エスケープを処理する単純なbashスクリプトは次のとおりatext "Hey, I'm here"です。つまり、言うだけで機能します。
Dan Dascalescu 2017年

12

ちなみに、デバイスに二重引用符を送信する方法を見つけようとしている場合は、次のことを試してください。

adbシェルの入力テキスト '\ "'

引用符のイベントコードがない理由はわかりませんが、この回避策で十分です。また、MonkeyDevice(またはChimpChat)を使用している場合は、monkeyDevice.typeを呼び出す前に各文字をテストする必要があります。そうしないと、送信しようとしても何も起こりません "


1
すべてのエスケープを処理する単純なbashスクリプト作成したので、言うだけatext "Hey, I'm here"で機能します。
Dan Dascalescu 2017年

9

もう1つの違い:

  • adb shell input」はinput.jarを呼び出して、AndroidフレームワークのJavaレイヤーからキーコードを処理して送信します。
  • adb sendevent」は、実際には入力コードをLinux入力サブシステムの/ dev / input ....に直接送信するcコード(ツールボックスユーティリティの一部)です。

AOSPフレームワーク内の詳細なコードトレースは、次の場所にあります。

http://www.srcmap.org/sd_share/4/aba57bc6/AOSP_adb_shell_input_Code_Trace.html#RefId=7c8f5285


つまり、sendeventはadb入力よりもはるかに高速です。
JerryGoyal 2017年

7

Windowsユーザーがadbシェルの入力イベントにキーをマップするための簡単なPowershellスクリプトを作成しました。また、AndroidデバイスをLAN経由でリモート制御します。誰かが役に立つと思うかどうかはわかりませんが、とにかく共有します。

$ip = 192.168.1.8
cd D:\Android\android-sdk-windows\platform-tools\; .\adb.exe disconnect $ip; .\adb.exe connect $ip
$adbKeyNum = @{LeftWindows = "1"; F1 = "3"; Enter = "66"; UpArrow = "19"; DownArrow = "20"; LeftArrow = "21"; RightArrow = "22"; Add = "24";
        Subtract = "25"; Backspace = "4"; P = "26"}

while(1 -eq 1){
    $keyPress = [Console]::ReadKey($true).Key
    if ([string]$keyPress -eq "F10"){
        .\adb.exe disconnect $ip
        exit
    }
    elseif ([string]$keyPress -eq "F6"){
        $string = Read-Host -Prompt 'Input the string: '
        .\adb.exe shell input text $string
    }
    elseif ($adbKeyNum.ContainsKey([string]$keyPress)){
        echo $adbKeyNum.Get_Item([string]$keyPress)
        .\adb.exe shell input keyevent $adbKeyNum.Get_Item([string]$keyPress)
    }
}

4

複数のデバイスが接続されているときに特定のデバイスにテキストを送信する場合。adbデバイスを使用して接続されたデバイスを最初に探す

adb devices
List of devices attached
3004e25a57192200        device
31002d9e592b7300        device

次に、特定のデバイスIDを取得し、次のことを試してください

adb -s 31002d9e592b7300 shell input text 'your text'

your%textである必要があります
royatirek 2018年

2

Androidデバイスで実行されているReact-Nativeアプリにリロード呼び出しを送信するには: adb shell input keyboard text "rr"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.