- vừa được xem lúc

Sử dụng ADB để tạo một số Automation Tool thú vị trên điện thoại Android

0 1 4.3k

Người đăng: Nguyễn Đình Long

Theo Viblo Asia

I. Tổng quan:

Hey mọi người, nhìn vào chiếc ảnh trên kia chắc rằng mọi người sẽ tự hỏi rằng : " Hệ thống này dùng để làm gì ? Hệ thống này điều khiển bằng tay hay tự động hoàn toàn nhỉ ? blabla ". Mình cũng từng có cơ hội được nhìn những hệ thống như thế này rồi và nó sử dụng với nhiều mục đích nhất định tùy theo nhu cầu của mỗi người như: xây dựng hệ thống tự động buff view, share livestream bán hàng, tăng người theo dõi trên các nền tảng như Youtube, Tiktok, Facebook,... Vậy làm thế nào để control được những con máy Android này ? Có rất nhiều công cụ, framework để có thể làm được điều này nhưng mình thấy mọi người hay sử dụng đó là ADB viết tắt của Android Debug Bridge.

ADB viết tắt của Android Debug Bridge là một công cụ Command Line như một chiếc cầu nối (Bridge) giữa thiết bị Android và Máy tính thông qua các dòng lệnh cmd để có thể giao tiếp với nhau, sử dụng để điều khiển và giao tiếp với điện thoại Android. Cho phép bạn truy cập vào Unix shell để thi hành các lệnh nhân Unix trên thiết bị.

II. Cài đặt :

Để điều khiển được điện thoại điều kiện tiên quyết là bạn phải mở chế độ USB Debuging trên điện thoại nhó. Link tham khảo cách bật ở đây.

Tiếp theo chúng ta sẽ install ADB tool trên PC của mình để giao tiếp với điện thoại nhé. Mình dùng Python và hệ điều hành ubuntu nên sẽ sử dụng package này pure-python-adb :

pip install pure-python-adb

Note thêm: Nếu mọi người không có điện thoại thật để vọc thì dùng giả lập Android trên PC luôn nhé, mình hay sử dụng một phần mềm mã nguồn mở có tên là scrcpy. Mọi người install ở đây.

Bây giờ tất cả những thứ chúng ta cần đã Setup rồi, mở điện thoại lên cắm cable để kết nối điện thoại và máy tính nhé. Gõ command line này để start kết nối nhé :

sudo adb start-server // ready for connect
* daemon not running. * starting it now on port 5037 

Viết một đoạn script nhỏ get thiết bị kết nối để điều khiển nào :

from ppadb.client import Client as AdbClient
import time def getDevice(): # Default is "127.0.0.1" and 5037 client = AdbClient(host="127.0.0.1", port=5037) devices = client.devices() if (len(devices) < 0): print("0 device") return 0 return devices[0] device = getDevice() print(device)

Đoạn code trên mục đích là get ra thiết bị đầu tiên mà mình kết nối.

III. Get Started:

Cách để chúng ta có thể giao tiếp với điện thoại Android là sử dụng shell, qua đó chúng ta có thể gửi các command line để giả lập các thao tác như vuốt màn hình, gõ phím, nhấn vào vị trí bất kỳ trên màn hình, blabla À mà để nhấn vào vị trí bất kỳ trên màn hình thì cách ez nhất là chúng ta phải xác định tọa độ trên màn hình và tọa độ trên điện thoại sẽ được tính toán như sau :

Để get tọa độ dễ dàng nhất mọi người vào CHPLAY tải app Screen Coordinates để lấy nhé.

  • Một số command hay sử dụng để Automation:
adb shell input tap x y // chạm vào vị trí có tọa độ (x, y) trên màn hình
adb shell input text "Hello VietNam" // Nhập text vào input
adb shell keyevent eventID // Một số event trên điện thoại ứng với eventID tương ứng Đây là danh sách EventID nè :
3: Bấm nút HOME
4: Bấm nút quay lại
5: Gọi
6: Kết thúc cuộc gọi
24: Tăng âm lượng
25: Giảm âm lượng
26: Bật tắt điện thoại
27: Mở Camera
64: Mở browser
66: Enter
67: Backspace
207: mở danh bạ
220: tăng độ sáng
221: giảm độ sáng
277: cut
278: copy
279: paste

Ở trên là một số command đủ để chúng ta có thể viết các tool cơ bản rồi. Còn nhiều và rất nhiều command nữa mọi người tham khảo ở đây nhé.

IV: Viết tool nào :

1. Auto đăng bài lên Facebook :

Mình sẽ sử dụng kiến thức ở trên để viết một Automation Tool trên điện thoại để post bài viết tự động nhé, kịch bản sẽ như sau :

  1. Mở ứng dụng Facebook
  2. Nhấn vào vị trí nhập Text
  3. Gõ nội dung bài viết
  4. Nhấn nút Đăng để submit bài viết

Đầu tiên chúng ta cần dùng app Screen Cordinates để lấy tọa độ một số chỗ trên màn hình nhé :

Script theo kịch bản trên ở đây :

