source

ADB 셸 입력 이벤트

lovecheck 2023. 8. 15. 11:14
반응형

ADB 셸 입력 이벤트

사이의 기본적인 차이점은 무엇입니까?adb shell input keyevent그리고.adb shell sendevent제가 문자를 입력할 때 어떤 것을 사용해야 합니까?두 명령에 전달하는 키 코드가 동일합니까?

타고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, 화면에서 낮은 수준의 셸 클릭.

업데이트 중:

용사를 합니다.adb shell input:

텍스트 삽입:

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

(obs: %s는 공간을 의미합니다)

..

이벤트 코드:

adb shell input keyevent 82

(82 ---> 메뉴_버튼)

"자세한 이벤트 코드는 아래 목록을 참조하십시오.

..

X,Y 위치를 누릅니다.

adb shell input tap 500 1450

탭할 정확한 X,Y 위치를 찾으려면 다음으로 이동합니다.

Settings > Developer Options > PINOTHER SLOCATION 옵션 확인

..

X1 Y1 X2 Y2 [시간(ms)]:

adb shell input swipe 100 500 100 1450 100

이 예에서는 X1=100, Y1=500, X2=100, Y2=1450, 지속 시간 = 100ms

..

길게 누르기 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 에서 확인할 수 있습니다.

또한입명로포함공된보사다다용음니합을면내려백을 사용합니다.%s

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

항복할 것입니다

이것은 예시입니다.

입력 중입니다.

%그 자체는 탈출할 필요가 없습니다 - 오직 특별한 것만.%s쌍은 특수하게 처리됩니다.이것은 물론 문자 그대로의 문자열을 입력하는 방법에 대한 명백한 질문으로 이어집니다.%s두 개의 개별 명령으로 수행해야 합니다.

윈도우 사용자들이 키를 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)
    }
}

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

adb 셸 입력 텍스트 '\"'

인용문에 대한 이벤트 코드가 없는 이유는 모르겠지만 이 해결 방법이 효과적입니다.또한 MonkeyDevice(또는 ChimpChat)를 사용하는 경우 MonkeyDevice를 호출하기 전에 각 문자를 테스트해야 합니다.입력하십시오. 그렇지 않으면 "를 보내려고 해도 아무것도 얻지 못합니다.

또 다른 차이점:

  • "adb shell input"은 input.jar를 호출하여 안드로이드 프레임워크의 Java 계층에서 키코드를 처리하고 전송하는 것입니다.
  • "adb sendevent"는 실제로 입력 코드를 Linux 입력 하위 시스템의 /dev/input...로 직접 보내는 c 코드(공구함 유틸리티의 일부)입니다.

AOSP Framework 내부에 대한 자세한 코드 추적은 다음에서 확인할 수 있습니다.

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

여러 장치가 연결되었을 때 특정 장치로 텍스트를 보내려는 경우.먼저 adb 장치를 사용하여 연결된 장치를 찾습니다.

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

그런 다음 특정 장치 ID를 가져오고 다음을 시도합니다.

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

Android 장치에서 실행 중인 React-Native 앱에 다시 로드 호출을 보내는 방법adb shell input keyboard text "rr"

언급URL : https://stackoverflow.com/questions/7789826/adb-shell-input-events

반응형