1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

Hướng dẫn Tự động hoá giả lập Android - Automate android emulator

Thảo luận trong 'Hướng dẫn - bài tập căn bản' bắt đầu bởi Tungtata, 7/6/19.

  1. Tungtata

    Tungtata Tà tà mà sống ~ Thành viên BQT Administrator
    • 93/113

    Tham gia ngày:
    25/8/15
    Bài viết:
    261
    Đã được thích:
    714
    Nơi ở:
    Hà Nội
    Lời mở
    Chào mọi người, mình là Tùng, thực ra về mảng automate android emulator này thấy anh em gần đây có vẻ quan tâm nhiều. Mình cũng là một người từng làm về vài dự án nhỏ liên quan đến android control nên có chút kinh nghiệm nho nhỏ nên muốn chia sẻ. Hi vọng sẽ giúp ích cho các bạn trong việc tạo ra những dự án của riêng bạn
    Vì khả năng truyền đạt cũng như kiến thức văn bản mình cũng không tốt, nên mình giải thích trên ý hiểu, sai ở đâu hay khó hiểu thì các bạn cứ comment nhé


    I. Nền tảng android emulator
    Trong loạt bài hướng dẫn này mình sẽ sử dụng phần mềm Nox với những ưu điểm: nhẹ, tối ưu tốt, customize đa dạng, có thể enable root, change IMEI, resolutions... Ngoài ra Nox cũng hỗ trợ đa nhiệm khá ok, có thể chơi multi windows khá ok nếu cấu hình ae cho phép

    II. Phương án control
    Ở đây mình sẽ sử dụng 2 phương án theo mình thấy hợp lý đó là ADB controlWindows control
    • ADB control thì ưu điểm là: chuẩn xác, ổn định, nhược điểm là ADB hoạt động theo tuần tự, đơn nhiệm nên nếu bạn muốn multi-instance thì sẽ phải xử lý các lệnh lần lượt, cho tất cả instance đang hoạt động
    • Windows control thì độ ổn định không bằng ADB theo cá nhân mình nhưng bạn có thể setup đc multi-process

    III. Giới thiệu về ADB (Android Debug Bridge)
    Android Debug Bridge (adb) là một công cụ dòng lệnh linh hoạt cho phép bạn giao tiếp với một thiết bị. Lệnh adb tạo điều kiện cho nhiều hành động của thiết bị, chẳng hạn như cài đặt và gỡ lỗi ứng dụng và nó cung cấp quyền truy cập vào hệ vỏ Unix mà bạn có thể sử dụng để chạy nhiều loại lệnh trên thiết bị. Đây là một chương trình máy khách-máy chủ bao gồm ba thành phần: client, daemon, server
    IV. Tương tác với adb bằng autoit
    Ở đây mình sẽ hướng dẫn các bạn có thể hoạt động với các lệnh cơ bản, các lệnh nâng cao các bạn cần vận dụng thêm kỹ năng cá nhân và tự tuỳ biến theo ý mình.
    ADB cũng có sẵn 1 UDF nhưng mình không khuyến khích, hướng dẫn của mình muốn đi từ cốt lõi vấn đề để mình hiểu được cách thức hoạt động, từ đó có thể tự tối ưu, tuỳ biến tốt nhất


    Loạt bài này mình sẽ viết từ từ khi có thời gian rảnh rỗi, vì vậy sẽ chưa hoàn thiện ngay, ae nhớ theo dõi nhé!
     
    Chỉnh sửa cuối: 8/6/19
  2. Tungtata

    Tungtata Tà tà mà sống ~ Thành viên BQT Administrator
    • 93/113

    Tham gia ngày:
    25/8/15
    Bài viết:
    261
    Đã được thích:
    714
    Nơi ở:
    Hà Nội
    Cài đặt NOX
    Download: https://noxofficial.com/nox-for-pc/
    Download về và cài đặt như các phần mềm bình thường, cái này mình không hướng dẫn kỹ hơn
    Tối ưu NOX

    Bật công nghệ ảo hoá VT (Virtualization Technology)
    Bạn có thể kiểm tra PC có hỗ trợ VT hay không bằng cách sử dụng phần mềm LeoMoon CPU-V
    [​IMG]

    Link hướng dẫn tiếng Anh, cũng như hướng dẫn bật VT trên thiết bị chưa bật

    Tuỳ biến cấu hình cho máy ảo của bạn
    Bạn có thể tuỳ biến về CPU, RAM phục vụ cho máy ảo, cũng như tăng giảm độ phân giải, DPI, fps để giảm gánh nặng cho CPU và VGA
    [​IMG]
    [​IMG]

    Cách bật card đồ họa NVIDIA hiệu năng cao, ở menu Preferred graphics processor, chọn High-performance NVIDIA processor
    [​IMG]
    Manage 3D settings—Global Settings


    Cách bật card đồ họa hiệu năng cao cho PC AMD với 2 card đồ họa
    Cái này mình dẫn link trực tiếp tiếng Anh thôi nhé: https://www.bignox.com/blog/how-to-...raphics-card-for-amd-pc-with-2-graphic-cards/




    Setup multi-instance

     
    Chỉnh sửa cuối: 7/6/19
  3. Tungtata

    Tungtata Tà tà mà sống ~ Thành viên BQT Administrator
    • 93/113

    Tham gia ngày:
    25/8/15
    Bài viết:
    261
    Đã được thích:
    714
    Nơi ở:
    Hà Nội
    GIỚI THIỆU VỀ ADB
    Tóm gọn một cách dễ hiểu, máy tính của bạn sẽ là khách, khách gửi lệnh cho ông máy chủ (là một process trên máy tính bạn) xử lý, máy chủ sẽ chuyển lệnh đó cho daemon trên thiết bị để điều khiển cũng như lấy thông tin của thiết bị


    PHƯƠNG THỨC KẾT NỐI ADB
    Có 2 phương thức kết nối ADB chính là kết nối bằng cáp kết nối wifi
    • Kết nối bằng cáp kết nối (recommended): Phương án này ổn định và an toàn nhất, cũng dễ dàng để setup nhất. Việc đơn giản bạn chỉ cần một chiếc cáp kết nối hỗ trợ các chân data đầy đủ. Máy tính bạn nhận adb driver, và thiết bị bật tuỳ chọn Gỡ lỗi USB (USD debugging)
    • Kết nối bằng wifi: Cách này mình không khuyến khích vì sẽ chỉ phù hợp với từng trường hợp cụ thể, yêu cầu 2 thiết bị phải có chung một kết nối wifi (cùng 1 router wifi). Ngoài ra chúng ta vẫn phải kết nối cáp một lần để thực thi lệnh kết nối
    Mã (Text):
    adb connect 192.168.0.101:5555
    Với 192.168.0.101 là IP nội bộ của máy tính (hay còn gọi là client)
    Và 5555 là port kết nối mặc định, bạn có thể thay đổi bằng lệnh shell khi có quyền superuser (su)
    Mã (Text):
    setprop service.adb.tcp.port 5555
    Ở bài hướng dẫn này, mình chỉ hướng dẫn về phương án kết nối ADB qua cáp

    CÀI ĐẶT ĐỂ KẾT NỐI ADB
    1. Bật gỡ lỗi USB (USB Debugging) trên thiết bị di động
    Setting
    - About - Ấn 7 lần vào Build number
    Quay trở lại Setting - Developer Options - Tick USB Debugging
    2. Cài đặt ADB driver
    (dùng Nox thì bỏ qua)
    Download: Click
    Tải về giải nén, chạy DPInst_x64.exe cho win 64bit hoặc DPInst_x86.exe cho win 32bit
    3. Thiết lập môi trường ADB
    Tải về bộ toolkit, bộ này được trích xuất từ Android SDK của Google, đây là version 1.0.32
    Download:Click
    Ngoài ra bạn có thể dùng sẵn bộ adb của Nox tại thư mục D:\Program Files\Nox\bin
    Lúc này sẽ là nox_adb chứ không còn là adb nữa
    Giải nén về. Mở thư mục, trên thanh địa chỉ gõ cmd để mở cmd trên thư mục hiện tại hoặc có thể mở cmd rồi dùng lệnh cd / để mở đến thư mục hoạt động của ADB
    [​IMG]

    Nhớ cắm cáp nhé. Thử lệnh đầu tiên nhé
    Mã (Text):
    adb devices
    Đối với Nox thì có đôi chút khác biệt, kết nối giữa Nox với PC được coi là kết nối trong router, nên cần dùng lệnh sau để kết nối mỗi lần khởi động
    Mã (Text):
    adb connect 127.0.0.1:62001
    Khi thấy báo connected to 127.0.0.1:62001 thì có thể thử lại lệnh trên rồi đó

    4. Các lệnh cơ bản
    Note: thay adb thành nox_adb tuỳ vào trường hợp của bạn nhé
    Liệt kê các thiết bị đang kết nối
    Mã (Text):
    adb device
    Khởi động thiết bị
    Mã (Text):
    adb reboot
    Vào lệnh shell
    Mã (Text):
    adb shell
    Cũng có thể gửi lệnh shell trực tiếp, ví dụ:
    Mã (Text):
    adb shell getprop
    Một vài lệnh khác: http://adbshell.com/ hoặc
    Mã (Text):
    adb help
    5. Thêm
    Đối với trường hợp có nhiều thiết bị có thể gửi lệnh cho thiết bị xác định qua tham số -s [thiết bị]

    [​IMG]
     
    Chỉnh sửa cuối: 7/6/19
    zgbhvhz and truonghieuhust like this.
  4. Tungtata

    Tungtata Tà tà mà sống ~ Thành viên BQT Administrator
    • 93/113

    Tham gia ngày:
    25/8/15
    Bài viết:
    261
    Đã được thích:
    714
    Nơi ở:
    Hà Nội
    TƯƠNG TÁC VỚI ADB CƠ BẢN BẰNG AUTOIT

    Bây giờ chúng ta thử bắt đầu thử nhé.
    Đầu tiên là muốn gọi đến nox_adb, chúng ta khai báo đường dẫn, như tại máy mình mình set tại D:\Program Files\Nox\bin
    để gọi đến nox_adb.exe chúng ta dùng function Run.
    Nội dung bị ẩn:
    **Nội dung ẩn: Nội dung của khối ẩn này chỉ có thể được nhìn thấy bởi các thành viên của (các nhóm: nhóm Administrative, Moderating, Registered, Super Modarating, Trial Moderating). **
    Bạn sẽ thấy những lệnh đầu tiên được chạy. Tất nhiên là sau này chúng ta sẽ dùng @SW_HIDE (mặc định sẽ Hide) nhưng ban đầu để debug chúng ta để Show đã
    Rồi. Nếu có thiết bị cắm thì trên cửa sổ cmd sẽ hiển thị. Nhưng ngay khi có kết quả là cửa sổ cmd bay mất, ta cần cái gì đó để có thể lấy giữ liệu được trả về.
    Trong remark của Run chúng ta có các tham số tuỳ chọn, mình sẽ không giải thích nhiều, ở đây mình dùng $STDERR_MERGED tức là bao gồm cả $STDOUT_CHILD $STDERR_CHILD
    Rồi giờ mình cần xác định khi nào cửa sổ cmd mất mình sẽ đọc toàn bộ nội dung trả về. Nhớ includes thêm AutoItConstants.au3 để autoit hiểu được cái var bạn vừa khai báo là gì
    Code sau khi thêm thắt sẽ như sau
    Nội dung bị ẩn:
    **Nội dung ẩn: Nội dung của khối ẩn này chỉ có thể được nhìn thấy bởi các thành viên của (các nhóm: nhóm Administrative, Moderating, Registered, Super Modarating, Trial Moderating). **
    [​IMG]

    Kết quả trả về như ta thấy có một thiết bị phải không? Vậy là ta đã thao tác cơ bản với ADB rồi
    Giờ để gọi nó nhiều lần thì mình đưa nó vào 1 function để dễ bề triệu hồi. Tất nhiên giờ bỏ cái cửa sổ cmd ngứa mắt đi bằng cách thay show flag thành @SW_HIDE

    Nội dung bị ẩn:
    **Nội dung ẩn: Nội dung của khối ẩn này chỉ có thể được nhìn thấy bởi các thành viên của (các nhóm: nhóm Administrative, Moderating, Registered, Super Modarating, Trial Moderating). **
    Nhưng khoan đã, Nox lại yêu cầu phải connect trước. vậy ta sẽ có code sau

    Nội dung bị ẩn:
    **Nội dung ẩn: Nội dung của khối ẩn này chỉ có thể được nhìn thấy bởi các thành viên của (các nhóm: nhóm Administrative, Moderating, Registered, Super Modarating, Trial Moderating). **
    TƯƠNG TÁC VỚI ADB NÂNG CAO BẰNG AUTOIT
    Giờ chúng ta đi đến một bước nâng cao hơn, đó là click với Nox. Trên Nox mình khuyến khích bạn tuỳ chỉnh nhưng thứ sau trong Developer Options

    Đầu tiên là hiện chạm và vị trí chạm để lấy địa chỉ cho tác thao tác tự động click
    [​IMG]
    Tuỳ chọn này để tắt hết các hoạt cảnh chuyển động, sẽ tốt cho nhận dạng hình ảnh sau này

    [​IMG]

    Ví dụ dưới đây mình đang muốn click vào icon Cài đặt, thì sau khi bấm thử mình sẽ có địa chỉ của điểm đã click như ảnh dưới đây là 51 432
    Mình dùng lệnh adb shell input tap
    [​IMG]

    Mã (AutoIt):
    _ADB_Command("nox_adb.exe connect 127.0.0.1:62001")
    _ADB_Command("nox_adb.exe shell input tap 51 432")
    Next...
    Khi bạn đã tự viết được cho mình lệnh ADB đơn giản này rồi. Mình sẽ đi đến các lệnh phức tạp hơn một chút, mình sẽ không viết hoàn chỉnh nữa mà sẽ đưa ra những phương án và command để cho các bạn tự xử lý theo ý mình

    Phát hiện cửa sổ ứng dụng đang mở (adb shell dumpsys activity)
    Lệnh này đơn giản là debug về các ứng dụng đang hoạt động. Ở đây mình cần lấy ứng dụng đang active
    Sử dụng:
    Mã (AutoIt):
    local $Return = _ADB_Command("nox_adb.exe shell dumpsys activity")
    Kết quả trả về sẽ khá dài, dưới đây là một kết quả ví dụ, mình lấy đoạn cần thiết thôi

    [​IMG]

    Đoạn mình cần lấy là mFocusedActivity. Như ảnh thì ta thấy ứng dụng đang mở là com.android.settings/.Settings

    Thao tác input (adb shell input)
    Ở đây mình sẽ chia thành 4 loại: text, keyevent, tap, swipe
    - text ở đây đơn giản là nhập vào một đoạn văn bản từ bàn phím, lưu ý là text sẽ bị ảnh hưởng bởi các bộ gõ đang hoạt động, ví dụ là Labankey hay bàn phím gõ tiếng Việt bất kỳ
    - keyevent là một dạng cao cấp hơn về nhập liệu, nó cho phép sử dụng key code để nhập liệu và hỗ trợ những phím không có trên bàn phím. Ví dụ mình cần ấn tăng âm lượng chẳng hạn
    Mã (AutoIt):
    _ADB_Command("nox_adb.exe shellinput keyevent 24")
    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"

    - tap là lệnh để giả lập click, cái này mình đã có ví dụ phía trên rồi. Mình sẽ không nói thêm nhiều, tuy nhiên lưu ý là các phiên bản android thấp sẽ chưa hỗ trợ tap. Ví dụ android 4.0.4 trở về
    Mã (AutoIt):
    _ADB_Command("nox_adb.exe shell input tap 51 432")
    - swipe lại là một lệnh cao hơn tap đó là vuốt
    Mã (AutoIt):
    _ADB_Command("nox_adb.exe shell input swipe 100 500 100 1000 250")
    với các tham số theo thứ tự $x_start $y_start $x_end $y_end $duration (milliseconds)
     
    Chỉnh sửa cuối: 13/6/19
    hoangquandlk, zgbhvhz and TungNhoc like this.
  5. Tungtata

    Tungtata Tà tà mà sống ~ Thành viên BQT Administrator
    • 93/113

    Tham gia ngày:
    25/8/15
    Bài viết:
    261
    Đã được thích:
    714
    Nơi ở:
    Hà Nội
    Xin phép giữ chỗ cho nội dung bài viết
     
    truonghieuhust thích bài này.
  6. Tungtata

    Tungtata Tà tà mà sống ~ Thành viên BQT Administrator
    • 93/113

    Tham gia ngày:
    25/8/15
    Bài viết:
    261
    Đã được thích:
    714
    Nơi ở:
    Hà Nội
    Xin phép giữ chỗ cho nội dung bài viết
     
    truonghieuhust thích bài này.
  7. TungNhoc

    TungNhoc Thành viên mới
    • 3/6

    Tham gia ngày:
    15/8/18
    Bài viết:
    26
    Đã được thích:
    2
    Quá ngon <3 iu rồi đó
     
  8. #Rainy# Hoàng Vũ IT

    #Rainy# Hoàng Vũ IT Hoang Vũ IT
    • 28/34

    Tham gia ngày:
    21/11/16
    Bài viết:
    158
    Đã được thích:
    37
    Nơi ở:
    Quận 12 TP. Hồ Chí Minh
    Vẫn chưa có bài viết mới.
     
  9. Phongsmod1

    Phongsmod1 Thành viên mới
    • 1/6

    Tham gia ngày:
    23/9/18
    Bài viết:
    2
    Đã được thích:
    1
    a lô thớt còn sống không vậy ? :autoit:
     
  10. solite

    solite Thành viên mới
    • 1/6

    Tham gia ngày:
    19/6/19
    Bài viết:
    2
    Đã được thích:
    0
    Vẫn đang mong chờ các bài tiếp theo của Thớt
     
  11. zgbhvhz

    zgbhvhz Thành viên mới
    • 1/6

    Tham gia ngày:
    1/3/19
    Bài viết:
    3
    Đã được thích:
    0
    Wating for you
     
  12. zerolanhlung

    zerolanhlung Thành viên mới
    • 1/6

    Tham gia ngày:
    24/6/19
    Bài viết:
    1
    Đã được thích:
    0
    update đi bác.
     
  13. hoangquandlk

    hoangquandlk Thành viên mới
    • 1/6

    Tham gia ngày:
    1/5/18
    Bài viết:
    2
    Đã được thích:
    0
    Tuyệt vời luôn đấy AD
     
  14. Tungtata

    Tungtata Tà tà mà sống ~ Thành viên BQT Administrator
    • 93/113

    Tham gia ngày:
    25/8/15
    Bài viết:
    261
    Đã được thích:
    714
    Nơi ở:
    Hà Nội
    Hello ae, mấy nay bận quá, để từ từ viết thêm nhé
     
  15. solite

    solite Thành viên mới
    • 1/6

    Tham gia ngày:
    19/6/19
    Bài viết:
    2
    Đã được thích:
    0
    Hóng bài của AD quá
     

Chia sẻ trang này

Đang tải...