Hướng dẫn
Chạy nhiều giả lập LDPlayer và BlueStacks để nuôi acc game
Chạy nhiều giả lập LDPlayer hoặc BlueStacks để nuôi acc trong MAS: thêm từng instance theo cổng, gom vào nhóm, và cho mỗi thiết bị hồ sơ và proxy riêng.
- Windows
- Mac
- Giả lập
- Studio
- Python SDK
Trong trang này
- Trước khi bắt đầu
- Mỗi instance khi chạy nhiều giả lập là một thiết bị
- Tạo nhóm thiết bị
- Cho mỗi thiết bị tham số riêng
- Cho mỗi thiết bị proxy riêng
- Bắt đầu tất cả: chạy nhiều giả lập LDPlayer hoặc BlueStacks đồng bộ
- Giữ trạng thái từng thiết bị bằng bộ nhớ
- Webhook theo nhóm
- Theo dõi giới hạn tài nguyên của dàn bot BlueStacks
- Lập lịch cho nhóm
- Một ví dụ hoàn chỉnh
- Điều gì có thể sai
- Port is already in use
- Một instance chạy, các instance khác đứng ở Đang kết nối
- Ảnh mẫu chỉ khớp trên một instance
- Mọi instance dùng chung một bộ đếm
Một macro, năm tài khoản, một cú nhấn: đó là chạy nhiều giả lập LDPlayer hoặc BlueStacks để nuôi acc. Khi bạn chạy nhiều giả lập LDPlayer cùng lúc, Macro Automation Studio (MAS) coi mỗi instance giả lập là một thiết bị riêng. Một nhóm thiết bị sau đó chạy cùng macro trên tất cả, với tham số theo từng thiết bị, mỗi cái một proxy, và bộ nhớ không bao giờ trộn lẫn bộ đếm. Hướng dẫn này dựng thiết lập đó trên BlueStacks, LDPlayer, MuMu Player hoặc MEmu. Trang dành cho bất kỳ ai chạy nhiều hơn một tài khoản.
Trước khi bắt đầu
- MAS đã cài và đăng nhập với gói có số thiết bị đủ cho các instance bạn muốn chạy cùng lúc. Xem Thanh toán.
- Trình quản lý đa nhiệm của giả lập đã tạo các instance và mỗi cái đã bật ADB. Các hướng dẫn BlueStacks, LDPlayer, MuMu Player và MEmu chỉ cài đặt và cổng nằm ở đâu.
- Mọi instance dùng cùng độ phân giải và DPI với instance bạn đã chụp ảnh mẫu.
- Macro chạy được trên một instance từ Code Editor. Xem hướng dẫn vòng lặp.
Mỗi instance khi chạy nhiều giả lập là một thiết bị
Một instance giả lập nghe adb trên cổng TCP cục bộ riêng. MAS tìm instance bằng cách quét các tiến trình đang chạy và giữ các cổng nằm trong dải đã biết của từng giả lập. Hai cửa sổ BlueStacks vì thế hiện thành hai mục trong danh sách Cổng. Thiết bị là cổng; nhóm là danh sách cổng.
| Giả lập | Cổng MAS chấp nhận |
|---|---|
| BlueStacks | 5555 đến 8500 |
| LDPlayer | Cổng lẻ từ 5555 đến 5599 |
| MuMu Player | Cổng lẻ 5555 đến 5599, 7555, 16384 đến 16576, 26624 đến 27264 |
| MEmu | 21503 và mọi cổng kết thúc bằng 3 phía trên nó, dưới 30000 |
Giữ mọi instance mở trong lúc bạn thêm; instance đã dừng không có cổng để tìm. Trang Thiết bị có đầy đủ quy tắc phát hiện.
Tạo nhóm thiết bị
- Mở Nhóm thiết bị và nhấn Tạo nhóm mới.
- Nhập Tên, giữ loại Local, và nhấn Tạo nhóm.
- Mở nhóm và nhấn Thêm thiết bị.
- Nhập Tên thiết bị cho biết đó là tài khoản nào, ví dụ
farm-alt-2. - Chọn cổng của instance trong Cổng. Nhấn Làm mới nếu thiếu, hoặc chọn Cổng tùy chỉnh và gõ vào.
- Nhấn Thêm thiết bị và lặp lại cho mọi instance.
- Trên mỗi thẻ thiết bị, chọn macro trong ô Macro.
Một cổng chỉ thuộc về một thiết bị. Thêm lần hai thất bại với “Port is already in use”. Xem Nhóm thiết bị.
Cho mỗi thiết bị tham số riêng
Hầu hết bot cần một giá trị khác nhau theo từng tài khoản: một cái tên, một mục tiêu, số lượt. Có hai cách truyền nó.
Hồ sơ cài đặt (không đổi mã). Nếu macro có biểu mẫu tham số từ UI Builder, mỗi thẻ thiết bị có Sửa tham số. Hộp thoại mang thanh Hồ sơ: nhập giá trị, chọn Lưu giá trị hiện tại thành hồ sơ mới, đặt tên và nhấn Tạo hồ sơ. Một thiết bị đi theo một hồ sơ, và sửa hồ sơ cập nhật mọi thiết bị đi theo nó ở lần chạy tiếp theo. “Default” luôn tồn tại và không xóa được. Xem Hồ sơ cài đặt và UI Builder.
Cổng trong mã. Mã có thể hỏi nó đang ở instance nào và tự chọn cài đặt. Cách này không cần biểu mẫu và là cách ví dụ ở cuối dùng.
import mas
port = mas.get_current_device_port() # 5555, 5557, 5559 ...Dùng hồ sơ khi giá trị đổi thường xuyên hoặc người khác chạy bot; dùng cổng khi ánh xạ cố định và đi cùng mã.
Cho mỗi thiết bị proxy riêng
Các tài khoản dùng chung IP thì chung số phận. MAS gắn một proxy cho mỗi thiết bị và định tuyến lưu lượng của instance đó qua nó.
- Mở Proxy. Dưới Thêm proxy, điền tab Tài khoản gateway, hoặc tab Nhà cung cấp khác cho proxy của riêng bạn (
http,httpshoặcsocks5), và nhấn Thêm & kiểm tra. - Chờ kiểm tra. Nó xác nhận proxy trả lời và phát hiện quốc gia; Kiểm tra lặp lại về sau.
- Nhấn Gán và chọn thiết bị, hoặc mở thẻ thiết bị trong Nhóm thiết bị và chọn proxy trong Proxy.
Thẻ thiết bị hiển thị trạng thái proxy ở mỗi lần chạy, và webhook của lần chạy mang proxy_exit_ip và proxy_country. Một thiết bị giữ một proxy; gắn cái khác thay thế nó. Xem Proxy.
Bắt đầu tất cả: chạy nhiều giả lập LDPlayer hoặc BlueStacks đồng bộ
Nhấn Bắt đầu tất cả ở đầu nhóm. MAS bắt đầu các thiết bị lần lượt, cách nhau nửa giây, mỗi cái có lần chạy riêng, nhật ký riêng và mã thoát riêng. Thiết bị không có macro bị bỏ qua kèm lỗi và phần còn lại tiếp tục. Dừng tất cả kết thúc mọi lần chạy trong nhóm. Tab Nhật ký trên mỗi thẻ chỉ hiển thị thiết bị đó, và tab Bảng điều khiển hiển thị giao diện lúc chạy nếu macro có.
Giữ trạng thái từng thiết bị bằng bộ nhớ
mas.save, mas.retrieve và mas.clear được khóa theo máy tính này, cổng của thiết bị và tên tác vụ. Hai instance chạy cùng macro vì thế giữ bộ đếm riêng mà không cần thêm mã. Để cộng dồn, mas.retrieve_all(task_name) trả về một mục cho mỗi cổng với machine_id, port, data và updated_at.
TASK = "collector"
mine = mas.retrieve(TASK) # this instance only
everyone = mas.retrieve_all(TASK) # every instance on this computer
total = sum(entry["data"].get("done", 0) for entry in everyone)Xem Lưu trữ.
Webhook theo nhóm
Để được báo khi bất kỳ tài khoản nào xong hoặc thất bại, thêm một điểm cuối trên trang Webhook, chọn sự kiện dưới Gửi cho tôi, và dưới Gửi cho tôi sự kiện từ chọn Nhóm cụ thể rồi tích nhóm. Thiết bị bạn thêm vào nhóm sau này cũng được bao phủ. Mỗi sự kiện mang device_name, device_port, group_id, status và exit_code, nên một điểm cuối phân biệt được các tài khoản. Xem Webhook.
Theo dõi giới hạn tài nguyên của dàn bot BlueStacks
Mỗi instance là một hệ thống Android đầy đủ. Trước khi mở rộng, kiểm tra ba thứ:
- CPU và RAM cho mỗi instance. Mỗi instance chiếm số nhân và bộ nhớ đặt trong cài đặt instance của giả lập. Cộng chúng lại và chừa dư cho MAS, vốn chạy so khớp mẫu và OCR cho mọi instance trên cùng máy. Khi cú chạm bắt đầu đến muộn, bạn đã quá tải.
- Thiết bị trong gói của bạn. Gói được định cỡ theo số thiết bị của bạn có thể chạy cùng lúc. Bắt đầu tất cả chạy đúng số gói cho phép; xem Thanh toán và trang giá.
- Công việc theo lịch. Bộ lập lịch chạy tối đa 20 công việc cùng lúc, mỗi cổng một công việc.
Ít instance chạy sạch tốt hơn nhiều instance trượt ảnh mẫu.
Lập lịch cho nhóm
Bộ lập lịch nhắm một cổng cho mỗi công việc, nên lịch của nhóm là một công việc cho mỗi thiết bị.
- Mở Lập lịch và nhấn Tạo lịch mới.
- Chọn Macro, nhấn Quét dưới Cổng giả lập và chọn instance đầu tiên.
- Đặt Ngày, Giờ và Chu kỳ, rồi nhấn Tạo lịch.
- Lặp lại cho từng cổng. Cho các công việc cùng giờ; cổng khác nhau không bao giờ xung đột.
Các lần chạy theo lịch dùng tham số đã lưu trên mỗi thẻ thiết bị, hoặc hồ sơ mà thiết bị đi theo, nên giá trị theo tài khoản được giữ nguyên. Ứng dụng phải mở. Xem Bộ lập lịch và hướng dẫn vòng lặp.
Một ví dụ hoàn chỉnh
Macro đọc cổng của mình, chọn cài đặt của tài khoản, giữ bộ đếm theo cổng, và ghi tổng trên mọi instance ở cuối. Thay cổng và ID ảnh bằng của bạn.
import random
import sys
import time
import mas
images = mas.images({
"collect": 501,
"close_popup": 502,
})
SETTINGS = { # per instance, keyed by the emulator's adb port
5555: {"account": "main", "rounds": 20},
5557: {"account": "alt-1", "rounds": 10},
5559: {"account": "alt-2", "rounds": 10},
}
DEFAULT = {"account": "unknown", "rounds": 5}
TASK = "collector"
TIME_BUDGET_S = 15 * 60
def main():
port = mas.get_current_device_port()
settings = SETTINGS.get(port, DEFAULT)
account = settings["account"]
mas.log(f"Port {port}: account {account}, {settings['rounds']} rounds")
done = mas.retrieve(TASK).get("done", 0)
started = time.monotonic()
misses = 0
while done < settings["rounds"]:
if time.monotonic() - started > TIME_BUDGET_S:
mas.log(f"{account}: time budget reached", level="warning")
break
popup = mas.find_object(images.close_popup)
if popup:
mas.click(popup.x, popup.y, delay_ms=800)
continue
button = mas.find_object_retry(images.collect, total_tries=3, time_sleep=2.0)
if button is None:
misses += 1
if misses >= 5:
mas.log(f"{account}: five misses, giving up", level="error")
sys.exit(2)
continue
misses = 0
mas.click(button.x, button.y, delay_ms=1000)
done += 1
mas.save(TASK, {"done": done, "account": account})
time.sleep(random.uniform(0.8, 2.5))
total = sum(entry["data"].get("done", 0) for entry in mas.retrieve_all(TASK))
mas.log(f"{account}: {done} rounds done; {total} across all instances")
mas.webhook("account.finished", {"account": account, "port": port, "done": done})
if __name__ == "__main__":
main()mas.webhook gửi sự kiện custom.account.finished tới các điểm cuối đăng ký sự kiện tùy chỉnh; bỏ dòng đó nếu bạn không có. Khi ánh xạ lớn dần, chuyển nó vào biểu mẫu tham số và đọc args.<tab>.<key> thay cho từ điển.
Điều gì có thể sai
Port is already in use
Một thiết bị khác trong một nhóm của bạn giữ cổng đó. Mỗi cổng chỉ thêm được một lần; xóa mục cũ hoặc chọn cổng của instance kia.
Một instance chạy, các instance khác đứng ở Đang kết nối
Các instance kia đang tắt ADB, vẫn đang khởi động, hoặc nghe trên cổng ngoài dải của giả lập. Mở cài đặt của từng instance, xác nhận ADB và cổng, và nhấn Làm mới trong Thêm thiết bị. Nếu cổng nằm ngoài bảng trên, dùng Cổng tùy chỉnh. Xem Khắc phục sự cố ADB.
Ảnh mẫu chỉ khớp trên một instance
Instance đó có độ phân giải hoặc DPI khác. So khớp mẫu dựa trên pixel; đặt mọi instance về độ phân giải lúc chụp trong cài đặt instance của giả lập và khởi động lại. Hướng dẫn nhận diện hình ảnh giải thích phần còn lại.
Mọi instance dùng chung một bộ đếm
Mã truyền port hoặc machine_id tường minh cho mas.save, hoặc dùng một tệp trên đĩa thay vì bộ nhớ lưu trữ. Gọi mas.save(TASK, data) với giá trị mặc định; cổng hiện tại được thêm cho bạn.
Không có công cụ tự động hóa nào an toàn 100%, vì vậy hãy tự động hóa một cách có trách nhiệm và theo quyết định của riêng bạn.
Bước tiếp theo
Trang liên quan
Cảm ơn bạn. Nếu có gì chưa đúng, hãy nói với chúng tôi trên Discord.
Có câu hỏi? Hỏi trên Discord