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

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 và tinh chỉnh bằng tay hay tự động hóa hóa hóa 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 tiêu 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 những 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 để hoàn toàn hoàn toàn hoàn toàn 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 những dòng lệnh cmd để có thể tiếp xúc với nhau, sử dụng để điều khiển và tiếp xúc với điện thoại thông minh cảm ứng thông minh cảm ứng cảm ứng cảm ứng cảm ứng thông minh Android. Cho phép bạn truy cập vào Unix shell để thi hành những 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 kèm theo tiên quyết là bạn phải mở chế độ USB Debuging trên điện thoại nhó. Link tìm hiểu thêm cách bật ở đây.

Tiếp theo tất cả tất cả tất cả tất cả tất cả tất cả 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 để liên kết điện thoại và máy tính nhé. Gõ command line này để start liên kết 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ị liên kết để đ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 tiêu là get ra thiết bị tiên phong 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 hiển thị hiển thị hiển thị hiển thị thì cách ez nhất là chúng ta phải xác lập tọa độ trên màn hình và tọa độ trên điện thoại sẽ được thống kê giám sát như sau :

Để get tọa độ thuận tiện nhất mọi người vào CHPLAY tải app

Để 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à list 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à 1 số ít 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é, ngữ cảnh 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ố ít 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 :

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 chừ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, "0383470263")

3. Tự độ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 hiệu quả cho mọi người xem nhé:

V. Một số quan tâm :

Ở 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) !