Події введення оболонки 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
звідки ви отримали інформацію команди "введення"? які інші функції приховані від документації (тут: developer.android.com/tools/help/adb.html )?
андроїд розробник

4
@WeiYang, спробуйте це,> текст введення оболонки adb "a% sb"
Natan Lotério

3
Цей пост був дуже корисним, коли екран мого планшета Android зламався і він не реагував на дотики. Мені вдалося "ввести" штифт, використовуючи adb shell 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, яку ви бажаєте Торкніться, перейдіть до:

Налаштування> Опції для розробника> Перевірте параметр РОЗМІЩЕННЯ Вказівника

..

Проведіть пальцем 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
Цей список, очевидно, довший для пізніших версій Android, наприклад, для 4.2.2 ми можемо їх знайти в android.view.KeyEvent.java , де їх кількість до 219.
not2qubit

Дякую за команду swipe, я багато чого шукав.
Девід

У параметрах розробника увімкніть "Місце розташування вказівника", щоб визначити правильні координати під час введення сенсорних подій.
Дік Лукас

Просто для додаткової інформації. Проведіть Swipe лише на моєму телефоні, якщо час перевищував 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... що вам доведеться робити з двома окремими командами.


Будь-який спосіб тут вимкнути автоматичне виправлення? Інакше чудово працює :)
Патрік Боос

Ось простий сценарій bash, щоб подбати про втечу, тож ви можете просто сказати, atext "Hey, I'm here"і він працює.
Дан Даскалеску

12

До речі, якщо ви намагаєтесь знайти спосіб надсилання подвійних лапок на пристрій, спробуйте наступне:

текст вхідної оболонки adb '\ "'

Я не впевнений, чому немає коду подій для лапок, але цей спосіб виконує цю роботу. Крім того, якщо ви використовуєте MonkeyDevice (або ChimpChat), ви повинні протестувати кожен caracter перед тим, як викликати monkeyDevice.type, інакше ви нічого не отримаєте при спробі надіслати "


1
Я створив простий сценарій bash, щоб подбати про всі втечі, так що ви можете просто сказати, atext "Hey, I'm here"і це працює.
Дан Даскалеску

9

Ще одна відмінність:

  • " введення оболонки adb " викликає input.jar для обробки та надсилання ключового коду з шару Java в рамках андроїд.
  • " adb sendevent " - це фактично код коду (частина утиліти інструментарію), який надсилає вхідний код безпосередньо в / dev / input .... підсистеми введення Linux.

Більш детально простежити коди всередині AOSP Framework можна тут:

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


тож у двох словах, шлях швидше, ніж adb input!
JerryGoyal

7

Я написав простий скрипт Powershell для користувачів Windows, щоб зіставити клавіші для подій введення оболонки adb. І дистанційно керувати пристроєм 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

то отримайте свій ідентифікатор пристрою та спробуйте виконати наступне

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

Це має бути ваш% текст
royatirek

2

Щоб надіслати дзвінок для перезавантаження в додаток React-Native, що працює на пристрої Android: adb shell input keyboard text "rr"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.