4793 words
24 minutes
mobilerun 安装与配置记录:从 adb 到 DeepSeek 真机跑通

Static Badge Static Badge Static Badge Static Badge Static Badge Static Badge

记录时间:2026-10-08 目标设备:vivo V2458A(adb serial 10AF5J16*******),Android 16 / SDK 36 记录范围:从「手机已通过 adb 连接电脑」开始,到 mobilerun 用 DeepSeek 跑通真机任务为止的完整过程 最终结论:✅ 安装完成、配置完成、真机链路跑通(含 1 个已知准确性问题,见 7.3)

mobilerun 是个用 LLM Agent 控制 Android / iOS 设备的工具。过程本身不算难,但坑很集中: 国外源下载、厂商 ROM 的安装拦截、以及一个官方向导配不了的模型供应商。

这篇把每一步的真实命令输出和排查过程都记下来了,照着走可以省掉重复试错。

目录#


1. 任务与约束#

1.1 用户诉求(按时间顺序)#

  1. 手机已经通过 adb 连接至电脑
  2. 阅读 https://github.com/droidrun/mobilerun,帮忙安装该软件
  3. 追加要求:uv 安装时使用清华的源
  4. 最后:把本次对话所有内容整理成一个 md 文件(即本文)

1.2 项目官方要求(摘自 README)#

要求说明
Python 版本>=3.11,<3.14,README 明确写了 3.14 不支持
安装方式推荐 uv tool install mobilerun
前置条件安装 ADB;Android 需开启开发者选项 + USB 调试
标准流程mobilerun setup → mobilerun ping → mobilerun configure → mobilerun run
Anthropic 支持需额外安装 mobilerun[anthropic]

mobilerun 的定位:用 LLM Agent 控制 Android / iOS 设备,通过 Portal App(设备端)暴露无障碍树、截图、点击、滑动、输入等能力,CLI 或 Python API 调用。


2. 初始环境侦察#

2.1 系统与工具链#

项目侦察结果
操作系统Windows 10.0.26300.0(NT 10.0.26300)
Python仅 3.14.8(C:\Python314\python.exe)→ 版本不满足要求
uv不在 PATH,但实际已安装(%USERPROFILE%\.local\bin\uv.exe,v0.9.22)
pipx未安装
adb不在 PATH,where adb 无结果,无 ANDROID_HOME 等环境变量
可用的包管理器winget、choco、git、node、npm(无 scoop)
工作目录博客仓库目录(Astro 项目,git 仓库)

2.2 adb 位置搜索#

在用户目录与常见根目录递归搜索 adb.exe,命中:

%USERPROFILE%\Downloads\platform-tools-latest-windows\platform-tools\adb.exe

版本:Android Debug Bridge version 1.0.41(37.0.1-15733141)

2.3 设备连接确认#

$ adb devices -l
List of devices attached
10AF5J16******* device product:PD2415M model:V2458A device:PD2415M transport_id:1
$ adb shell getprop ro.build.version.release
16
$ adb shell getprop ro.product.model
V2458A

✅ 设备在线:vivo V2458A,Android 16。 注意此时 adb server(端口 5037)原本未运行,是首次调用时自动拉起的。

2.4 uv 现状(重要)#

虽然 Get-Command uv 失败,但 uv 实际已存在,且已经装好了 mobilerun:

$ uv --version
uv 0.9.22 (82a6a66b8 2026-01-06)
$ uv tool list
mobilerun v0.6.22
- mobilerun
windows-mcp v0.8.7
- windows-mcp
$ uv python list --only-installed
cpython-3.14.8-windows-x86_64-none C:\Python314\python.exe
cpython-3.14.8-windows-x86_64-none C:\ProgramData\chocolatey\bin\python3.14.exe
cpython-3.13.11-windows-x86_64-none %APPDATA%\uv\python\cpython-3.13.11-windows-x86_64-none\python.exe