from ppadb.client import Client as AdbClient
import time def getDevice(): # Default is "127.0.0.1" and 5037 client = AdbClient(host="127.0.0.1", port=5037) devices = client.devices() if (len(devices) < 0): print("0 device") return 0 return devices[0] device = getDevice() def postFacebook(): # Trở về màn hình home device.input_keyevent(HOME_BUTTON) # Nhấn vào icon facebook chở 1 giây device.input_tap(672, 1237) time.sleep(1) # Nhấn vào input đăng device.input_tap(648, 479) time.sleep(1) # Nhấn vào icon facebook chở 1 giây device.input_tap(574, 647) time.sleep(2) # Gõ text facebook chở 2 giây device.input_text("Tu dong dang bai len FACEBOOK") time.sleep(2) # Nhấn đăng bài device.input_tap(949, 152) postFacebook()

2. Nhá máy ( gọi liên tục ) :

Chẳng hạn mình muốn troll thằng bạn ml bằng cách nhá máy đến số điện thoại nó cho sml luôn và không muốn lặp đi lặp lại thao tác này. Kịch bản tool sẽ như sau :

  1. Vào màn hình cuộc gọi
  2. Gõ số điện thoại
  3. Chờ khoảng 13 giây cho đổ tí chuông
  4. Kết thúc cuộc gọi
  5. Lặp lại cho tới khi chặn thì thôi =))

Script ở đây :

from ppadb.client import Client as AdbClient
import time def getDevice(): # Default is "127.0.0.1" and 5037 client = AdbClient(host="127.0.0.1", port=5037) devices = client.devices() if (len(devices) < 0): print("0 device") return 0 return devices[0] device = getDevice() def callPhoneNumber(device, phoneNumber): #call phone Number device.input_keyevent(5) device.input_text("") device.input_text(phoneNumber) device.input_keyevent(5) #wait 13s time.sleep(13) # end call device.input_keyevent(6) while True: callPhoneNumber(device, "0774751111")

3. Tự động đăng ký tài khoản FACEBOOK trên điện thoại :

Nó cũng giống như các công cụ ở trên đưa ra kịch bản rồi viết script thôi, nhưng script này hơi dài nên mình không public lên đây, chỉ show kết quả cho mọi người xem nhé:

V. Một số lưu ý :

Ở trên là một số kiến thức cơ bản đủ để mọi người có thể làm một số công cụ tự động trên điện thoại, nhưng một số điều mình chưa đề cập là :

  • Chúng ta có thể điều khiển song song nhiều điện thoại để thực hiện một auto gì đó chẳng hạn thì mọi người dùng đa luồng để xử lý ( năng suất sẽ cao hơn ).
  • Việc xác định tọa độ như trên thì script sẽ hoạt động không chính xác trên các màn hình khác nhau nhé, có một số phương pháp khác để xác định linh động hơn như: chụp ảnh màn hình và dùng OCR để xác định tọa độ, sử dụng dump xml để lấy vị trí của element tham khảo đây nhé.
  • Một số vấn đề về thay đổi ip, proxy, fake IMEI các kiểu mọi người tự tìm hiểu nhé HI vọng một số kiến thức thú vị trên sẽ giúp được gì đó cho bạn trong việc bắt đầu học automation (yay) !

Bình luận

Bài viết tương tự

- vừa được xem lúc

MOSH: Kẻ hủy diệt SSH

Lời nói đầu. Lời đầu tiên xin được xin chào cả nhà, đã lâu lắm rồi mình không viết blog nay May Fest mà người iu mình thích cái áo viblo quá nên xin phép nổ phát súng trên Viblo về Mosh - thứ khá hay

0 0 126

- vừa được xem lúc

Vòng đời và trạng thái của Thread

A. Giới thiệu.

0 0 117

- vừa được xem lúc

Giải quyết vấn đề N+1 trong quan hệ cha - con vô tận bằng Eager Loading

Vấn đề. Trong khi phát triển ứng dụng, chắc hẳn các bạn đã gặp phải trường hợp đệ quy cha-con trong khi phát triển các dự án, ví dụ như cây thư mục như sau:.

0 0 172

- vừa được xem lúc

Bạn tổ chức thư mục views cho các dự án Laravel như thế nào?

Hầu hết các ứng dụng Laravel có rất nhiều views. Một ứng dụng nhỏ sẽ không xảy ra vấn đề gì cả, tuy nhiều nếu dự án lớn dần theo thời gian, chúng ta sẽ gặp bế tắc trong việc tổ chức và sắp xếp các vie

0 0 189

- vừa được xem lúc

Sự khác nhau giữa những điều tưởng giống nhau - Phần 3

Hôm nay, để tiếp tục cho series so sánh, hãy cùng mình khám phá thêm 2 địa danh mới khá nổi tiếng của Việt Nam mình đó là Cù Lao Chàm và đảo Lý Sơn. .

0 0 99

- vừa được xem lúc

Một số thuật toán sắp xếp

Chắc hẳn ngồi trên ghế giảng đường đại học thì ai cũng sẽ được làm quen với thuật toán. Nghe thì thật là trừu tượng và mơ hồ, nhưng để tối ưu hóa những bài toán đặt ra thì bắt buộc các bạn phải học đế

0 0 156