ADB 쉘 입력 이벤트


222

adb shell input keyevent과 의 기본 차이점은 무엇입니까 adb shell sendevent? 문자를 입력 할 때 어떤 것을 사용해야합니까? 키 코드가 두 명령 모두에 전달 된 것과 동일합니까?

답변:


417

함으로써 adb shell input keyevent, 양자 택일 event_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! “입력 텍스트 <문자열>”에 대해보다 자세하게 설명하는 곳을 알려주시겠습니까? developer.android.com/reference/android/view/KeyEvent.html 과 비슷한 것에 대해 아무것도 찾을 수 없습니다 . 감사합니다!
stansult

안녕하세요! Windows 명령 행 콘솔에 공백이 포함 된 문자열을 입력하는 방법을 물어볼 수 있습니까? 들어 가려고 >adb shell input text "a b"했지만 작동하지 않습니다.
웨이 양

1
"input"명령의 정보를 어디서 얻었습니까? 설명서에 숨겨진 다른 기능은 무엇입니까 (여기 : developer.android.com/tools/help/adb.html )?
안드로이드 개발자

4
@WeiYang, 이것을보십시오> adb 쉘 입력 텍스트 "a % sb"
Natan Lotério

3
이 게시물은 내 Android 태블릿 화면이 깨져서 터치에 응답하지 않을 때 매우 유용했습니다. adb shell input keyevent를 사용하여 핀을 "입력"하고 내 길을 찾을 수있었습니다. 감사!
j0aqu1n

194

업데이트 중 :

사용 adb shell input:

텍스트 삽입 :

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

(obs : % s는 SPACE를 의미합니다)

..

이벤트 코드 :

adb shell input keyevent 82

(82 ---> MENU_BUTTON)

"추가 키 이벤트 코드는 아래 목록을 참조하십시오."

..

X, Y 위치를 누릅니다 :

adb shell input tap 500 1450

탭하려는 정확한 X, Y 위치를 찾으려면 다음으로 이동하십시오.

설정> 개발자 옵션> POINTER SLOCATION 옵션 확인

..

스 와이프 X1 Y1 X2 Y2 [기간 (ms)] :

adb shell input swipe 100 500 100 1450 100

이 예에서 X1 = 100, Y1 = 500, X2 = 100, Y2 = 1450, Duration = 100ms

..

LongPress XY :

adb shell input swipe 100 500 100 500 250

우리는 스 와이프에 동일한 명령을 사용하여 길게 누르는 것을 모방합니다.

이 예에서 X = 100, Y = 500, Duration = 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.view.KeyEvent.java 에서 찾을 수있다 . 여기서는 최대 219 개까지 가능하다.
not2qubit

슬쩍 명령 주셔서 감사합니다, 나는 그것을 많이 찾고 있었다.
David

개발자 옵션에서 "포인터 위치"를 활성화하여 터치 이벤트를 입력 할 때 올바른 좌표를 결정하십시오.
Dick Lucas

추가 정보를 위해. 시간이 120보다 큰 경우 스 와이프 만 내 휴대 전화에서 작동했습니다 !! adb shell input swipe 200 800 200 400 200
Jose Rodrigues

74

또한 input 명령으로 포함 된 공백을 보내려면 % s를 사용하십시오.

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

생산할 것이다

this is an example 

입력 중입니다.

%그 자체는 이스케이프 할 필요가 없습니다-특수 %s쌍 만 특별 하게 취급됩니다. 이것은 물론 리터럴 문자열을 입력하는 방법에 대한 명백한 질문으로 이어집니다 %s... 두 개의 별도 명령으로해야합니다.


여기서 자동 수정을 끄는 방법은 무엇입니까? 그렇지 않으면 훌륭하게 작동합니다 :)
Patrick Boos

이스케이프를 처리 하는 간단한 bash 스크립트 가 있으므로 간단히 말하면 atext "Hey, I'm here"작동합니다.
Dan Dascalescu

12

그런데 장치에 큰 따옴표를 보내는 방법을 찾으려면 다음을 시도하십시오.

adb 쉘 입력 텍스트 '\ "'

따옴표에 대한 이벤트 코드가없는 이유는 확실하지 않지만이 해결 방법이 작동합니다. 또한 MonkeyDevice (또는 ChimpChat)를 사용하는 경우 monkeyDevice.type을 호출하기 전에 각 caracter를 테스트해야합니다. 그렇지 않으면 "


1
나는 모든 탈출을 처리하기 위해 간단한 bash 스크립트 를 만들었 으므로 말할 수 atext "Hey, I'm here"있고 작동합니다.
Dan Dascalescu

9

다른 차이점은 다음과 같습니다.

  • " 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

7

Windows 사용자가 키를 adb 쉘 입력 이벤트에 매핑하는 간단한 Powershell 스크립트를 작성했습니다. LAN을 통해 원격으로 Android 기기를 제어 할 수 있습니다. 누군가 유용하다고 생각하는지 모르겠지만 어쨌든 공유하겠습니다.

$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'

귀하의 텍스트
여야

2

안드로이드 장치에서 실행되는 React-Native 앱으로 재로드 호출을 보내려면 : adb shell input keyboard text "rr"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.