Linux 模擬器與容器
約 1342 字大約 4 分鐘
準備工作
以下安裝方式任選其一即可:
使用 maa-cli
maa-cli 是一個使用 Rust 編寫的簡單 MAA 命令列工具。相關安裝與使用教學請閱讀 CLI 使用指南。
使用 Wine
MAA WPF GUI 當前可以透過 Wine 執行。
安裝步驟
前往 .NET 發佈頁 下載並安裝 Windows 版 .NET 桌面執行環境 (Runtime)。
下載 Windows 版 MAA,解壓縮後執行
wine MAA.exe。
注意
需要在連線設定中將 ADB 路徑設定為 Windows 版 adb.exe。
如果您需要透過 ADB 連線 USB 設備,請先在 Wine 外執行 adb start-server,即透過 Wine 連線原生 ADB server。
使用 Linux 原生 MaaCore(實驗性功能)
下載 MAA Wine Bridge 原始碼並建置,用產生的 MaaCore.dll(ELF 檔案)替換 Windows 版本,並將 Linux 原生動態函式庫(libMaaCore.so 以及依賴項)放在同一目錄下。
此時透過 Wine 執行 MAA.exe,將會載入 Linux 原生動態函式庫。
注意
使用 Linux 原生 MaaCore 時,需要在連線設定中將 ADB 路徑設定為 Linux 原生 ADB。
Linux 桌面整合(實驗性功能)
桌面整合提供原生桌面通知支援,以及將 fontconfig 字型配置對應到 WPF 的功能。
將 MAA Wine Bridge 產生的 MaaDesktopIntegration.so 放到 MAA.exe 同目錄下即可啟用。
已知問題
- Wine DirectWrite 強制啟用 hinting,且不將 DPI 傳遞給 FreeType,導致字型顯示效果不佳。
- 不使用原生桌面通知時,彈出通知會搶佔全系統滑鼠焦點,導致無法操作其他視窗。可以透過
winecfg啟用虛擬桌面模式緩解,或停用桌面通知。 - Wine-staging 使用者需要關閉
winecfg中的隱藏 Wine 版本選項,以便 MAA 正確偵測 Wine 環境。 - Wine 的 Light 主題會導致 WPF 中部分文字顏色異常,建議在
winecfg中切換到無主題(Windows 經典主題)。 - Wine 使用舊式 XEmbed 系統匣圖示,在 GNOME 下可能無法正常工作。
- 使用 Linux 原生 MaaCore 時暫不支援自動更新(
更新程式:我想我應該下載個 Windows 版)
使用 Python
安裝 MAA 動態函式庫
- 在 MAA 官網 下載 Linux 動態函式庫並解壓縮,或從軟體源安裝:
- AUR:maa-assistant-arknights,按照安裝後的提示編輯檔案
- Nixpkgs: maa-assistant-arknights
- 進入
./MAA-v{版本號}-linux-{架構}/Python/目錄下開啟sample.py檔案
提示
預編譯的版本包含在相對較新的 Linux 發行版 (Ubuntu 22.04) 中編譯的動態函式庫,如果您系統中的 libstdc++ 版本較舊,可能遇到 ABI 不相容的問題。 可以參閱 Linux 編譯教學 重新編譯或使用容器執行。
- 在 MAA 官網 下載 Linux 動態函式庫並解壓縮,或從軟體源安裝:
ADB 配置
ADB 工具呼叫
- 如果模擬器使用
Android Studio的avd,其內建 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即可。
- 如果模擬器使用
模擬器 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"):- 可以直接使用 ADB 工具:
這時候可以測試一下:
$ python3 sample.py,如果回傳連接成功則基本成功了。
任務配置
自定義任務:根據需要參閱 整合文件 對 sample.py 的 # 任務及參數請參考 docs/integration.md 一欄進行修改。
模擬器支援
✅ AVD
必選配置:16:9 的螢幕解析度,且解析度須大於 720p
推薦配置:x86_64 的架構 (R - 30 - x86_64 - Android 11.0) 配合 MAA 的 Linux x64 動態函式庫
請注意:從 Android 10 開始,Minitouch 在 SELinux 為 Enforcing 模式時不再可用,請切換至其他觸控模式,或將 SELinux 臨時切換為 Permissive 模式。
⚠️ Genymotion
高版本 Android 內建 x86_64 架構,輕量但在執行《明日方舟》時易閃退。
暫未嚴格測試,ADB 功能與路徑獲取沒有問題。
容器化 Android 的支援
提示
以下方案通常對核心模組 (kernel module) 有一定要求,請根據具體方案和發行版本安裝合適的核心模組。
✅ Waydroid
安裝後需要重新設定解析度(或者大於 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'。
✅ redroid
Android 11 版本的映像檔可正常執行遊戲,需要開放 5555 ADB 連接埠。
