跳至主要內容

Linux 模拟器与容器

大约 3 分钟

Linux 模拟器与容器

准备工作

以下安装方式任选其一即可:

使用 maa-cli

maa-cliopen in new window 是一个使用 Rust 编写的简单 MAA 命令行工具。相关安装与使用教程请阅读用户手册 - CLI使用指南

使用 Python

1. 安装 MAA 动态库

  1. MAA 官网open in new window 下载 Linux 动态库并解压,或从软件源安装:

  2. 进入 ./MAA-v{版本号}-linux-{架构}/Python/ 目录下打开 sample.py 文件

提示

预编译的版本包含在相对较新的 Linux 发行版 (Ubuntu 22.04) 中编译的动态库,如果您系统中的 libstdc++ 版本较老,可能遇到 ABI 不兼容的问题
可以参考 Linux 编译教程 重新编译或使用容器运行

2. adb 配置

  1. 找到 if asst.connect('adb.exe', '127.0.0.1:5554'):open in new window 一栏

  2. adb 工具调用

    • 如果模拟器使用 Android Studioavd ,其自带 adb 。可以直接在 adb.exe 一栏填写 adb 路径,一般在 $HOME/Android/Sdk/platform-tools/ 里面可以找到,例如:
    if asst.connect("/home/foo/Android/Sdk/platform-tools/adb", "模拟器的 adb 地址"):
    
    • 如果使用其他模拟器须先下载 adb$ sudo apt install adb 后填写路径或利用 PATH 环境变量直接填写 adb 即可。
  3. 模拟器 adb 路径获取

    • 可以直接使用 adb 工具: $ adb路径 devices ,例如:
    $ /home/foo/Android/Sdk/platform-tools/adb devices
    List of devices attached
    emulator-5554 device
    
    • 返回的 emulator-5554 就是模拟器的 adb 地址,覆盖掉 127.0.0.1:5555 ,例如:
    if asst.connect("/home/foo/Android/Sdk/platform-tools/adb", "emulator-5554"):
    
  4. 这时候可以测试下: $ python3 sample.py ,如果返回 连接成功 则基本成功了。

3. 任务配置

自定义任务: 根据需要参考 集成文档sample.py# 任务及参数请参考 docs/集成文档.mdopen in new window 一栏进行修改

模拟器支持

AVDopen in new window

必选配置: 16:9 的屏幕分辨率,且分辨率需大于 720p

推荐配置: x86_64 的框架 (R - 30 - x86_64 - Android 11.0) 配合 MAA 的 Linux x64 动态库

注意:从 Android 10 开始,Minitouch 在 SELinux 为 Enforcing 模式时不再可用,请切换至其他触控模式,或将 SELinux 临时切换为 Permissive 模式。

⚠️ Genymotionopen in new window

高版本安卓自带 x86_64 框架,轻量但是运行明日方舟时易闪退

暂未严格测试, adb 功能和路径获取没有问题

容器化安卓的支持

提示

以下方案通常对内核模块有一定要求, 请根据具体方案和发行版安装合适的内核模块

Waydroidopen in new window

安装后需要重新设置分辨率(或者大于 720P 且为 16:9 的分辨率,然后重新启动):

waydroid prop set persist.waydroid.width 1280
waydroid prop set persist.waydroid.height 720

设置 adb 的 IP 地址:打开 设置 - 关于 - IP地址 ,记录第一个 IP ,将 ${记录的IP}:5555 填入sample.py 的 adb IP 一栏。

如果使用 amdgpu, screencap 命令可能向 stderr 输出信息导致图片解码失败.
可以运行 adb exec-out screencap | xxd | head 并检查输出中是否有类似 /vendor/etc/hwdata/amdgpu.ids: No such file... 的文本来确认这一点.
尝试将 resource/config.json 中的截图命令由 adb exec-out screencap 改为 adb exec-out 'screencap 2>/dev/null'.

redroidopen in new window

安卓 11 版本的镜像可正常运行游戏, 需要暴露 5555 adb 端口.