Acara Input Shell ADB


222

Apa perbedaan mendasar antara adb shell input keyeventdan adb shell sendevent? Mana yang harus saya gunakan untuk memasukkan karakter? Apakah kode kunci sama dengan yang kita berikan pada kedua perintah?

Jawaban:


417

Oleh adb shell input keyevent, salah satu event_codeatau stringakan dikirim ke perangkat.

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

Beberapa nilai yang mungkin untuk event_codeadalah:

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"

The sendeventutilitas mengirimkan sentuh atau keyboard peristiwa, serta acara-acara lain untuk mensimulasikan peristiwa hardware. Lihat artikel ini untuk detail: Android, klik tingkat rendah shell di layar .


1
Hai @ chwentong! Bisakah Anda membantu saya dengan menunjuk ke tempat mana pun yang menjelaskan “teks masukan <string>” dengan cara yang lebih terperinci? Saya tidak dapat menemukan apa pun tentangnya, mirip dengan developer.android.com/reference/android/view/KeyEvent.html Terima kasih!
stansult

Hai! Bolehkah saya bertanya bagaimana saya bisa memasukkan string yang berisi ruang di konsol baris perintah windows? Saya mencoba masuk >adb shell input text "a b"tetapi tidak berhasil.
Wei Yang

1
di mana Anda mendapatkan informasi dari perintah "input"? fitur apa lagi yang disembunyikan dari dokumentasi (di sini: developer.android.com/tools/help/adb.html )?
Pengembang Android

4
@WeiYang, coba ini,> adb shell input text "a% sb"
Natan Lotério

3
Posting ini sangat membantu ketika layar tablet Android saya pecah dan tidak akan merespon sentuhan. Saya dapat "mengetik" pin dengan menggunakan adb shell input keyevent dan menemukan jalan saya. Terima kasih!
j0aqu1n

194

Memperbarui:

Menggunakan adb shell input:

Sisipkan teks:

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

(obs:% s berarti SPACE)

..

Kode acara:

adb shell input keyevent 82

(82 ---> MENU_BUTTON)

"Untuk kode keyevents lainnya lihat daftar di bawah"

..

Ketuk X, posisi Y:

adb shell input tap 500 1450

Untuk menemukan X yang tepat, posisi Y yang ingin Anda Ketuk buka:

Pengaturan> Opsi Pengembang> Periksa opsi POINTER SLOCATION

..

Geser X1 Y1 X2 Y2 [durasi (ms)]:

adb shell input swipe 100 500 100 1450 100

dalam contoh ini X1 = 100, Y1 = 500, X2 = 100, Y2 = 1450, Durasi = 100ms

..

LongPress XY:

adb shell input swipe 100 500 100 500 250

kami menggunakan perintah yang sama untuk geser untuk meniru pers lama

dalam contoh ini X = 100, Y = 500, Durasi = 250ms

..

Daftar Kode Kode Diperbarui:

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"

Daftar lengkap perintah dapat ditemukan di: http://developer.android.com/reference/android/view/KeyEvent.html


1
Daftar ini jelas lebih lama untuk versi Android yang lebih baru, misalnya untuk 4.2.2 kita dapat menemukannya di android.view.KeyEvent.java , di mana jumlahnya mencapai 219.
not2qubit

Terima kasih untuk perintah swipe, saya banyak mencari itu.
David

Dalam opsi pengembang, aktifkan "Lokasi penunjuk" untuk menentukan koordinat yang benar saat memasukkan peristiwa sentuh.
Dick Lucas

Hanya untuk informasi tambahan. Gesek hanya berfungsi pada ponsel saya jika waktunya lebih besar dari 120 !! adb shell input swipe 200 800 200 400 200
Jose Rodrigues

74

Juga, jika Anda ingin mengirim ruang yang disematkan dengan perintah input, gunakan% s

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

akan menghasilkan

this is an example 

menjadi input.

%itu sendiri tidak perlu melarikan diri - hanya %spasangan khusus yang diperlakukan secara khusus. Ini tentu saja mengarah pada pertanyaan yang jelas tentang bagaimana memasukkan string literal %s... yang harus Anda lakukan dengan dua perintah terpisah.


Adakah cara untuk mematikan koreksi otomatis di sini? Jika tidak berhasil :)
Patrick Boos

Berikut ini adalah skrip bash sederhana untuk mengurus pelarian, jadi Anda bisa mengatakannya atext "Hey, I'm here"dan berhasil.
Dan Dascalescu

12

Omong-omong, jika Anda mencoba menemukan cara untuk mengirim tanda kutip ganda ke perangkat, coba yang berikut ini:

adb shell input text '\ "'

Saya tidak yakin mengapa tidak ada kode acara untuk penawaran, tetapi solusi ini berhasil. Juga, jika Anda menggunakan MonkeyDevice (atau ChimpChat), Anda harus menguji setiap caracter sebelum memanggil monkeyDevice.type, jika tidak, Anda tidak akan mendapatkan apa-apa saat Anda mencoba mengirim "


1
Saya telah membuat skrip bash sederhana untuk menangani semua pelarian, jadi Anda bisa mengatakannya atext "Hey, I'm here"dan itu berhasil.
Dan Dascalescu

9

Satu perbedaan lain:

  • " adb shell input " memanggil input.jar untuk memproses dan mengirim kode kunci dari lapisan Java kerangka android.
  • " adb sendevent " sebenarnya adalah kode c (bagian dari utilitas toolbox) yang mengirimkan kode input langsung ke / dev / input .... dari subsistem input Linux.

Pelacakan kode lebih detail ke dalam AOSP Framework dapat ditemukan di sini:

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


jadi singkatnya sendevent jauh lebih cepat daripada input adb!
JerryGoyal

7

Saya menulis script Powershell sederhana untuk pengguna windows untuk memetakan kunci untuk adb shell input events. Dan mengendalikan perangkat Android dari jarak jauh melalui LAN. Saya tidak tahu apakah ada yang menemukan itu berguna, tetapi saya akan membagikannya.

$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

Jika Anda ingin mengirim teks ke perangkat tertentu ketika beberapa perangkat terhubung. Pertama mencari perangkat yang terpasang menggunakan perangkat adb

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

kemudian dapatkan id perangkat spesifik Anda dan coba yang berikut ini

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

Itu harus menjadi% teks Anda
royatirek

2

Untuk mengirim panggilan ulang ke aplikasi React-Native yang berjalan di perangkat android: adb shell input keyboard text "rr"

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.