ADB Kabuk Girdi Olayları


222

Arasındaki temel fark nedir adb shell input keyeventve adb shell sendevent? Karakter girmek için hangisini kullanmalıyım? Anahtar kodları her iki komuta da verdiğimiz ile aynı mı?

Yanıtlar:


417

İle adb shell input keyevent, ya a event_codeya da a stringcihaza gönderilir.

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

İçin bazı olası değerler 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"

Yardımcı sendeventprogram, dokunma veya klavye olaylarının yanı sıra donanım olaylarını simüle etmek için diğer olayları gönderir. Ayrıntılar için bu makaleye bakın: Android, düşük seviyeli kabuk tıklaması .


1
Merhaba @chwentong! Lütfen “giriş metni <dizgi>” ni daha ayrıntılı açıklayan herhangi bir yeri işaret etmemde bana yardımcı olabilir misiniz? Bu konuda developer.android.com/reference/android/view/KeyEvent.html benzeri bir şey bulamıyorum Teşekkürler!
stansult

Selam! Windows komut satırı konsolunda boşluk içeren dizeyi nasıl girebilirim diye sorabilir miyim? Girmeye çalışıyorum >adb shell input text "a b"ama çalışmıyorum.
Wei Yang

1
"input" komutunun bilgisini nereden aldınız? belgelerden başka hangi özellikler gizlenmiştir (burada: geliştirici.android.com/tools/help/adb.html )?
android geliştirici

4
@WeiYang, bunu deneyin,> adb kabuk giriş metni "a% sb"
Natan Lotério

3
Bu yazı, Android tabletimin ekranı bozulduğunda ve dokunuşlara cevap vermeyecek şekilde çok yardımcı oldu. Ben adb kabuk giriş keyevent kullanarak pimi "yazmak" başardı ve yolumu bulmak mümkün. Teşekkürler!
j0aqu1n

194

Güncelleme:

Kullanma adb shell input:

Metin ekle:

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

(obs:% s SPACE anlamına gelir)

..

Olay kodları:

adb shell input keyevent 82

(82 ---> MENU_BUTTON)

"Daha fazla temel kod için aşağıdaki listeye bakın"

..

X, Y konumuna dokunun:

adb shell input tap 500 1450

Dokunmak istediğiniz tam X, Y konumunu bulmak için şu adrese gidin:

Ayarlar> Geliştirici Seçenekleri> POINTER SLOCATION seçeneğini işaretleyin

..

Kaydırma X1 Y1 X2 Y2 [süre (ms)]:

adb shell input swipe 100 500 100 1450 100

bu örnekte X1 = 100, Y1 = 500, X2 = 100, Y2 = 1450, Süre = 100 ms

..

LongPress XY:

adb shell input swipe 100 500 100 500 250

uzun bir basımı taklit etmek için aynı komutu kullanıyoruz

bu örnekte X = 100, Y = 500, Süre = 250 ms

..

Etkinlik Kodları Güncelleme Listesi:

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"

Komutların tam listesini şu adreste bulabilirsiniz: http://developer.android.com/reference/android/view/KeyEvent.html


1
Bu liste biz bunları bulabilirsiniz 4.2.2 için örneğin daha sonra Android sürümleri için açıkçası daha uzundur android.view.KeyEvent.java onlar 219. kadar sayı,
not2qubit

Kaydırma komutu için teşekkürler, bunu çok arıyordum.
David

Geliştirici seçeneklerinde, dokunma olaylarını girerken doğru koordinatları belirlemek için "İşaretçi konumu" nu etkinleştirin.
Dick Lucas

Sadece daha fazla bilgi için. Swipe sadece zaman 120'den büyükse telefonumda çalıştı! adb shell input swipe 200 800 200 400 200
Jose Rodrigues

74

Ayrıca, input komutuyla katıştırılmış boşluklar göndermek istiyorsanız,% s kullanın

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

getirecek

this is an example 

girdi olmak.

%kendisi kaçmaya ihtiyaç duymaz - sadece özel %sçift özel olarak tedavi edilir. Bu, elbette %s, iki ayrı komutla yapmanız gereken değişmez dizgenin nasıl girileceğine dair açık soruya götürür .


Burada otomatik düzeltmeyi kapatmanın herhangi bir yolu var mı? Aksi takdirde harika çalışıyor :)
Patrick Boos

İşte kaçmakla ilgilenmek için basit bir bash betiği , böylece sadece söyleyebilir atext "Hey, I'm here"ve çalışır.
Dan Dascalescu

12

Bu arada, cihaza çift tırnak göndermenin bir yolunu bulmaya çalışıyorsanız, aşağıdakileri deneyin:

adb kabuk giriş metni '\ "'

Neden teklifler için olay kodu olmadığından emin değilim, ancak bu geçici çözüm işi yapıyor. Ayrıca, MonkeyDevice (veya ChimpChat) kullanıyorsanız, monkeyDevice.type'i çağırmadan önce her caracter'i test etmelisiniz, aksi takdirde göndermeye çalıştığınızda hiçbir şey almazsınız "


1
Tüm kaçanlarla ilgilenmek için basit bir bash betiği yaptım , böylece söyleyebilirsin atext "Hey, I'm here"ve işe yarıyor.
Dan Dascalescu

9

Diğer bir fark:

  • " adb kabuk girişi " android çerçevenin Java katmanından anahtar kodunu işlemek ve göndermek için input.jar öğesini çağırıyor.
  • " adb sendevent " aslında giriş kodunu doğrudan Linux girdi alt sisteminin / dev / input .... öğesine gönderen c kodudur (araç kutusu yardımcı programının bir parçasıdır).

AOSP Çerçevesinin içine daha ayrıntılı kod izleme burada bulunabilir:

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


yani kısaca sendevent adb girişinden çok daha hızlı!
JerryGoyal

7

Windows kullanıcıları için kabuk giriş olaylarını anahtarlamak için basit bir Powershell betiği yazdım. Ve bir Android cihazı LAN üzerinden uzaktan kontrol edin. Kimsenin onu yararlı bulup bulmadığını bilmiyorum, ama yine de paylaşacağım.

$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

Birden fazla cihaz bağlandığında belirli bir cihaza metin göndermek istiyorsanız. İlk olarak adb cihazlarını kullanarak bağlı cihazları arayın

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

ardından özel cihaz kimliğinizi alın ve aşağıdakileri deneyin

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

% Metniniz olmalı
royatirek

2

Bir android cihazda çalışan React-Native uygulamasına yeniden yükleme çağrısı göndermek için: adb shell input keyboard text "rr"

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.