Linux 模擬器與容器
約 1393 字大約 5 分鐘
準備工作
以下安裝方式任選其一即可:
使用 maa-cli
maa-cli 是一個使用 Rust 編寫的簡單 MAA 命令列工具。相關安裝與使用教學請閱讀 CLI 使用指南。
使用 Wine
MAA WPF GUI 當前可以透過 Wine 執行。MAA 已採用自包含部署方式,內建了 .NET 執行環境。
安裝步驟
安裝 Visual C++ Redistributable
下載並安裝 Visual C++ 可再發行套件:
wine vc_redist.x64.exe提示
DependencySetup_依赖库安装.bat基於 winget,通常無法在 Wine 中正常工作,因此需要手動安裝執行庫。下載 MAA
下載 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 動態函式庫壓縮檔,解壓縮後編輯
Python/sample.py檔案 - AUR:maa-assistant-arknights,按照安裝後「Alternative usage」的提示編輯檔案
- Nixpkgs: maa-assistant-arknights
提示
預編譯動態函式庫基於 MaaLinuxToolchain 工具鏈交叉編譯,僅需依賴 glibc 2.31(Ubuntu 20.04)。如果您仍遇到 ABI 不相容的問題(例如非 glibc 發行版),可以使用容器執行,或參閱 Linux 編譯教學 重新編譯。
- 在 MAA 官網 下載預編譯的 Linux 動態函式庫壓縮檔,解壓縮後編輯
ADB 配置
在上一步開啟的
sample.py中找到if asst.connect("adb.exe", "127.0.0.1:5555"):一行。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中的asst.append_task(…)函式呼叫。
模擬器支援
✅ 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 一欄。
遊戲僅支援 ARM 架構,在 x64 架構上需要安裝 arm64 轉譯層 libhoudini 或 libndk,參見 waydroid_script 和 Waydroid Helper。
Waydroid 沒有 Minitouch 所必需的 /dev/input/eventN,無法使用 Minitouch,請切換至其他觸控模式。
✅ redroid
Android 11 版本的映像檔可正常執行遊戲,需要開放 5555 ADB 連接埠。