关键点:系统里只有 Python 3.14,但 mobilerun 要求 <3.14。uv 自动下载并使用了 3.13.11 来搭建 mobilerun 的隔离环境 —— 这说明不需要手动降级系统 Python。

2.5 清华源配置(用户追加要求)—— 已存在#

uv 的全局配置 %APPDATA%\uv\uv.toml 已经指向清华源:

python-install-mirror = "https://ghfast.top/https://github.com/astral-sh/python-build-standalone/releases/download"
[[index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true

即 PyPI 包走清华源,python-build-standalone 走 ghfast.top 代理。因此「uv 使用清华源」这一要求开箱即满足,无需改动。

2.6 清华镜像可用性实测#

目标结果
https://pypi.tuna.tsinghua.edu.cn/simple/mobilerun/✅ 200
https://mirrors.tuna.tsinghua.edu.cn/github-release/astral-sh/uv/❌ 404
https://mirrors.tuna.tsinghua.edu.cn/github-release/astral-sh/python-build-standalone/❌ 404

结论:清华仓的 github-release 镜像不覆盖 astral-sh,所以 GitHub 二进制(uv 本体、Python 运行时、Portal APK)必须另想办法 —— 见 5.1 与 5.2。


3. 关键发现#

#发现影响
1系统只有 Python 3.14,而 mobilerun 要求 <3.14uv 已自动用 3.13.11 解决,无需人工干预
2uv 与 mobilerun 早已安装,只是 ~/.local/bin 不在 PATH不需要重新安装,只需补 PATH
3uv.toml 已配清华 PyPI 源用户的追加要求已满足
4adb 不在 PATH,但存在于 Downloads 目录需迁移到稳定位置并加入 PATH,否则 mobilerun setup/ping 无法工作
5清华未镜像 astral-sh 的 GitHub ReleaseGitHub 大文件下载需走 ghfast.top
6mobilerun 的 provider 列表里没有 DeepSeek 的 env-key slotmobilerun configure 向导无法配置 DeepSeek,需手写配置

4. 执行过程#

步骤 1:安装 platform-tools 并修复 PATH#

把 adb 从临时下载目录复制到标准 Android SDK 位置(保留 Downloads 原目录不动,非破坏性):

Terminal window
$src = "$env:USERPROFILE\Downloads\platform-tools-latest-windows\platform-tools"
$dst = "$env:LOCALAPPDATA\Android\Sdk\platform-tools"
New-Item -ItemType Directory -Force -Path (Split-Path $dst) | Out-Null
Copy-Item -Path $src -Destination $dst -Recurse -Force

写入用户级 PATH(用 SetEnvironmentVariable 而非 setx,避免 1024 字符截断),并把 ~/.local/bin 一并确保在内:

Terminal window
$userPath = [Environment]::GetEnvironmentVariable("Path","User")
$entries = @($userPath -split ';' | Where-Object { $_ -ne '' })
foreach ($d in @($dst, "$env:USERPROFILE\.local\bin")) {
if ($entries -notcontains $d) { $entries += $d }
}
[Environment]::SetEnvironmentVariable("Path", ($entries -join ';'), "User")

复制内容(14 个文件,含 adb 依赖的两个 DLL):

adb.exe (8273560) AdbWinApi.dll AdbWinUsbApi.dll
fastboot.exe etc1tool.exe hprof-conv.exe sqlite3.exe
make_f2fs.exe make_f2fs_casefold.exe mke2fs.exe mke2fs.conf
libwinpthread-1.dll NOTICE.txt source.properties

步骤 2:验证 mobilerun 与首次诊断#

$ mobilerun --version
v0.6.22
$ mobilerun devices
Found 1 local device(s):
• 10AF5J16*******

首次 mobilerun doctor 结果 —— ADB 是唯一红灯:

Mobilerun Doctor
SDK Version 0.6.22 (up to date) ✓
Config ...\droidrun\config.yaml ✓
ADB adb not found in PATH ✗
1 issue(s):
✗ ADB: adb not found in PATH

修复 PATH 后重新诊断,ADB 转为通过,但暴露出下一个问题(Portal 未安装):

ADB found, 1 device(s) ✓
Device 10AF5J16******* (online) ✓
Portal not installed ✗
Downloading Portal APK 0.7.25

步骤 3:确认 Portal 版本与资产#

通过 ungh.cc(GitHub API 代理,比 api.github.com 快)查询最新 Release:

项目值
Release tagv0.7.25(发布于 2026-08-18)
资产文件com.mobilerun.portal-0.7.25.apk
大小53,610,015 字节(约 51.12 MB)

同时查版本映射表(version_map_android.json),确认 SDK 与 Portal 的对应关系:

{
"mappings": {
"0.1.0-0.2.0": "0.7.16",
"0.4.1-0.4.15": "v0.4.6",
"0.6.0rc2": "v0.7.9",
"0.6.0rc3": "v0.7.11",
"0.6.2-0.6.7": "0.7.16",
"0.6.8-0.6.18": "0.7.22",
"0.6.19-0.6.22": "0.7.25"
},
"download_base": "https://github.com/droidrun/mobilerun-portal/releases/download"
}

✅ mobilerun 0.6.22 对应 Portal 0.7.25 —— 与我们要装的版本完全一致。

步骤 4:经镜像下载 Portal APK#

GitHub 直连下载卡死(详见 5.1),改用 ghfast.top 镜像:

Terminal window
$cache = "$env:USERPROFILE\.local\share\mobilerun\portal"
$url = "https://ghfast.top/https://github.com/droidrun/mobilerun-portal/releases/download/v0.7.25/com.mobilerun.portal-0.7.25.apk"
curl.exe -L --retry 3 --retry-delay 2 --connect-timeout 20 -o "$cache\com.mobilerun.portal-0.7.25.apk" $url

结果:22.2 秒完成,51.12 MB,平均 2.31 MB/s,字节数精确匹配 53610015。

APK 校验:文件头 magic = PK(合法 zip/APK);mobilerun 安装时自报 md5 为 2bbd2416bc7270dc698b9d0ed81e914c。

APK 缓存位置(保留,供以后重装复用):

%USERPROFILE%\.local\share\mobilerun\portal\com.mobilerun.portal-0.7.25.apk

步骤 5:安装 Portal(绕开 vivo 限制)#

mobilerun setup --path 失败(详见 5.2),改用不带 -g 的原生 adb 安装:

Terminal window
adb install -r -t "$env:USERPROFILE\.local\share\mobilerun\portal\com.mobilerun.portal-0.7.25.apk"
# Performing Streamed Install
# Success

验证:

$ adb shell pm list packages | Select-String "mobilerun"
package:com.mobilerun.portal
$ adb shell dumpsys package com.mobilerun.portal | Select-String versionName
versionName=0.7.25

步骤 6:启用无障碍服务#

mobilerun setup 无法完成这一步(因为它会先重装并再次失败),所以直接执行 mobilerun 内部 enable_portal_accessibility() 的等价命令:

Terminal window
$svc = "com.mobilerun.portal/com.mobilerun.portal.service.MobilerunAccessibilityService"
adb shell settings put secure enabled_accessibility_services $svc
adb shell settings put secure accessibility_enabled 1

⚠️ 这两条命令是覆盖写。执行前已确认目标为空(enabled_accessibility_services 无值、accessibility_enabled=0),因此没有破坏其它无障碍服务。若设备上已启用其它无障碍服务,切勿直接照抄,应先读取原值再拼接。

验证绑定成功:

$ adb shell dumpsys accessibility | Select-String "mobilerun"
Bound services:{Service[label=Mobilerun Portal, feedbackType[FEEDBACK_GENERIC],
capabilities=161, eventTypes=TYPES_ALL_MASK, ...]}
Enabled services:{{com.mobilerun.portal/com.mobilerun.portal.service.MobilerunAccessibilityService}}

步骤 7:ping 与 doctor 全绿#

$ mobilerun ping
Portal is installed and accessible. You're good to go!

步骤 8:附带加固与清理#

Terminal window
# vivo 后台管控较强,把 Portal 加入电池优化白名单
adb shell dumpsys deviceidle whitelist +com.mobilerun.portal # -> Added: com.mobilerun.portal
# 清理设备上 51MB 的临时推送包
adb shell rm -f /data/local/tmp/com.mobilerun.portal-539.apk
# 清理 Windows 端 4 个下载中断残留的临时 apk(共约 39MB)
Get-ChildItem $env:TEMP -Filter "*.apk" | Remove-Item -Force

5. 问题与解决方案#

#问题根因解决方案
1GitHub 下载 Portal APK 卡死国内直连 GitHub Release 不稳定改用 ghfast.top 镜像
2mobilerun setup 安装失败 INSTALL_FAILED_ABORTEDvivo 拒绝 -g(安装时授予全部权限)去掉 -g,用 adb install -r -t
3uv 官方安装脚本被拒PowerShell 执行策略限制无需处理(uv 已存在)
4清华未镜像 astral-sh清华 github-release 仓不含 astral-sh改用 ghfast.top

5.1 问题 1 详情:GitHub 下载中断#

mobilerun doctor 为检查 Portal 版本会下载 51MB APK,但进度停在 7,200,768 字节不动(%TEMP% 下还堆积了 4 个历史残留的 .apk:11.6MB / 8.5MB / 6.7MB / 12.9MB,都是历次中断产物)。

定位手段:对比临时 APK 文件在 12 秒间隔内的体积增长,确认停滞。

解决:改用 ghfast.top 前缀代理 —— 这个代理在用户的 uv.toml 里本就已用于 python-build-standalone,属于已验证可用的通道。22 秒下完,速度提升约 4 倍且不再中断。

5.2 问题 2 详情:vivo 拒绝 -g 标志(最重要)#

$ mobilerun setup --path <apk>
Step 1/2: Installing APK: ...
62.2% 31.8 MB/s [31.8 MB/51.1 MB]
100.0% 32.0 MB/s [51.1 MB/51.1 MB]
verify pushed apk, md5: 2bbd2416bc7270dc698b9d0ed81e914c, size: 51.1 MB
Failure INSTALL_FAILED_ABORTED
Remote apk is not removed. Manually install command:
adb shell pm install -r -t /data/local/tmp/com.mobilerun.portal-539.apk
Installation failed: Failure [INSTALL_FAILED_ABORTED: User rejected permissions]

排查过程:

  1. 先怀疑「屏幕熄灭导致确认框无法弹出」—— 当时 mScreenOn=false,于是唤醒设备
  2. 唤醒后仍失败,且 mCurrentFocus 显示是 vivo 的安装器在拦截
  3. 读取 mobilerun 源码确认 setup_portal() 固定传 flags=["-g"] if uninstall else ["-r","-g"](见 mobilerun_core_local/driver/android/portal.py:657)
  4. 判定 -g(INSTALL_GRANT_ALL_RUNTIME_PERMISSIONS)正是被 vivo 拦截的原因

解决:去掉 -g 重新安装 → Success。

影响与后续:Portal 在没有 -g 的情况下安装,运行时权限未被自动授予。实测不影响功能 —— doctor 的截图、无障碍树、content provider、TCP 四种检查全部通过,因为 Portal 依赖的是无障碍服务与 IME(无需运行时权限)。

⚠️ 重要副作用:mobilerun setup 这个命令在本机会永久失败(它写死用 -g)。Portal 已装好,日常无需再跑;若要重装,请用第 10 节的手动命令。

5.3 问题 3 详情:执行策略(已规避)#

最初尝试官方安装脚本:

$ irm https://astral.sh/uv/install.ps1 | iex
Error: PowerShell requires an execution policy in [Unrestricted, RemoteSigned, Bypass] to run uv.

当时的计划是「下载 uv 二进制 zip 并解压」以避免修改用户的系统执行策略;但在执行前发现 uv 其实早已安装(~/.local/bin/uv.exe),于是没有必要改动执行策略,也没有下载任何东西。


6. DeepSeek 配置#

6.1 为什么不能用 mobilerun configure 向导#

查阅源码后发现两个硬约束:

位置内容结论
mobilerun/config_manager/env_keys.py:11API_KEY_ENV_VARS 只有 google / gemini / openai / xai / anthropic / zai / minimax没有 deepseek slot
mobilerun/agent/providers/registry.py:35VARIANT_ENV_KEY_SLOT 无 DeepSeek 条目向导的 provider 家族列表里没有 DeepSeek

但 mobilerun/agent/utils/llm_picker.py:834 保留了 DeepSeek 的 legacy 分支:

if provider_name == "DeepSeek":
provider_name = "OpenAILike"
kwargs.setdefault("api_key", os.environ.get("DEEPSEEK_API_KEY"))
kwargs.setdefault("model", DEEPSEEK_DEFAULT_MODEL) # = "deepseek-flash"
kwargs.setdefault("api_base", "https://api.deepseek.com")

结论:DeepSeek 只能通过 provider: DeepSeek + 环境变量 DEEPSEEK_API_KEY 使用;configure 向导做不到(向导里可选的是 OpenAI / Gemini / Anthropic / XAI / Ollama / OpenAI Compatible / MiniMax / ZAI)。

6.2 先验证 Key 与真实模型列表#

不猜模型名,直接问 API:

$ GET https://api.deepseek.com/models (Authorization: Bearer <key>)
SUCCESS - available models:
- deepseek-flash
- deepseek-v4-pro

✅ 官网 API 返回的模型正是 deepseek-flash 与 deepseek-v4-pro,与 mobilerun 内置的 DEEPSEEK_DEFAULT_MODEL = "deepseek-flash" 及 DEEPSEEK_FUNCTION_CALLING_MODELS = {"deepseek-flash", "deepseek-v4-pro"} 完全吻合。因此无需修改模型名。

(这一步是必要的:deepseek-flash 这个名字与公开 pricing 数据里的 deepseek-v4-flash 不一致,若不实测就有配错的风险。)

6.3 功能测试(含 Agent 依赖的 tool calling)#

测试 1 — 普通补全

content: (空)
tokens: in=35 out=20

内容为空是因为 deepseek-flash 默认开启 thinking 模式,token 先消耗在 reasoning 上,被 max_tokens=20 截断。这是预期行为,不是故障。

测试 2 — tool calling(关键,Agent 全靠它)

TOOL CALL OK -> name=get_weather args={"city": "Beijing"}

✅ 工具调用正确返回函数名与参数。

6.4 写入配置#

配置文件:%LOCALAPPDATA%\droidrun\droidrun\config.yaml

改动前先备份为 config.yaml.bak-20261008-185427,然后做两处精确文本替换(各命中 5 处,对应 5 个 LLM profile):

原值新值
provider: GoogleGenAIprovider: DeepSeek
model: gemini-3.8-flashmodel: deepseek-flash

改动后的 profile 结构(manager / executor / fast_agent / app_opener / structured_output 五者一致):

llm_profiles:
manager:
provider: DeepSeek
model: deepseek-flash
temperature: 0.2
api_key_source: auto
base_url: null
api_base: null
provider_family: null
...

6.5 持久化 API Key#

因为 llm_picker 是从 os.environ 读取,所以写入用户级环境变量(不是 api_key_source: file,DeepSeek 走不到那条路径):

Terminal window
[Environment]::SetEnvironmentVariable("DEEPSEEK_API_KEY", "<KEY>", "User")

验证:长度 35 字符,可在用户作用域读取到。

Key 的明文不在本文档中(本仓库是 git 仓库,见第 11 节)。


7. 验证与实测#

7.1 冒烟测试(读路径 —— LLM + 设备状态)#

$ mobilerun run "What app is currently open? Answer in one short sentence."
🚀 Starting: What app is currently open? Answer in one short sentence.
🤖 Agent mode: direct execution
👁️ Vision settings: Manager=False, Executor=False, FastAgent=False
🔄 Step 1/15
FastAgent response:
The device state clearly shows the Settings app is open, displaying the Accessibility (无障碍) settings screen.
🎉 Goal achieved: The currently open app is Settings (设置), showing the Accessibility (无障碍) page.

✅ 1 步完成,回答与真机状态一致(此前 mobilerun ping 失败时自动打开了无障碍设置页,所以前台确实是它)。

7.2 动作路径测试(README 官方示例)#

$ mobilerun run "Open the settings app and tell me the Android version"

执行轨迹(8 步,全部真实作用于手机):

步动作结果
1system_button(back)从无障碍页返回
2system_button(back)⚠️ 输出畸形工具调用标记
3system_button(back)返回到桌面
4open_app("设置")启动 com.android.settings
5click(index=42)⚠️ 输出畸形工具调用标记
6click(index=42)点击「关于手机」→ (629, 2355)
7click(index=31)点击「版本信息」→ (630, 2731)
8complete输出结论

✅ 动作链路完全可用:返回、启动应用、按无障碍树 index 精确点击,坐标都命中了目标。

7.3 ⚠️ 发现的准确性问题(重要)#

第 8 步给出的结论是错的:

Android version: 15 (Android 15). Device is a vivo X200s (model V2458A).
Confirmed via the kernel version string "6.6.127-android15-8-g8015405e252d-..." in
Settings > About phone > Version info.

真机实测(ground truth):

ro.build.version.release = 16 ← 实际是 Android 16
ro.build.version.sdk = 36
ro.product.model = V2458A

问题定性:模型看到内核串里的 android15 字样就断言系统版本是 15,没有完整扫描屏幕上的「Android 版本」字段。这属于模型侧的推理捷径,不是 Portal 或工具链故障 —— 无障碍树是完整可读的。

另一个观察:日志两次出现 Malformed tool-call markup detected (1/3),模型偶尔吐出畸形工具调用标记(可见 ||DSML|| 之类的干扰 token),靠 mobilerun 的重试机制恢复了。说明该模型在这个提示词格式下的输出稳定性有波动。

实践建议:涉及事实性结论(版本号、金额、日期)时,务必自行复核;或改用 deepseek-v4-pro 试试是否更稳。

7.4 一条 8 步任务的实际 token 消耗提示#

该任务共 8 步、每步都携带完整无障碍树,属于长上下文场景。deepseek-flash 的 context window 为 1,048,576,余量充足,但注意 reasoning 模式的 token 开销(见 6.3 测试 1)。


8. 最终状态#

8.1 mobilerun doctor 完整输出(唯一一条警告无害)#

Mobilerun Doctor
SDK Version 0.6.22 (up to date) ✓
Config %LOCALAPPDATA%\droidrun\droidrun\config.yaml ✓
ADB found, 1 device(s) ✓
Device 10AF5J16******* (online) ✓
Portal installed ✓
Portal Version v0.7.25 (pinned for mobilerun 0.6.22) ✓
Accessibility enabled ✓
Content Provider reachable ✓
State (content) a11y_tree, phone_state, device_context (via content_provider) ✓
Screenshot (content) ok (194 KB) ✓
TCP Mode localhost:58779 ✓
State (tcp) a11y_tree, phone_state, device_context (via tcp) ✓
Screenshot (tcp) ok (194 KB) ✓
Keyboard not listed ⚠
1 warning(s):
⚠ Keyboard: not listed
Will be set up automatically when needed

Keyboard: not listed 是说明 mobilerun 的输入法(MobilerunKeyboardIME)尚未启用,按需自动安装,不影响使用。

8.2 组件版本清单#

组件版本位置
uv0.9.22%USERPROFILE%\.local\bin\uv.exe
mobilerunv0.6.22%USERPROFILE%\.local\bin\mobilerun.exe
Python(mobilerun 用)3.13.11%APPDATA%\uv\python\cpython-3.13.11-windows-x86_64-none\
Python(系统)3.14.8C:\Python314\python.exe(未被 mobilerun 使用)
adb1.0.41 / 37.0.1%LOCALAPPDATA%\Android\Sdk\platform-tools\adb.exe
Portal(设备端)0.7.25vivo V2458A,包名 com.mobilerun.portal
LLMDeepSeek deepseek-flash5 个 profile 全部指向它

8.3 环境变量与 PATH#

用户级 PATH(最终):

%USERPROFILE%\.local\bin
%LOCALAPPDATA%\Programs\DeepSeek Harness\resources\runtime\cli\bin
%LOCALAPPDATA%\pnpm\bin
%LOCALAPPDATA%\Microsoft\WindowsApps
%APPDATA%\npm
%LOCALAPPDATA%\Programs\Microsoft VS Code\bin
%LOCALAPPDATA%\Android\Sdk\platform-tools ← 本次新增

用户级环境变量新增:DEEPSEEK_API_KEY(已脱敏)

8.4 本次产生 / 修改的文件#

文件说明
%LOCALAPPDATA%\droidrun\droidrun\config.yaml已修改:5 个 profile → DeepSeek/deepseek-flash
%LOCALAPPDATA%\droidrun\droidrun\config.yaml.bak-20261008-185427改动前备份
%LOCALAPPDATA%\Android\Sdk\platform-tools\新增:14 个文件(adb 全套)
%USERPROFILE%\.local\share\mobilerun\portal\com.mobilerun.portal-0.7.25.apk新增:51MB APK 缓存
%USERPROFILE%\Downloads\platform-tools-latest-windows\未改动(原样保留)

9. 使用指南#

9.1 首次使用前必做#

重开一个终端(PATH 与环境变量的改动只对新进程生效),然后:

Terminal window
mobilerun devices
mobilerun run "打开设置,开启深色模式"

9.2 常用命令#

Terminal window
mobilerun ping # 检查设备就绪
mobilerun doctor # 全链路体检
mobilerun device ui # 打印当前无障碍树(带 bounds)
mobilerun device screenshot # 截图
mobilerun device tap 500 1200 # 坐标点击
mobilerun device start com.android.settings # 启动应用
mobilerun run "..." --steps 30 --debug # 加步数 + 调试日志
mobilerun run "..." --reasoning # manager-executor 规划模式

9.3 ⚠️ 重要注意事项#

  1. 不要用 --vision / --vision-only DeepSeek 目前只有 deepseek-flash 和 deepseek-v4-pro 两个纯文本模型,没有视觉模型。开启截图理解会失败。默认配置未开 vision,保持现状即可。

  2. 不要跑 mobilerun setup 它固定用 -g,在 vivo 上必然报 INSTALL_FAILED_ABORTED。Portal 已装好,无需再跑。

  3. mobilerun configure 无法配置 DeepSeek 向导里没有这个选项。要改模型只能直接编辑 config.yaml。

  4. 换更强模型 把 config.yaml 里 5 处 model: deepseek-flash 改成 model: deepseek-v4-pro(已验证同样支持 function calling)。

  5. 重启后无障碍服务掉线 vivo 后台管控较强,已加入电池优化白名单。若仍掉线,去「设置 → 无障碍 → Mobilerun Portal」重新打开。

  6. 事实性结论需复核 见 7.3:Agent 曾把 Android 16 误报为 15。


10. 避坑清单与复现命令#

10.1 从零复现的关键命令(Windows)#

Terminal window
# 0) 确认 uv 已装 + 清华源
uv --version
Get-Content "$env:APPDATA\uv\uv.toml" # 应含 pypi.tuna.tsinghua.edu.cn
# 1) adb 进 PATH(复制到稳定位置,保留原目录)
$dst = "$env:LOCALAPPDATA\Android\Sdk\platform-tools"
New-Item -ItemType Directory -Force -Path (Split-Path $dst) | Out-Null
Copy-Item "$env:USERPROFILE\Downloads\platform-tools-latest-windows\platform-tools" $dst -Recurse -Force
$p = @(([Environment]::GetEnvironmentVariable("Path","User") -split ';' | ? {$_}) + $dst + "$env:USERPROFILE\.local\bin" | Select-Object -Unique)
[Environment]::SetEnvironmentVariable("Path", ($p -join ';'), "User")
# 2) 经镜像下载 Portal APK(GitHub 直连会卡死)
$cache = "$env:USERPROFILE\.local\share\mobilerun\portal"
New-Item -ItemType Directory -Force -Path $cache | Out-Null
curl.exe -L --retry 3 -o "$cache\com.mobilerun.portal-0.7.25.apk" `
"https://ghfast.top/https://github.com/droidrun/mobilerun-portal/releases/download/v0.7.25/com.mobilerun.portal-0.7.25.apk"
# 期望大小 53610015
# 3) 安装 Portal —— 必须去掉 -g(vivo 会拒)
adb install -r -t "$cache\com.mobilerun.portal-0.7.25.apk"
# 4) 启用无障碍服务(先确认没有其它已启用的服务!)
$svc = "com.mobilerun.portal/com.mobilerun.portal.service.MobilerunAccessibilityService"
adb shell settings put secure enabled_accessibility_services $svc
adb shell settings put secure accessibility_enabled 1
# 5) 电池优化白名单(vivo)
adb shell dumpsys deviceidle whitelist +com.mobilerun.portal
# 6) 验证
mobilerun ping
mobilerun doctor

10.2 一句话避坑表#

坑一句话对策
GitHub 大文件下载卡死URL 前加 https://ghfast.top/
vivo 拒绝 -g用 adb install -r -t,去掉 -g
系统只有 Python 3.14不用管,uv 会自动用 3.13.11
清华没有 astral-sh 镜像走 ghfast.top,不要找清华
DeepSeek 配不进向导手写 config.yaml + DEEPSEEK_API_KEY 环境变量
adb/mobilerun 找不到改完 PATH 要重开终端

11. 安全提示#

  1. API Key 已脱敏 本文档刻意不包含 DeepSeek API Key 明文。原因:本文件位于 git 仓库内,明文密钥会被提交进版本历史,事后即使删除也难以彻底清除。

  2. Key 的实际存放位置

    • 用户级环境变量 DEEPSEEK_API_KEY(注册表 HKCU\Environment,明文)
    • 相关会话的聊天记录中曾出现明文
  3. 建议轮换 如果该 Key 有额度意义,建议在 https://platform.deepseek.com 轮换一次。

  4. 本文的脱敏处理 为公开发布,文中替换了以下标识,不影响任何命令的复现:

    原内容替换为说明
    Windows 用户名%USERPROFILE% / %APPDATA% / %LOCALAPPDATA%PowerShell 代码块内用 $env:USERPROFILE,可直接粘贴运行
    设备序列号10AF5J16*******仅保留前 8 位
    本地仓库绝对路径以「博客仓库目录」代指——

    仍刻意保留的内容及理由:

    • 设备型号 V2458A / PD2415M:公开产品型号,非用户专有;且 7.3 节的问题分析依赖它
    • APK 的 md5、localhost 随机端口:构建产物校验值与本机端口,不指向个人
    • 各版本号、字节数、包名:公开信息

    另需注意:站点作者名本身已是公开的,所以本文脱敏 Windows 用户名只能避免「正文里再出现一份」,无法隐藏作者身份。


本文档由实际命令输出与源码查阅结果整理而成;所有版本号、字节数、路径均来自真实执行结果。

mobilerun 安装与配置记录:从 adb 到 DeepSeek 真机跑通
https://007912.xyz/posts/mobilerun-setup/
Author
Xieluyang
Published at
2026-10-08
License
CC BY-NC-SA 4.0
Comments