2010-12-08 35 views
26

Tôi đang cố gắng gửi sự kiện chạm tới thiết bị bằng lệnh vỏ ADB, để tôi có thể thực hiện một số tự động hóa cơ bản cho kiểm tra giao diện người dùng. Tôi đã theo dõi các cuộc thảo luận trong một số chủ đề trước đây về vấn đề này.gửi sự kiện cảm ứng từ ADB tới thiết bị

Tôi xác nhận về việc nhận các sự kiện và sử dụng người gửi, gửi 6 sự kiện cho mỗi lần chạm (xcoord, ycoord, 2 cho báo chí, 2 để phát hành) và rất dễ sử dụng thông tin này cho người gửi. màn hình cảm ứng cho một thiết bị dường như tạo ra quá nhiều sự kiện.

Có ai đó đã quản lý để gửi sự kiện chạm từ ADB tới thiết bị không? Bạn có thể vui lòng chia sẻ giải pháp.

Tôi thực sự đánh giá cao sự trợ giúp của bạn.

Tôi đang làm việc để ghi lại các sự kiện chạm trên điện thoại. Sau đó tôi muốn gửi cùng một sự kiện trở lại thiết bị như một phần của kiểm tra UI.

Xin giúp

+0

Thanh toán http://marian.schedenig.name/2014/07/03/remote-control-your-android-phone-through- adb/ –

Trả lời

27

Để gửi sự kiện liên lạc bạn cần làm:

1 Set phối:

adb shell sendevent /dev/input/event2 3 0 x 
adb shell sendevent /dev/input/event2 3 1 y 

2 Gửi sự kiện liên lạc (phải có 0 0 0 cặp):

adb shell sendevent /dev/input/event2 1 330 1 
adb shell sendevent /dev/input/event2 0 0 0 

3 Gửi sự kiện phát hành ngón tay (phải có 0 0 0 cặp):

adb shell sendevent /dev/input/event2 1 330 0 
adb shell sendevent /dev/input/event2 0 0 0 

Xin lưu ý:

1 Bạn có thể ghi lại các sự kiện:

adb shell getevent 

2 nếu bạn sử dụng getevent tất cả các giá trị sự kiện là trong hex.

Trân trọng, Yahor

+1

Bạn có nghĩa là, hồ sơ getevent trong hex, và sendevent chỉ chấp nhận thập phân ??? – MarcoS

+0

Có, in ra được bằng hex, nhưng chỉ hoạt động với số thập phân. Không có lỗi in, chỉ cần không làm bất cứ điều gì :) – gilm

+0

Giải pháp ở đây là gì? Tôi có phải chuyển đổi tất cả các hex thành thập phân theo cách thủ công không? – TeaLeave

4

Bạn có thể muốn sử dụng monkeyrunner như thế này:

$ monkeyrunner 
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 
>>> device = MonkeyRunner.waitForConnection() 
>>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP) 

Bạn cũng có thể làm một kéo, bắt đầu activies, vv Có một cái nhìn tại các api cho MonkeyDevice.

37

Android đi kèm với công cụ dòng lệnh nhập liệu có thể mô phỏng các sự kiện nhập linh tinh. Để mô phỏng khai thác sử dụng:

input tap x y 

Bạn có thể dùng adb shell để chạy các lệnh từ xa:

adb shell input tap x y 

Các tùy chọn khác bao gồm:

[email protected]:/ $ input 
input 
usage: input ... 
     input text <string> 
     input keyevent <key code number or name> 
     input [touchscreen|touchpad|touchnavigation] tap <x> <y> 
     input [touchscreen|touchpad|touchnavigation] swipe <x1> <y1> <x2> <y2> [duration(ms)] 
     input trackball press 
     input trackball roll <dx> <dy> 
+1

Tôi chỉ có 'văn bản' và' keyevent' –

+0

Một số android đi kèm với các tệp nhị phân bị tê liệt. –

14

tôi cố gắng ghi lại một phiên họp và phát lại nó chỉ với bash và adb.

Điều này tôi đã làm, tôi hy vọng nó sẽ giúp ai đó.

Ghi một loạt các sự kiện

  1. Thiết lập pc để ghi lại dữ liệu trong một tập tin (/tmp/android-touch-events.log)

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log 
    
  2. làm một số nội dung trên điện thoại
  3. dừng lệnh adb trên máy tính với ctrl-c

Phát lại sự kiện ghi

Lệnh này sẽ thực hiện chuyển đổi hex trong awk

$ awk '{printf "%s %d %d %d\n", substr($1, 1, length($1) -1), strtonum("0x"$2), strtonum("0x"$3), strtonum("0x"$4)}' /tmp/android-touch-events.log | xargs -l adb shell sendevent 
+0

"awk: bailing out at source line 1" lỗi này đang đến. Bạn có ý kiến ​​gì không? – nikhil84

+0

lệnh phát lại không hoạt động trên OSX. xargs: tùy chọn bất hợp pháp - l; awk: gọi hàm undefined strtonum – prageeth

+1

@geeth có vẻ như [ai đó cũng đã tìm thấy nó] (http://stackoverflow.com/questions/8199934/strtonum-in-os-x-not-found). Xin lỗi vì tôi đang sử dụng GNU/Linux. – MaxChinni

Các vấn đề liên quan