Evenimentele de intrare ADB Shell (Programare, Android, Adb)

KVR a intrebat.

Care este diferența de bază între adb shell input keyevent și adb shell sendevent? Pe care dintre ele ar trebui să le folosesc pentru introducerea unui caracter? Sunt aceleași coduri de taste pe care le transmitem la ambele comenzi?

8 răspunsuri
LionCoder

De către adb shell input keyevent, , fie un event_code fie un string va fi trimis la dispozitiv.

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

Câteva valori posibile pentru event_code sunt:

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 utilitar trimite evenimente de atingere sau de tastatură, precum și alte evenimente pentru simularea evenimentelor hardware. Consultați acest articol pentru detalii: Android, shell de nivel scăzut click pe ecran.

Comentarii

  • Bună ziua @chwentong! Poți să mă ajuți cu indicarea vreunui loc care să explice „input text <string>” într-un mod mai detaliat? Nu găsesc nimic despre asta, similar cu developer.android.com/reference/android/android/view/KeyEvent.html Mulțumesc! –  > Por stansult.
  • Bună ziua! Pot să întreb cum pot introduce șirul care conține spațiu într-o consolă de linie de comandă Windows? Încerc să introduc >adb shell input text "a b" dar nu funcționează. –  > Por Wei Yang.
  • de unde ați luat informația despre comanda „input”? ce alte caracteristici sunt ascunse din documentație (aici : developer.android.com/tools/help/adb.html ) ? –  > Por dezvoltator android.
  • @WeiYang, încercați acest lucru , >adb shell input text „a%sb” –  > Por Natan Lotério.
  • Această postare a fost foarte utilă atunci când ecranul tabletei mele Android s-a spart și nu mai răspundea la atingeri. Am reușit să „tastez” pinul folosind adb shell input keyevent și să mă orientez. Mulțumesc! –  > Por j0aqu1n.
Rene Barbosa

Actualizare:

Folosind adb shell input:

Introduceți text:

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

(obs: %s înseamnă SPAȚIU)

..

Coduri de eveniment:

adb shell input keyevent 82

(82 —> MENU_BUTTON)

„Pentru mai multe coduri de evenimente cheie, consultați lista de mai jos”

..

Atingeți poziția X,Y:

adb shell input tap 500 1450

Pentru a găsi poziția exactă X,Y pe care doriți să o atingeți, accesați:

Settings > Developer Options > Bifați opțiunea POINTER SLOCATION

..

Swipe X1 Y1 X2 Y2 [durata(ms)]:

adb shell input swipe 100 500 100 1450 100

în acest exemplu X1=100, Y1=500, X2=100, Y2=1450, Durata = 100ms

..

Apăsare lungă X Y:

adb shell input swipe 100 500 100 500 250

folosim aceeași comandă pentru o glisare pentru a emula o apăsare lungă.

în acest exemplu X=100, Y=500, Durata = 250ms

..

Lista actualizată a codurilor de evenimente:

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"

Lista completă a comenzilor poate fi găsită pe: http://developer.android.com/reference/android/view/KeyEvent.html

Comentarii

  • Această listă este evident mai lungă pentru versiunile ulterioare de Android, de exemplu pentru 4.2.2.2 le putem găsi în android.view.KeyEvent.java, , unde acestea ajung până la 219. –  > Por not2qubit.
  • Mulțumesc pentru comanda swipe, am căutat-o foarte mult. –  > Por David.
  • În opțiunile dezvoltatorului, activați „Pointer location” pentru a determina coordonatele corecte atunci când introduceți evenimente tactile. –  > Por Dick Lucas.
  • Doar pentru informații suplimentare. Swipe a funcționat pe telefonul meu doar dacă timpul era mai mare de 120!!! adb shell input swipe 200 800 200 400 200 –  > Por Jose Rodrigues.
  • adb shell input keyevent KEYCODE_HOME de intrare adb shell funcționează și el –  > Por Alexander Haroldo da Rocha.
Fred Clift

De asemenea, dacă doriți să trimiteți spații încorporate cu comanda input, utilizați %s

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

va produce

acesta este un exemplu

fiind input.

% în sine nu are nevoie de scăpări – doar de expresia specială %s este tratată în mod special. Acest lucru duce, desigur, la întrebarea evidentă cum se introduce șirul literal %s, , ceea ce ar trebui să faceți cu două comenzi separate.

Comentarii

  • Există vreo modalitate de a dezactiva corecția automată aici? În rest, funcționează foarte bine 🙂 –  > Por Patrick Boos.
  • Iată un script bash simplu care se ocupă de scăpări, astfel încât să puteți spune doar atext "Hey, I'm here" și să funcționeze. –  > Por Dan Dascalescu.
H Ribeiro

Apropo, dacă încercați să găsiți o modalitate de a trimite ghilimele duble către dispozitiv, încercați următoarele:

adb shell shell input text ‘

Nu sunt sigur de ce nu există un cod de eveniment pentru ghilimele, dar această soluție de rezolvare își face treaba. De asemenea, dacă utilizați MonkeyDevice (sau ChimpChat), ar trebui să testați fiecare caracter înainte de a invoca monkeyDevice.type, altfel nu veți obține nimic atunci când încercați să trimiteți „

Comentarii

  • Am făcut un script bash simplu care să se ocupe de toate scăpările, astfel încât să puteți spune pur și simplu atext "Hey, I'm here" și va funcționa. –  > Por Dan Dascalescu.
Y_Yen

O altă diferență:

  • adb shell input” apelează input.jar pentru a procesa și trimite codul cheie din stratul Java al framework-ului android.
  • adb sendevent” este de fapt un cod c (parte a utilitarului toolbox) care trimite codul de intrare direct în /dev/input…. al subsistemului de intrare Linux.

Mai multe detalii despre urmărirea codului în interiorul cadrului AOSP pot fi găsite aici:

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

Comentarii

  • deci, pe scurt, sendevent este mult mai rapid decât adb input! –  > Por GorvGoyl.
Espen M. S.

Am scris un script Powershell simplu pentru utilizatorii de Windows pentru a mapa cheile la evenimentele de intrare în shell adb. Și să controleze un dispozitiv Android de la distanță prin LAN. nu știu dacă cineva îl găsește util, dar îl voi împărtăși oricum.

$ip = 192.168.1.8
cd D:Androidandroid-sdk-windowsplatform-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)
    }
}

Karthik Bollisetti

Dacă doriți să trimiteți un text către un anumit dispozitiv atunci când mai multe dispozitive sunt conectate. Mai întâi căutați dispozitivele conectate folosind dispozitive adb

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

apoi obțineți ID-ul dispozitivului dvs. specific și încercați următoarele

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

Comentarii

  • Ar trebui să fie%text –  > Por royatirek.
MorenoMdz

Pentru a trimite un apel de reîncărcare către o aplicație React-Native care rulează pe un dispozitiv android: adb shell input keyboard text "rr"

Tags:,