Giả lập chạm, vuốt, gõ chữ và bấm phím bằng adb shell input
Dùng adb shell input tap, swipe, text và keyevent để điều khiển Android từ máy tính, kèm bảng keycode, mẹo tìm toạ độ và script tái hiện lỗi.
adb shell input cho phép bạn giả lập chạm, vuốt, gõ chữ và bấm phím trên thiết bị Android mà không cần chạm vào máy: input tap 540 1200 chạm vào một điểm, input swipe kéo giữa hai điểm, input text gõ vào ô đang được focus và input keyevent 4 bấm Back. Chúng là xương sống của các script tái hiện lỗi nhanh và tự động hoá demo. Bài này tổng hợp các dạng lệnh hoạt động ổn định, những keycode bạn thực sự dùng, và cách tìm toạ độ. Nếu bạn chủ yếu chỉ cần bấm qua lại, màn hình trực tiếp trong ADBKit làm được việc đó bằng chuột; các lệnh bên dưới dành cho mọi thứ còn lại.
Note: Mọi ví dụ giả định chỉ có một thiết bị đã bật gỡ lỗi USB. Nếu có nhiều máy, thêm
-s <serial>sauadb. Lệnh được viết dạngadb shell ...cho dòng lệnh; trong shell tương tác hoặc ngăn Shell của ADBKit, bỏ tiền tốadb shell.
Chạm và vuốt bằng input tap và input swipe
input tap nhận toạ độ X và Y theo pixel màn hình, tính từ góc trên bên trái theo hướng màn hình hiện tại:
adb shell input tap 540 1200input swipe nhận điểm bắt đầu, điểm kết thúc và thời lượng tuỳ chọn tính bằng mili giây. Vuốt ngắn để cuộn, vuốt dài để kéo chậm:
adb shell input swipe 540 1600 540 400 300Không có lệnh riêng cho nhấn giữ, nhưng một cú vuốt bắt đầu và kết thúc tại cùng một điểm với thời lượng dài sẽ làm được việc đó:
adb shell input swipe 540 1200 540 1200 1000Bạn cũng có thể chỉ định nguồn đầu vào, hữu ích với máy có bút: input touchscreen tap 540 1200. Các cử chỉ đa điểm như chụm để thu phóng không làm được bằng input; chúng cần framework UI test hoặc sendevent.
Tìm toạ độ cần chạm
Mấu chốt là biết chạm vào đâu. Bốn cách, từ dễ nhất đến chính xác nhất:
- Vị trí con trỏ. Trong Tuỳ chọn nhà phát triển, bật Vị trí con trỏ; một thanh trên đỉnh màn hình hiện X/Y của ngón tay theo thời gian thực. Bài Tuỳ chọn nhà phát triển Android cho kiểm thử giải thích tuỳ chọn này cùng lớp phủ Hiện thao tác chạm liên quan. Từ dòng lệnh:
adb shell settings put system pointer_location 1. - Pixel ảnh chụp màn hình. Chụp bằng
adb exec-out screencap -p > s.png, mở trong trình chỉnh ảnh và đọc vị trí pixel của nút. Pixel ảnh chụp chính là pixel màn hình. - getevent.
adb shell getevent -lin ra sự kiện chạm thô khi bạn chạm màn hình. Giá trịABS_MT_POSITION_X/Ythuộc dải riêng của tấm cảm ứng, có thể khác độ phân giải màn hình. - Dump giao diện.
adb shell uiautomator dumpghi một tệp XML chứa bounds của mọi view, là cách bền vững nhất để script nhắm vào một nút cụ thể.
Toạ độ phụ thuộc vào độ phân giải và hướng màn hình. Kiểm tra bằng adb shell wm size, và tính theo phần trăm chiều rộng, chiều cao nếu script phải chạy trên nhiều máy.
Gõ chữ bằng input text
input text gửi một chuỗi vào ô đang được focus. Điểm cần lưu ý là shell trên thiết bị phân tích chuỗi này, nên dấu cách và ký tự đặc biệt cần xử lý cẩn thận. Thay dấu cách bằng %s và bọc toàn bộ trong dấu nháy đơn:
adb shell input text 'hello%sworld'Các ký tự có ý nghĩa với shell như &, |, <, >, (, ), ; và $ phải được thoát bằng dấu gạch chéo ngược ngay cả khi nằm trong dấu nháy, vì chuỗi được diễn giải hai lần. Điền biểu mẫu đăng nhập trông như sau:
adb shell input text 'tester@example.com'
adb shell input keyevent 61
adb shell input text 'Pa\$\$word1'
adb shell input keyevent 66Keycode 61 là Tab và 66 là Enter. input text chỉ xử lý ổn định ký tự ASCII; chữ có dấu, dấu tiếng Việt, emoji và ký tự CJK thường bị bỏ qua hoặc lỗi. Với văn bản không phải ASCII, hãy dán từ clipboard, dùng ứng dụng bàn phím test như ADB Keyboard, hoặc dùng test hook của chính ứng dụng.
Bấm phím bằng input keyevent
input keyevent nhận mã keycode dạng số hoặc tên KEYCODE_. Cả hai dòng dưới đều bấm Home:
adb shell input keyevent 3
adb shell input keyevent KEYCODE_HOMEThêm --longpress để nhấn giữ, ví dụ input keyevent --longpress 26 mở menu nguồn. Bạn cũng có thể gửi nhiều phím trong một lệnh: input keyevent 4 4 3 bấm Back hai lần rồi Home. Đây là các keycode mà tester dùng nhiều nhất:
| Mã | Tên | Tác dụng |
|---|---|---|
| 3 | HOME | Về màn hình chính |
| 4 | BACK | Quay lại |
| 187 | APP_SWITCH | Ứng dụng gần đây |
| 82 | MENU | Phím menu cũ; đánh thức một số màn hình khoá |
| 26 | POWER | Bật/tắt màn hình; nhấn giữ để mở menu nguồn |
| 223 | SLEEP | Tắt màn hình |
| 224 | WAKEUP | Bật màn hình |
| 24 / 25 | VOLUME_UP / VOLUME_DOWN | Âm lượng |
| 164 | VOLUME_MUTE | Tắt tiếng |
| 85 | MEDIA_PLAY_PAUSE | Phát hoặc tạm dừng media |
| 66 | ENTER | Gửi hoặc xuống dòng |
| 67 | DEL | Xoá lùi (Backspace) |
| 61 | TAB | Chuyển sang ô kế tiếp |
| 111 | ESCAPE | Đóng hộp thoại ở một số ứng dụng |
| 277 / 278 / 279 | CUT / COPY / PASTE | Thao tác clipboard trong ô đang focus |
| 19 đến 22 | DPAD_UP/DOWN/LEFT/RIGHT | Di chuyển focus, hữu ích trên TV và khi kiểm tra trợ năng |
Các lệnh liên quan cho kiểm thử bằng script
Một vài lệnh ngoài input kết hợp rất tốt với những lệnh trên.
Đánh thức và mở khoá
Một lượt test mới thường bắt đầu ở màn hình khoá tối đen. Đánh thức máy, rồi vuốt lên để bỏ qua màn hình khoá không có mã PIN:
adb shell input keyevent KEYCODE_WAKEUP
adb shell input swipe 540 1800 540 600 200Nếu có mã PIN, tiếp tục với input text 1234 và input keyevent 66. Một máy test riêng không đặt khoá sẽ đơn giản và an toàn hơn.
Mở deep link, ứng dụng và ngăn thông báo
adb shell am start -a android.intent.action.VIEW -d "https://example.com/item/42"
adb shell am start -n com.example.app/.MainActivity
adb shell am force-stop com.example.app
adb shell cmd statusbar expand-notifications
adb shell cmd statusbar collapseam start với VIEW là cách nhanh nhất để kiểm thử deep link và App Links; am force-stop giết ứng dụng để lần khởi chạy kế tiếp là khởi động nguội.
Kích thước và mật độ màn hình
Lỗi bố cục thường phụ thuộc vào kích thước màn hình. Giả lập màn hình nhỏ hơn hoặc dày điểm ảnh hơn mà không cần máy khác:
adb shell wm size 720x1280
adb shell wm density 320
adb shell wm size reset
adb shell wm density resetNhớ rằng toạ độ input tap sẽ thay đổi khi bạn ghi đè kích thước.
Viết script vòng lặp tái hiện lỗi
Xâu chuỗi các lệnh này trong một script shell biến lỗi chập chờn thành lỗi bạn có thể gặp cả trăm lần. Vòng lặp sau mở một màn hình qua deep link, cuộn, quay lại và lặp lại:
#!/bin/bash
for i in $(seq 1 50); do
adb shell am start -a android.intent.action.VIEW -d "myapp://orders/42"
sleep 2
adb shell input swipe 540 1600 540 400 300
sleep 1
adb shell input keyevent 4
sleep 1
doneHãy dùng sleep thoải mái: input trả về trước khi giao diện phản ứng xong, và một cú chạm rơi đúng lúc đang chuyển cảnh là nguyên nhân phổ biến nhất khiến script chập chờn. Theo dõi adb logcat ở một terminal thứ hai để bắt crash.
Warning: Lệnh
inputlà đầu vào thật. Một script chạm nhầm toạ độ trên điện thoại cá nhân có thể xoá tin nhắn hoặc gửi một khoản thanh toán. Hãy chạy vòng lặp tái hiện trên máy test, và kiểm trawm sizetrước.
Làm bằng chuột trong ADBKit
ADBKit hiển thị màn hình thiết bị trực tiếp trong Chrome hoặc Edge qua WebUSB, và hầu hết các lệnh trên đều tương ứng với chuột hoặc một nút trên thanh công cụ:
| Lệnh | Tương đương trong ADBKit |
|---|---|
input tap x y | Nhấp chuột vào màn hình phản chiếu |
input swipe | Nhấp và kéo trên màn hình |
input keyevent 4 / 3 / 187 | Nút Back, Home và App Switcher |
input keyevent 24 / 25 | Nút Volume Up và Volume Down |
wm size để đổi hướng màn hình | Nút xoay màn hình |
- Mở ADBKit, kết nối điện thoại qua USB rồi bấm Connect device, sau đó chạm Allow trên máy.
- Bật chế độ xem màn hình trực tiếp; chọn 720p trong cài đặt chất lượng luồng nếu kết nối chậm.
- Nhấp để chạm và kéo để vuốt. Bật Hiện thao tác chạm trong Tuỳ chọn nhà phát triển nếu muốn các cú nhấp hiện rõ trong bản ghi Screen Record.
- Với
input text,am start,wm sizehoặc bất cứ thứ gì không có trên thanh công cụ, mở ngăn Shell và gõ lệnh không kèm tiền tốadb shell.
Gõ chữ trực tiếp bằng bàn phím vào màn hình phản chiếu chưa được hỗ trợ, nên hãy dùng ngăn Shell với input text cho việc đó. Tại một thời điểm chỉ một chương trình giữ được kết nối USB, nên hãy đóng các phiên adb hoặc scrcpy nếu ADBKit không kết nối được. Với phần còn lại của nhóm lệnh, xem bảng tóm tắt lệnh ADB và bài điều khiển Android từ trình duyệt.