Deepseek-Harness-Local-Android

SoodokMIT活跃维护

在安卓手机上原生运行 DeepSeek Harness AI 智能体,无需 Root 或 Termux,自带扩展中心,让手机直接当本地 Agent 运行环境。

Run the DeepSeek Harness AI agent natively on Android — no root, no Termux, extension center included | 手机本地运行 DeepSeek Agent,免 Root 免 Termux

v1.5.0发布于 2026-11-06 12:41 UTC507star +13 / 7 天42fork同步于 2026-11-10 11:59 UTC

怎么上手

由 README 提炼,执行前请确认
从 GitHub Releases 下载 APK 安装(sideload);可选加装 Linux Workspace 容器(默认关闭),Alpine rootfs 已内置离线可用,Ubuntu 24.04 需首次联网下载。
硬件要求按 README 说明

README 未说明具体 CPU/GPU 型号或显存要求;实测在 3 GB 内存的低端设备上可运行整套引擎,支持 Android 8.0 至 16。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

在 Android 手机上原生运行 DeepSeek Agent,免 Root 免 Termux,自带编译环境与手机操控能力

在安卓手机上原生运行 DeepSeek Harness AI 智能体,无需 Root 或 Termux,自带扩展中心,让手机直接当本地 Agent 运行环境。

核心能力

  • 原生 bionic 运行时直接 execve 启动,冷启动约 2.3 秒
  • 自研免 root 容器 dsh_alpine,端到端启动中位 1.33 秒
  • 内置 20 套工具链,含 clang、JDK 17、gradle、rustc、go
  • 提供 108 条设备路由与 21 个独立能力开关操控手机
  • 21 个动作原语组成 PICK→ACT→VERIFY→RETRY 执行器

容易踩的坑

Linux Workspace 容器默认关闭,需要 glibc 程序或 apk/apt 装软件时要手动开启;Ubuntu rootfs 首次使用需联网下载约 30 MB 压缩包;容器不是安全沙箱,不隔离不可信代码。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v1.5.0
  1. v1.5.5-beta.1DSH Mobile v1.5.5-beta.1pre-release2026-11-09 · 2026-11-09 11:56 UTC
    查看更新说明

    版本信息

    项目值
    版本v1.5.5-beta.1(1.5.5-beta.1)
    versionCode375
    提交e97fb95
    变更范围v1.5.0 → v1.5.5-beta.1
    提交数量225
    构建时间2026-11-09 11:56 UTC
    架构arm64-v8a(真机)/ x86_64(模拟器)
    签名正式签名(release)/ debug 签名(debug)
    内置 SSH 插件(npm)latest

    安装包

    文件架构形态类型大小SHA-256
    dsh-android-v1.5.5-beta.1-arm64-v8a-debug-noruntime.apkarm64-v8anoruntimedebug46Mcf6f1ef74362b1f533809394e4c0291a824711a9b0e27b55d60e6b25a7ce527e
    dsh-android-v1.5.5-beta.1-arm64-v8a-debug.apkarm64-v8afulldebug173Mcbd8b2deb42699ab23eaacd1f2cc1b7554e6597e21825abf51fe70b9e4a761c7
    dsh-android-v1.5.5-beta.1-arm64-v8a-release-noruntime.apkarm64-v8anoruntimerelease44Md948361769c9b7047dba9dd067fd0741e5901ab6ad1007931c7ba82dde672458
    dsh-android-v1.5.5-beta.1-arm64-v8a-release.apkarm64-v8afullrelease171M395c85bf4ef6ea33b4d9593145eea9b11e92ba20152d112f411497b604d05378
    dsh-android-v1.5.5-beta.1-x86_64-debug-noruntime.apkx86_64noruntimedebug46M1803e208dc6d919e0a729f571149ca990b57a677fc1a844c341bb63072d162b6
    dsh-android-v1.5.5-beta.1-x86_64-debug.apkx86_64fulldebug173M41109cdb2fb2c313792ce5c0f3de3871b9e3f309d91a2181b82fb468117624d2
    dsh-android-v1.5.5-beta.1-x86_64-release-noruntime.apkx86_64noruntimerelease44Mbcc1727b9110f3273cf9c8c85e74b762a331e238bd5ad17a1f2a8db5ee5ac055
    dsh-android-v1.5.5-beta.1-x86_64-release.apkx86_64fullrelease171M65ef82cd79b95a75ab8aa561ec124a4e7e5c2f2f658605ecca3fa4b06bd2edb9

    变更内容

    新功能

    • feat(onboarding): 引导页重做 v1.7.0 —— 七步 + 平板侧栏 + 预览驱动 (beb9490)
    • feat(boot): 原生模式接上 Node 编译缓存 —— 冷启快约 1 秒(实测 17.5%) (5335c4a)
    • feat(ext): 终端工具 / 媒体 / 组网三类扩展 + rootOnly 可用性标注 (fbaba40)
    • feat(ext): 新增逆向分析分类(11 个工具)+ 修掉 7 个引用不存在包的条目 (36362df)
    • feat(a11y): 关掉权限后仍可提问与收尾,收尾后状态回绿(v1.6.35) (5e59c77)
    • feat(a11y): 动作间隔改成真人节拍(v1.6.33) (71417dc)
    • feat(caps): 三个设备能力补齐「用户可见面」—— 开关、目录、提示词一次打通 (f394545)
    • feat(a11y): 滑动时长按距离推 + 中段停顿 + 速度抖动 + 拖拽收手过冲(v1.6.32) (c5f9e64)
    • feat(linux): 工作台容器形态选项 + /dev/linux/* 能力面暴露给 AI (424005b)
    • feat(a11y): 滑动轨迹改成拟人曲线,直线匀速不再出现(v1.6.31) (97756e1)
    • feat(a11y): 描点扩到长按/滑动/双指,补上 ACTION_CLICK 路径(v1.6.29) (602f935)
    • feat(linux): 容器画面可触摸 —— X11 抓帧 + XTEST 注入接入产线 (3d782ee)
    • feat(cap): 无障碍补完 —— HTML 元素遍历 / 选择态 / 窗口枚举 (c8b60dd)
    • feat(a11y): 五态状态色 + 播放/暂停叫停 + 点击描点,悬浮窗改 C 版布局(v1.6.27) (0e11fdc)
    • feat(cap): root binder / sendevent —— 直调系统服务与原始输入注入 (3ddd53e)
    • feat(linux): chroot 沙箱(root 用户替代自研容器)+ 模拟器 su 限制诊断 (3811da1)
    • feat(cap): 事件流采集 —— 输入 / 物理按键 / 窗口切换(/dev/watch) (74059d0)
    • feat(cap): 更强的无障碍动作 + 直接调应用接口(/dev/node、content、appops) (fe762b8)
    • feat(cap): 补 Shizuku / ADB shell 通道(shz),并修两处会静默废掉它的坑 (71252e6)
    • feat(island): 悬浮质感改用边缘提亮,去掉玻璃与投影两个错误方案 (21c9225)
    • feat(cap): 给 root / Shizuku 用户补三条能力通道 (9113a2c)
    • feat(a11y): 任务完成给你打报告(v1.6.25) (1ff0d6c)
    • feat(a11y): 遇到困难能向用户提问(v1.6.24) (16c1997)
    • feat(ui): 灵动岛与浮层加玻璃质感,空闲时降低不透明度 (67ee2b9)
    • feat(a11y): 用户随时叫停 + 任务状态机(v1.6.22) (f92cb3a)
    • feat(ext): 扩展中心视觉重做 —— 幽灵按钮、玻璃卡片、行内版本胶囊 (fb894ba)
    • feat(a11y): 屏幕去重 + 交接给用户(v1.6.21) (29cec2f)
    • feat(cap): 三个设备能力 —— 定位 / 应用管理 / 拍照 (3080c31)
    • feat(a11y): 编号屏幕文档 v2 + 指纹预校验动作(v1.6.19) (67707aa)
    • feat(theme): MD3 全套界面 + 动态取色 + 独立主题页(已同步上游 main) (4be9534)
    • feat(ext): 多版本工具链选择 + 16 个编译环境扩展 (cff935e)
    • feat(plugins): 内置 @xiaopb/dsh-solution-explorer,并把内置插件机制通用化 (f6bc6e4)
    • feat(share): 外部文件入口 —— 分享/打开方式把文件交给输入框 (a478240)
    • feat(linux): 打开扩展中心 Linux 下载通道(EXT_LINUX_DOWNLOAD_ENABLED = true) (96a9b82)
    • feat(capability): 模糊命中直接给候选 + 47 条端点 limits 全覆盖 (f251828)
    • feat(capability): 能力自描述与可发现性(v1.6 C 方向) (1d5ae23)
    • feat(md3): 统一设置体系交互与外观 (c4423c7)
    • feat(md3): 扩展设置子页 Material 3 重构 (2107c80)
    • feat(md3): 保留原分区结构,组内改为分段卡片(首行上圆角/中间平角/末行下圆角) (ef22cc2)
    • feat(linux): ship a prewarmed Node compile c
  2. v1.5.4-beta.3DSH Mobile v1.5.4-beta.3pre-release2026-11-07 · 2026-11-07 14:40 UTC
    查看更新说明

    版本信息

    项目值
    版本v1.5.4-beta.3(1.5.4-beta.3)
    versionCode372
    提交62e18d8
    变更范围v1.5.0 → v1.5.4-beta.3
    提交数量108
    构建时间2026-11-07 14:40 UTC
    架构arm64-v8a(真机)/ x86_64(模拟器)
    签名正式签名(release)/ debug 签名(debug)
    内置 SSH 插件(npm)latest

    安装包

    文件架构形态类型大小SHA-256
    dsh-android-v1.5.4-beta.3-arm64-v8a-debug-noruntime.apkarm64-v8anoruntimedebug41M4c334e6b9f32b7bbe6a87bfb7b7b9453bead073c01bec74e65e8c162c093e16b
    dsh-android-v1.5.4-beta.3-arm64-v8a-debug.apkarm64-v8afulldebug168M7aac7ca78919436c9df23fcb21fd5a399c45654ab431f5f06b745bd5c8f8c0e2
    dsh-android-v1.5.4-beta.3-arm64-v8a-release-noruntime.apkarm64-v8anoruntimerelease39Mebaf3e68d971ea54b8a6be46b45d856f54f0407d8008661e69be64a4e8fc1a27
    dsh-android-v1.5.4-beta.3-arm64-v8a-release.apkarm64-v8afullrelease166M7a0d7e79a951005a4bcab9685ed31317f3c8271c6f7dc71185bd195dfd69d8a5
    dsh-android-v1.5.4-beta.3-x86_64-debug-noruntime.apkx86_64noruntimedebug42Md99689173cc002e39ff8d31940a61e2566737e762c0c011f2dd6059ebf799bf8
    dsh-android-v1.5.4-beta.3-x86_64-debug.apkx86_64fulldebug168Mc6f84abc2e26eeb3ec0ad8bca4690d3c7d33f5f9ecff3f05373dd8f64feeb46d
    dsh-android-v1.5.4-beta.3-x86_64-release-noruntime.apkx86_64noruntimerelease40M0cf08f41e6ed151b4243aa9e86ef901734de712160e3984ec218543c74d33dc5
    dsh-android-v1.5.4-beta.3-x86_64-release.apkx86_64fullrelease166M35ee755e36677793e92d9bf98ab13e13874fae9e82323afffc114e5bb57ee143

    变更内容

    新功能

    • feat(share): 外部文件入口 —— 分享/打开方式把文件交给输入框 (a478240)
    • feat(linux): 打开扩展中心 Linux 下载通道(EXT_LINUX_DOWNLOAD_ENABLED = true) (96a9b82)
    • feat(capability): 模糊命中直接给候选 + 47 条端点 limits 全覆盖 (f251828)
    • feat(capability): 能力自描述与可发现性(v1.6 C 方向) (1d5ae23)
    • feat(md3): 统一设置体系交互与外观 (c4423c7)
    • feat(md3): 扩展设置子页 Material 3 重构 (2107c80)
    • feat(md3): 保留原分区结构,组内改为分段卡片(首行上圆角/中间平角/末行下圆角) (ef22cc2)
    • feat(linux): ship a prewarmed Node compile cache in the APK (9c2ae8f)
    • feat(capture): 抓帧改用 --loop 持续模式 —— 修掉「画面停住不动且不报错」 (b09594e)
    • feat(linux): 容器合成画面直通 App —— 「抓合成画面」入口 (2ce4d16)
    • feat(linux): 容器帧服务接入 AHB 直写路径 —— 1080p 1.50 倍、720p 1.36 倍 (69a2437)
    • feat(ext): 扩展中心按发行版分派 —— Alpine(apk) / Ubuntu(apt) 双表 (e67c380)
    • feat(linux): 同步 AF_UNIX socket 路径翻译(镜像仓 8c941b8) (acc6618)
    • feat(md3): 设置列表改为 Material 3 原生分段卡片 (ebdfbd9)
    • feat(md3): 重构设置主页为真正的 Material 3 (f766ee7)
    • feat(md3): 全部 16 个设置页统一为 Material 3 (82ef31e)
    • feat(appearance): 设置页外观改用 Material 3 (ff17b31)
    • feat(appearance): 设置页外观整合为五项折叠卡片 (2dbe908)
    • feat(settings): 折叠模式加过渡动画、分区标题做成卡片 (e081328)
    • feat(settings): 设置页布局新增「折叠」模式 (830975e)
    • feat(appearance): 模糊改四档预设、卡片底色不透明度可调 (0028e03)

    问题修复

    • fix(md3): 恢复被 revert 静默覆盖的主题分派与 MaterialSwitch 类型 (c2ff98b)
    • fix(settings): 删掉 activity_settings 里死掉的文件目录行(MD3 重构残留) (c17f139)
    • fix(linux): rootfs 解包不再依赖 API 33+ 的 skipNBytes;修 seccomp 递归与输出 OOM (d353553)
    • fix(plugin): 内置插件升级改为直接解包,绕开 pnpm (e25fb56)
    • fix(plugins): mobile-layout 预装改为可升级 + fast-mode 适配引擎 0.2.2 硬契约 (0d28c9f)
    • fix(probes): 兄弟仓缺席时跳过 bridge 探针,别让 CI 长期红着掩盖真回归 (d65c9e2)
    • fix(settings): 分区标题写成「外观与显示」,页面上出现两个同名标题 (27b590d)
    • fix(onboarding): 完成页鲸鱼也改成蓝色 —— 它落在可变的强调色光晕上 (4341e4f)
    • fix(splash): 浅色模式下鲸鱼改成蓝色 —— 白鲸在近白背景上等于看不见 (b22080d)
    • fix(md3): 修正扩展中心未定义图标颜色资源 (926d923)
    • fix(selinux): 上下文自愈在普通模式下从未生效过 —— 改走特权通道并补 -h (03ec1b3)
    • fix(md3): 设置体系图标亮黑暗白并统一分段卡片 (d57fa1b)
    • fix(md3): 保留连续模糊值并统一二级页可读性 (8ab99c8)
    • fix(cleaner): 常驻服务 + 传递请求方环境(移植镜像仓 13a6b93) (84a2fd6)
    • fix(md3): 修正 MaterialAlertDialog 的 AppCompat 类型绑定 (f6758b6)
    • fix(cleaner): 自我重执行后 bionic 直通失效 —— 产线所有图形程序 rc=127 (5cd1260)
    • fix(linux): pkill -f 模式自匹配会杀掉自己,导致抓合成画面静默失败 (97d9d12)
    • fix(md3): 将 Slider 范围配置移到 Kotlin (9cdda75)
    • fix(linux): bootstrap 失败日志补 rc/timedOut/两路长度,否则完全无法诊断 (1517d95)
  3. v1.5.4-beta.1DSH Mobile v1.5.4-beta.1pre-release2026-11-07 · 2026-11-07 09:24 UTC
    查看更新说明

    版本信息

    项目值
    版本v1.5.4-beta.1(1.5.4-beta.1)
    versionCode370
    提交d65c9e2
    变更范围v1.5.0 → v1.5.4-beta.1
    提交数量93
    构建时间2026-11-07 09:24 UTC
    架构arm64-v8a(真机)/ x86_64(模拟器)
    签名正式签名(release)/ debug 签名(debug)
    内置 SSH 插件(npm)latest

    安装包

    文件架构形态类型大小SHA-256
    dsh-android-v1.5.4-beta.1-arm64-v8a-debug-noruntime.apkarm64-v8anoruntimedebug41M96fd43aa83f586c6c0229c601de085a24e21f47a26b2a8c997981d249c3542d1
    dsh-android-v1.5.4-beta.1-arm64-v8a-debug.apkarm64-v8afulldebug168M1224f0e9ab693ea2cc7943ad62aec986c2f36e4be6a706f0eed558c127c5fb5e
    dsh-android-v1.5.4-beta.1-arm64-v8a-release-noruntime.apkarm64-v8anoruntimerelease39Me5ecf36609679b88ecad5930cf31d306585df9b2e534bbbd72dfd06e51ba5e71
    dsh-android-v1.5.4-beta.1-arm64-v8a-release.apkarm64-v8afullrelease166M84e09b730de342d1e346789c89fb22774dad85c05ccb4a31a9268b1667448246
    dsh-android-v1.5.4-beta.1-x86_64-debug-noruntime.apkx86_64noruntimedebug42M4c3f4ff1b5bf82473fc64fa9e6d63107d0dacd5d13c5503596b8a6ea91838cf5
    dsh-android-v1.5.4-beta.1-x86_64-debug.apkx86_64fulldebug168M1c61e1c591a7daf87a48e9b262fe46523a2b3c62b44e799b91f592b192155031
    dsh-android-v1.5.4-beta.1-x86_64-release-noruntime.apkx86_64noruntimerelease40Mdc5dceb7b3ca3612ecc95d82a126f19ecc0cfabd2a4ba8de9dfd5f4058b29c18
    dsh-android-v1.5.4-beta.1-x86_64-release.apkx86_64fullrelease166Mdea1bb370d175a856b759d2eb14b4f699b0eb7da7838373c38aa151789c6e5a7

    变更内容

    新功能

    • feat(capability): 模糊命中直接给候选 + 47 条端点 limits 全覆盖 (f251828)
    • feat(capability): 能力自描述与可发现性(v1.6 C 方向) (1d5ae23)
    • feat(md3): 统一设置体系交互与外观 (c4423c7)
    • feat(md3): 扩展设置子页 Material 3 重构 (2107c80)
    • feat(md3): 保留原分区结构,组内改为分段卡片(首行上圆角/中间平角/末行下圆角) (ef22cc2)
    • feat(linux): ship a prewarmed Node compile cache in the APK (9c2ae8f)
    • feat(capture): 抓帧改用 --loop 持续模式 —— 修掉「画面停住不动且不报错」 (b09594e)
    • feat(linux): 容器合成画面直通 App —— 「抓合成画面」入口 (2ce4d16)
    • feat(linux): 容器帧服务接入 AHB 直写路径 —— 1080p 1.50 倍、720p 1.36 倍 (69a2437)
    • feat(ext): 扩展中心按发行版分派 —— Alpine(apk) / Ubuntu(apt) 双表 (e67c380)
    • feat(linux): 同步 AF_UNIX socket 路径翻译(镜像仓 8c941b8) (acc6618)
    • feat(md3): 设置列表改为 Material 3 原生分段卡片 (ebdfbd9)
    • feat(md3): 重构设置主页为真正的 Material 3 (f766ee7)
    • feat(md3): 全部 16 个设置页统一为 Material 3 (82ef31e)
    • feat(appearance): 设置页外观改用 Material 3 (ff17b31)
    • feat(appearance): 设置页外观整合为五项折叠卡片 (2dbe908)
    • feat(settings): 折叠模式加过渡动画、分区标题做成卡片 (e081328)
    • feat(settings): 设置页布局新增「折叠」模式 (830975e)
    • feat(appearance): 模糊改四档预设、卡片底色不透明度可调 (0028e03)

    问题修复

    • fix(probes): 兄弟仓缺席时跳过 bridge 探针,别让 CI 长期红着掩盖真回归 (d65c9e2)
    • fix(settings): 分区标题写成「外观与显示」,页面上出现两个同名标题 (27b590d)
    • fix(onboarding): 完成页鲸鱼也改成蓝色 —— 它落在可变的强调色光晕上 (4341e4f)
    • fix(splash): 浅色模式下鲸鱼改成蓝色 —— 白鲸在近白背景上等于看不见 (b22080d)
    • fix(md3): 修正扩展中心未定义图标颜色资源 (926d923)
    • fix(selinux): 上下文自愈在普通模式下从未生效过 —— 改走特权通道并补 -h (03ec1b3)
    • fix(md3): 设置体系图标亮黑暗白并统一分段卡片 (d57fa1b)
    • fix(md3): 保留连续模糊值并统一二级页可读性 (8ab99c8)
    • fix(cleaner): 常驻服务 + 传递请求方环境(移植镜像仓 13a6b93) (84a2fd6)
    • fix(md3): 修正 MaterialAlertDialog 的 AppCompat 类型绑定 (f6758b6)
    • fix(cleaner): 自我重执行后 bionic 直通失效 —— 产线所有图形程序 rc=127 (5cd1260)
    • fix(linux): pkill -f 模式自匹配会杀掉自己,导致抓合成画面静默失败 (97d9d12)
    • fix(md3): 将 Slider 范围配置移到 Kotlin (9cdda75)
    • fix(linux): bootstrap 失败日志补 rc/timedOut/两路长度,否则完全无法诊断 (1517d95)
    • fix(linux): 执行器容器补 /data/data bind,合成画面直通 App 才真正可用 (adf0c4b)
    • fix(linux): 冷启前置产物判据补全,bootstrap 失败不再是永久死角 (82b2ebc)
    • fix(engine): 容器模式门脚本自检不再用宿主路径判解释器 (15209ca)
    • fix(engine): 让"起不来"和"起来了但半残"都变成可判断、可操作的状态 (39435e4)
    • fix(linux): the shipped cache was for the wrong node, and cross-check it (44a9fa4)
    • fix(linux): seed cache at deploy time, and read version from the bundle (42dffda)
    • fix(md3): ?attr/colorBackground 解析不到 —— 它不是本应用的属性 (251dafd)
    • fix(lin
  4. v1.5.0DSH Mobile v1.5.0最新正式版2026-11-06 · 2026-11-06 12:41 UTC

    版本信息

    项目值
    版本v1.5.0(1.5.0)
    versionCode366
    提交ec95873
    变更范围v1.4.76 → v1.5.0
    提交数量145
    构建时间2026-11-06 12:40 UTC
    架构arm64-v8a(真机)/ x86_64(模拟器)
    签名正式签名(release)/ debug 签名(debug)
    内置 SSH 插件(npm)latest

    安装包

    文件架构形态类型大小SHA-256
    dsh-android-v1.5.0-arm64-v8a-debug-noruntime.apkarm64-v8anoruntimedebug36M13f1867be607369ffc91d3b9e50531acb23e133f63e2dbb95c4cc252e1676c20
    dsh-android-v1.5.0-arm64-v8a-debug.apkarm64-v8afulldebug163M6ea59405bb2c16d9403cfd102aef02776cc74f58815ac2bfca0360ac537f3a6e
    dsh-android-v1.5.0-arm64-v8a-release-noruntime.apkarm64-v8anoruntimerelease34Mea54d93b53a8b82be2009061cd3001ce126db3e911e7a0b37923bf5a53e5a526
    dsh-android-v1.5.0-arm64-v8a-release.apkarm64-v8afullrelease161M6d9cf1037f84fa9af82ffddedfac9c10c5438ae353621d48f8009e15a956e417
    dsh-android-v1.5.0-x86_64-debug-noruntime.apkx86_64noruntimedebug37M4e49c94cee852fc4d5a2d2feb849b712325fba9134c68abdea021696c2818b44
    dsh-android-v1.5.0-x86_64-debug.apkx86_64fulldebug163M36195a0f9af07339c96ec717414bedd5b594065f5a545b7b9463c006b32cd35c
    dsh-android-v1.5.0-x86_64-release-noruntime.apkx86_64noruntimerelease35M652784f2989552ccb8741efab95c88748490edebb2d6c106a89068b2d4935a7d
    dsh-android-v1.5.0-x86_64-release.apkx86_64fullrelease161M39c8b6a6e8e20f4b092138be1507783f207e7d057863c99bfe17c18920046a1e

    变更内容

    新功能

    • feat(cap): 「系统能力」页改为总览卡 + 六域双列磁贴 (c21d1d5)
    • feat(linux): framesrv 更新为支持 tri 模式的双架构产物 (7b0857c)
    • feat(linux): 容器画面进 App —— 补齐图形链路最后一段 (e057db7)
    • feat(linux): x86_64 容器支持 + 容器执行器补 DNS 端口 + 源码镜像同步 (279ef33)
    • feat(webview): DshAndroidBack 返回栈桥与双击退出,防误退与重载 (c40726a)
    • feat(splash): 启动页大升级 —— 去卡片、细进度环、状态单一数据源 (9082420)
    • feat(extension-store): 扩展中心接入 Linux 容器模式 (5dd2c61)
    • feat(settings): 维护与高级里新增「删除对话」(单选 + 一键清空) (d013948)
    • feat(splash): 启动页重做 + 显示引擎跑在原生还是 Linux 容器 (e039b05)
    • feat(linux): 容器运行器源码入库(专有许可)+ 四项容器内能力修复 (98ebea1)
    • feat(engine): root 系统级门脚本 —— 把手机 root 能力交给 AI (565651c)
    • feat(settings): AI 可读写 App 自身设置(/dev/settings)+ 补上缺失的 CurrentActivity (8a3ccd4)
    • feat(linux): 多发行版支持 —— Alpine(musl) 与 Ubuntu(glibc) 可选可切换 (13a46b5)
    • feat(about): 关于页加求 star 卡片 (7a0a924)
    • feat(linux): 终端 PTY 交互 —— 容器内真 shell,修四个环境/路径 bug (ad46301)
    • feat(linux): 引擎模式接线 —— 默认走 Linux 容器,可回退原生 (bd39fce)
    • feat(linux): 插件中心接入 Linux 容器 + 修 rename/link 的 bind 映射缺失 (506365d)
    • feat(linux): 免 root 完整 Alpine 工作区(seccomp 容器 + 极简 rootfs) (59ee6cd)
    • feat(agent): 上下文总线 + 主动提醒闸门 + 「AI 的手」可视化(beta.20) (338db7e)
    • feat(device): P1/P2 六项能力 —— BLE 外设 / 蓝牙 HID / 屏幕差分 / 音频回环 / 摩斯反馈 / 场景推断(beta.18) (824bf17)
    • feat(net): P0-4 按 UID 断网 / 查各 App 流量(v1.5.0-beta.17) (500a854)
    • feat(bt): P0-3 btsnoop 二进制解析(HCI 帧级日志)(v1.5.0-beta.16) (a2484c5)
    • feat(mcp): 对外 stdio MCP server —— 36 个设备端点派生为 MCP 工具(beta.14) (5482b40)
    • feat(onboarding): 首次启动引导改为六步向导 (db54d06)
    • feat(statusbar): 状态栏自定义 —— 展开态贴纸、收起态图标/形状/尺寸 (d66cef4)
    • feat(appearance): 设置页背景图(含不透明度与真高斯模糊) (eb3e8cb)
    • feat(device): 虚拟 HID 输入设备 + 无障碍三动作 + 能力地图(beta.13) (5fce97f)
    • feat(privacy): 个人数据四项分权 + 每次读取都通知栏告警 (78d7eee)
    • feat(dev): 自描述设备能力入口,端点目录单一数据源 (6c622ff)
    • feat(webview): DshAndroidOpen 系统打开/分享桥(dsh-solution-explorer B/D2 路) (b663662)
    • feat(perms+cli): 统一设备入口 dev、权限清单页、撤销权限、补齐 10 个缺口 (af24bcd)
    • feat(perms): 全权限声明 + 无差别自助授权(v1.5.0-beta.9 / 341) (0b92ab9)
    • feat(i18n): 引导页补泰语卡片,语言名统一 endonym 并加门禁 (1ed75a1)
    • feat(engine): 内置引擎升级到上游 0.2.1-rc.5 (a29da00)
    • feat(cap): 新增 6 项 AI 设备能力(通知回复/媒体控制/个人信息/NFC 围栏/弹窗兜底/录屏) (6fb4999)
    • feat(i18n): add Thai locale support based on v1.4.76 (694a071)
    • feat(ci): 支持试发行 tag v1.5.0-beta(prerelease) (2eb11ac)
    • feat: v1.5.0-beta 局域网验证码改 6 位数字并修复退避不递减 (0abd1b4)
    • feat(device): AI 设备能力扩展——9 个开关 + 蓝牙报文收发 + WiFi 底层
  5. v1.5.0-beta.22DSH Mobile v1.5.0-beta.22pre-release2026-11-05 · 2026-11-05 14:06 UTC
    查看更新说明

    版本信息

    项目值
    版本v1.5.0-beta.22(1.5.0-beta.22)
    versionCode353
    提交b5266d8
    变更范围v1.4.76 → v1.5.0-beta.22
    提交数量102
    构建时间2026-11-05 14:06 UTC
    架构arm64-v8a(真机)/ x86_64(模拟器)
    签名正式签名(release)/ debug 签名(debug)
    内置 SSH 插件(npm)latest

    安装包

    文件架构形态类型大小SHA-256
    dsh-android-v1.5.0-beta.22-arm64-v8a-debug-noruntime.apkarm64-v8anoruntimedebug30Ma4f79e6f889c88ab9a7ada9825a3dff7fe0d89afb030285116cadca2e0e47031
    dsh-android-v1.5.0-beta.22-arm64-v8a-debug.apkarm64-v8afulldebug157M0f734a56994d1f3f5ad5150b1ef809a75e9057ad172edfa93949eeea85d5316a
    dsh-android-v1.5.0-beta.22-arm64-v8a-release-noruntime.apkarm64-v8anoruntimerelease29Maec7fa94f4d07e9c1c4ffa1db60e080a893d4ddcc90ea4feb1fc56b50f25c015
    dsh-android-v1.5.0-beta.22-arm64-v8a-release.apkarm64-v8afullrelease156M8d55eb8ad7a784f731f092d2c90bd0807525e4ba8891e7497ce8dd5cbfd2a1ca
    dsh-android-v1.5.0-beta.22-x86_64-debug-noruntime.apkx86_64noruntimedebug31Mcda574fe70e8f3d9320dba668609580972480b9f7412cfd68277d3d1f3c66a7e
    dsh-android-v1.5.0-beta.22-x86_64-debug.apkx86_64fulldebug157M439688f3c613bef17dae1026328ff9f3c7ddb9f2fe1cb9dabcdbf368b49639c7
    dsh-android-v1.5.0-beta.22-x86_64-release-noruntime.apkx86_64noruntimerelease29M8739b2df862eb6a723251224719354f4483a4b40335b9362d535d2c0b77d466f
    dsh-android-v1.5.0-beta.22-x86_64-release.apkx86_64fullrelease156Mf375952ee9ee2ce8f1cab024d944750ec8d1251ae59dec3f56171bc71589b36e

    变更内容

    新功能

    • feat(engine): root 系统级门脚本 —— 把手机 root 能力交给 AI (565651c)
    • feat(settings): AI 可读写 App 自身设置(/dev/settings)+ 补上缺失的 CurrentActivity (8a3ccd4)
    • feat(linux): 多发行版支持 —— Alpine(musl) 与 Ubuntu(glibc) 可选可切换 (13a46b5)
    • feat(about): 关于页加求 star 卡片 (7a0a924)
    • feat(linux): 终端 PTY 交互 —— 容器内真 shell,修四个环境/路径 bug (ad46301)
    • feat(linux): 引擎模式接线 —— 默认走 Linux 容器,可回退原生 (bd39fce)
    • feat(linux): 插件中心接入 Linux 容器 + 修 rename/link 的 bind 映射缺失 (506365d)
    • feat(linux): 免 root 完整 Alpine 工作区(seccomp 容器 + 极简 rootfs) (59ee6cd)
    • feat(agent): 上下文总线 + 主动提醒闸门 + 「AI 的手」可视化(beta.20) (338db7e)
    • feat(device): P1/P2 六项能力 —— BLE 外设 / 蓝牙 HID / 屏幕差分 / 音频回环 / 摩斯反馈 / 场景推断(beta.18) (824bf17)
    • feat(net): P0-4 按 UID 断网 / 查各 App 流量(v1.5.0-beta.17) (500a854)
    • feat(bt): P0-3 btsnoop 二进制解析(HCI 帧级日志)(v1.5.0-beta.16) (a2484c5)
    • feat(mcp): 对外 stdio MCP server —— 36 个设备端点派生为 MCP 工具(beta.14) (5482b40)
    • feat(onboarding): 首次启动引导改为六步向导 (db54d06)
    • feat(statusbar): 状态栏自定义 —— 展开态贴纸、收起态图标/形状/尺寸 (d66cef4)
    • feat(appearance): 设置页背景图(含不透明度与真高斯模糊) (eb3e8cb)
    • feat(device): 虚拟 HID 输入设备 + 无障碍三动作 + 能力地图(beta.13) (5fce97f)
    • feat(privacy): 个人数据四项分权 + 每次读取都通知栏告警 (78d7eee)
    • feat(dev): 自描述设备能力入口,端点目录单一数据源 (6c622ff)
    • feat(webview): DshAndroidOpen 系统打开/分享桥(dsh-solution-explorer B/D2 路) (b663662)
    • feat(perms+cli): 统一设备入口 dev、权限清单页、撤销权限、补齐 10 个缺口 (af24bcd)
    • feat(perms): 全权限声明 + 无差别自助授权(v1.5.0-beta.9 / 341) (0b92ab9)
    • feat(i18n): 引导页补泰语卡片,语言名统一 endonym 并加门禁 (1ed75a1)
    • feat(engine): 内置引擎升级到上游 0.2.1-rc.5 (a29da00)
    • feat(cap): 新增 6 项 AI 设备能力(通知回复/媒体控制/个人信息/NFC 围栏/弹窗兜底/录屏) (6fb4999)
    • feat(i18n): add Thai locale support based on v1.4.76 (694a071)
    • feat(ci): 支持试发行 tag v1.5.0-beta(prerelease) (2eb11ac)
    • feat: v1.5.0-beta 局域网验证码改 6 位数字并修复退避不递减 (0abd1b4)
    • feat(device): AI 设备能力扩展——9 个开关 + 蓝牙报文收发 + WiFi 底层 + 定时提醒 (9a8c44f)

    问题修复

    • fix(linux): 容器内 DNS 真正免 root —— loader 双向端口改写 (60c2443)
    • fix(linux): musl 侧改用本地 DNS 代理 + readiness 补写发行版配置 + 修 PATH 宿主污染 (7878bfb)
    • fix(build): 补入 CurrentActivity.kt,修 HEAD 无法从干净检出编译的问题 (1891c39)
    • fix(linux): Alpine 的 DNS 真正修通 —— 本地 DoH 代理绑 53 端口 + 修 PATH 宿主污染 (b45c3f8)
    • fix(linux): glibc 发行版加 options use-vc 修 DNS —— Ubuntu 联网原本全废 (c9100c3)
    • fix(webview): 门槛 85 → 94,修正「通过门禁却白屏」的缺陷 (50d7404)
    • fix(linux): dsh_alpi

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    DSH Mobile · DeepSeek Harness for Android

    Downloads Stars Release

    CI Platform Engine Runtime License Last commit QQ Telegram


    四个数字,三件事

    维度我们的做法
    原生启动2.3 秒(低端 3 GB 设备也能跑起来)
    Linux 容器启动1.33 秒,容器层只占 0.8%
    手机能力接入 Agent108 条路由 / 42 条目录项 / 21 个独立开关
    手机端编译clang + JDK 17 + gradle + cmake + rustc + go

    下面三部分,逐条拆解这三件事背后的实现。


    一、快,是两条路都快

    把「快」和「能编」同时做好,是这件事里最难的一档。多数方案会先解决其中一个:

    • 原生运行时快,但跑不了 glibc 程序,也没有 apk / apt;
    • 容器或 rootfs能编,但启动前要先解压、挂载、初始化软件源,慢十几秒。

    我们两条路都做到了快,而且容器这一层几乎不带来额外开销。

    路线 A:原生 bionic —— 直接 execve,不套中间层

    整套 Node.js 运行时被编译成 Android 原生(bionic)二进制,直接打进 APK。它不需要「搭建」——没有 rootfs 要铺、没有伪文件系统要挂、没有软件源要初始化。冷启动只剩三件事:解压(仅首启一次)、用 execve 启动 Node、等待回环端口就绪。

    场景设备冷启动到引擎就绪
    真机实测一加 15T(Android 16)2.3 秒
    主流中端各品牌 Android5 ~ 6 秒
    极端低端紫光展锐手表(3 GB 内存)13 秒
    模拟器x86_64 / 2.5 GB2.2 ~ 2.7 秒

    作为参照:基于 proot 的方案在中低端设备上容易受限于内存与启动开销,主流机型上启动通常在十几秒量级;首次手工搭建 Linux 环境则需要数分钟。

    一台 3 GB 内存的手表能把整套引擎跑起来——同内存下,proot + glibc 连 rootfs 都铺不开。这不是调参调出来的,是架构差异。

    编译缓存:再提速约 20%

    从新版本开始,两条路径都注入了 Node.js 编译缓存(NODE_COMPILE_CACHE),把 JS 模块的编译产物落到磁盘,下次启动直接复用,省掉重复解析与编译。

    干净 A/B 对照(同一模拟器、x86_64、各 3 轮、每轮清场):

    状态三轮结果中位数
    缓存命中3652.2 / 3416.8 / 3385.7 ms3416.8 ms
    缓存清空4540.2 / 4088.8 / 4528.4 ms4528.4 ms

    启动耗时减少 1111.6 ms,约 24.5%,缓存落盘体积为 15 MB。

    有一个必须处理的细节:NODE_COMPILE_CACHE 是懒写盘的。不注入刷盘器时,跑完一整轮后,缓存目录也只有 16 KB——缓存等于不存在。所以我们内置了 node-compile-cache-flusher.cjs,在原生与容器两条路径中都注入它,让缓存真正落盘,达到 15 MB。

    这是当前唯一还有正收益的启动优化项,已进入产线。

    路线 B:Linux 容器 —— 端到端中位 1.33 秒,容器层只占 0.8%

    这是最反直觉的一条数据。

    在自研容器 dsh_alpine 里,跑一条命令只要 2.4 ms;「从零 → 进 Linux → 引擎就绪」的端到端耗时中位数为 1.33 秒。

    拆开看这 1.33 秒花在哪:

    环节占端到端耗时
    容器层本身(路径翻译 + SIGSYS 处理 + ELF 加载)0.8%
    引擎插件加载(Node 侧)96%

    结论:容器这层几乎不花时间。 换任何 OS 级方案,瓶颈都在 Node 加载插件所占的那 96%,不在容器——而那 96% 恰恰是唯一无法绕过、也不该绕过的部分。

    同一台设备(OPPO PLZ110 / Android 16 / 内核 6.12.38)横向对照:

    方案进 Linux 跑一条命令
    我们的 dsh_alpine2.4 ms
    真 chroot(需 root)1.6 ms
    proot(免 root)19 ~ 33 ms

    我们只比需要 root 的真 chroot 慢约 1 ms(就是路径翻译与信号处理的成本),但比 proot 快 8 ~ 14 倍。

    内存表现同样干净——跑引擎时与真 chroot 几乎等同(容器 180186 MB vs 真 chroot 181187 MB),容器 loader 自身 RSS 仅 1.8 MB。文件 IO 比 proot 快约 30 倍,syscall 快 2.7 倍。

    换句话说:我们不是「在慢的基础上做优化」,而是把容器这一层做到了接近零开销。免 root,却有 root 级的性能。

    起点为什么能这么快(六条硬约束)

    决策换来了什么
    bionic 原生运行时,不走 glibc、不套容器省掉用户态翻译,省掉 rootfs 解压与挂载
    容器用 seccomp + SIGSYS,不用 ptrace省掉 proot 的全量 syscall 拦截与用户态模拟
    编译缓存落盘(两条路径都注入刷盘器)复用 JS 编译产物,再省约 1.1 秒 / 24.5%
    运行时预置进 APK(130.8 MB → 解压 418.1 MB / 15292 个文件)首启不用下载,装完即用,断网也能启动
    targetSdk = 28(sideload 策略)豁免 Android 10+ 的 W^X,可直接 execve 私有目录二进制
    CI 收集 + SONAME 去重 + SHA 校验,全部 .so 16 KB 页对齐产物可复现;Android 15+ 的 16 KB 页内核直接可用

    另有一条:前端注入 polyfill,把 WebView 门槛从 Chrome 126 拉回 85——国产 ROM 常见的 96 实测可用。


    二、手机不是聊天对象,是执行对象

    有一批同类项目在某些方面做得比我们好——界面更成熟、移植适配更广。我们也承认这一点。

    而「Agent 到底能替你操作多少东西」,是这一层里更难被补上、我们投入最多的部分。

    我们的上限是:只要 Android 肯给,Agent 就能用。

    1354 项权限声明,真机实收 432 项。提供 108 条 HTTP 路由、42 条自描述目录项,配有 21 个独立能力开关——每项能力都要用户单独点头,不是一把梭全开。

    它能真正操作这台手机

    层面能力
    看无障碍节点树(含坐标 / 角色 / 可点性)、截图(不弹 MediaProjection 授权框)、OCR 兜底、帧差判断、屏幕变化监控
    动点按 / 长按 / 双击 / 滑动 / 拖拽 / 双指缩放 / 输入 / 按键 / 启动 App / 构造 Intent / 滚动查找 / 滚动收集 / 等待 / 条件分支
    闭环21 个动作原语组成的 PICK → ACT → VERIFY → RETRY 执行器;执行失败时会换锚点、换动作、换路径,并把失败证据(候选列表、截图、原因)交回决策层
    看见它的手dev hand 在屏幕上画出 AI 即将点击的点:绿 = 点击 / 橙 = 长按 / 蓝 = 滑动,2.5 秒淡出,不吃触摸事件
    感知电量 / 温度 / 音量 / 内存 / 网络 / 前台应用 / 加速度 / 陀螺仪 / 光线 / 距离 / 计步 / 磁场 / 气压
    上下文dev context 一次返回时间 + 屏幕 + 锁屏 + Doze + 电池 + 网络 + 前台应用 + 通知概况 + 该不该打扰
    个人数据日历 / 联系人 / 短信 / 通话记录(四项独立授权)
    通知列表 / 聚合摘要 / 直接回复(RemoteInput)
    控制WiFi / 蓝牙 / 音量 / 亮度 / 手电筒 / 振动 / 媒体会话 / 定时提醒 / 地理围栏 / NFC 读标签
    射频蓝牙扫描 + 广播 + GATT + RFCOMM、手机当 BLE 外设、手机冒充蓝牙键盘、HCI 二进制日志解析、WiFi 链路与抓包
    网络按 App UID 查流量、按 UID 插防火墙规则断网(只断目标应用,不断自己)
    虚拟硬件通过 /dev/uhid 注册真实的键盘 / 鼠标 / 多媒体键——系统分不出它和物理设备
    系统层root 门脚本提供 19 个子命令:进程 / 文件 / 属性 / 服务 / 包管理 / 设置 / 网络 / 挂载 / 日志 / 任意命令

    Root 不是必需,但给了就是另一台机器

    三档身份,从普通到 Root:

    模式引擎身份能做什么
    普通App 沙箱身份工作区、文件、Shell、Node、PTY、插件、多数常规 Android 能力
    ShizukuApp 身份 + shell 桥dumpsys / cmd / pm / am、部分系统操作
    Rootuid 0/dev/uhid 虚拟输入、UID 级防火墙、Doze 白名单、系统级进程与文件、底层射频

    Root 模式下的四条自律(不是能力限制,是我们自己划的线):

    1. rm / exec / prop set / pm uninstall 默认 dry-run,必须显式传 confirm=1 才执行
    2. 关键进程保护:对 init / zygote / zygote64 / system_server / surfaceflinger / servicemanager / logd / vold / netd 的操作一律拒绝
    3. rm 不真删——移进隔离区 /data/local/tmp/dsh-root-trash/<batch>/,root undo <batch> 可恢复
    4. 绝不修改 SELinux 策略:可执行代码里不存在 setenforce / supolicy / magiskpolicy / sepolicy-inject

    这些坑是真机踩出来的,都写进了代码注释

    现象真因
    虚拟 HID 在 App 进程里打不开/dev/uhid 只放行 u:r:ksu:s0;App 却是 u:r:untrusted_app。所以虚拟 HID 走引擎侧门脚本,不经桥
    创建了设备却收不到按键必须留 200 ms 等 InputDispatcher 注册;急着发出的按键会被丢弃
    事件抓得到,系统不响应屏幕必须 Awake。Dozing 下事件能到内核(getevent 看得见),但 InputDispatcher 不派发
    音量键在 Consumer 页无效两页 usage 号不通用:音量加在 Consumer 页是 233,在 Keyboard 页是 128
    防火墙规则明明在链上,却读回 nulliptables -vL 打印的是 owner UID match 10360,不是命令行的 uid-owner——第一版按后者 grep,结果全空
    断网后 ping 全丢包,判不出成败ping 需要 ICMP raw socket,普通 uid 拿不到,有没有规则都 100% 丢包。必须读规则命中计数

    自描述,不需要背文档

    dev                    # 列出 9 组能力目录
    dev <能力>             # 看某个能力的用法
    dev <能力> k=v         # 直接执行
    dev api GET /dev/help  # 原始目录 JSON(含 params / body / limits)
    dev raw                # 真实路由表(可核对目录是否漂移)
    

    dev 是纯渲染器,从服务端拉目录,不在脚本里硬编码能力名。MCP 工具表也从同一份目录派生——42 个工具,新增端点会自动出现在工具表里,不用维护第二份清单。


    三、手机上真的能编译

    这是整件事里投入产出最不对称的一块,也是我们最想强调的。

    20 套工具链,一键装,装完就能编。

    不是「能跑脚本」,是完整的编译链

    分类工具链提供的二进制
    C / C++Clang / LLVMclang clang++ make
    JVMOpenJDK 17java javac jar
    Android 构建android-buildtoolsaapt aapt2 apksigner gradle d8
    构建系统CMakecmake
    RustRustrustc cargo
    GoGogo gofmt
    PythonPythonpython3 pip3
    其他语言Ruby / PHP / Lua / Perlruby gem php lua perl
    版本控制Gitgit
    打包Archiverszip unzip xz
    媒体FFmpeg / ImageMagickffmpeg ffprobe magick convert
    数据库SQLitesqlite3
    远程OpenSSH / ADBssh scp adb fastboot
    本地推理llama.cppllama-server llama-cli llama-embedding
    编辑Vimvim

    三条编译链,都在这台手机上跑通

    ① 原生 C / C++ —— clang + make + cmake,能编出 .so、能编 NDK 工程。

    ② Java / Android —— OpenJDK 17 + gradle + aapt2 + apksigner + d8。这是一条真能打出 APK 的完整编译链,我们用它在手机上编过本项目的扩展。

    这条路有一个很容易踩的坑:android-buildtools 内嵌的 gradle 启动脚本在 Android 的 toybox 环境里是开箱即坏的——/system/bin/xargs 是 toybox 版本,不剥引号,会把 "-Xmx64m" 原样传给 JVM,报 Could not find or load main class "-Xmx64m";内嵌 JDK 还把 user.home 与 java.io.tmpdir 硬编码为某个外部环境的固定路径。我们在安装期打补丁修掉了这些问题(issue #86),现在开箱可用。

    ③ 更多语言 —— rustc / cargo、go、python、ruby、php、lua、perl,各自采用独立闭包安装,并进行 SHA-256 校验和原子发布。

    兼容性:两条腿走路,不留缺口

    第三条重点中,兼容性是最容易被忽略、却最实用的一层:

    你要跑的走哪条
    常规 Node / Python / Go / Rust / C 工具链原生 bionic(2.3 秒启动,本地工具链直接可用)
    只发布 glibc 构建的预编译 CLILinux 容器(Ubuntu rootfs,apt 装依赖)
    需要 apk add / apt install 装任意系统软件Linux 容器(Alpine 或 Ubuntu)
    需要 jemalloc / libnuma 这类 glibc 专有库Linux 容器(glibc 2.39 完整用户态)

    两条路线共用同一套引擎代码、同一个 $DSH_HOME、同一份工作区。 切换路线不需要重装、不需要重新配置、不需要第二个 App。

    把两条同时打通、还都保持秒级启动,是这件事最难的地方。我们把两条都做成了开箱可用。

    需要 glibc 时:Linux Workspace

    可选加装,默认关闭。 这是一套自研的免 root 用户态容器:

    特性实现方式
    不依赖 ptraceseccomp BPF 捕获指定 syscall + SIGSYS handler
    不依赖 user namespace固定基址 0x2000000000、ET_EXEC 非 PIE、自写 ELF loader
    不依赖 chroot用户态路径翻译,/proc /sys /dev 宿主透传
    不要求 Root全程在 App 沙箱内运行
    双向端口映射seccomp 同时改写 guest 与 host 侧端口

    首次启动时,容器通过 self-reexec 完成 guest 用户态接管,之后运行的就是一个正常的 Linux 进程树。

    两套 rootfs 任选:

    发行版libc包管理器来源压缩解压
    Alpine 3.22muslapkAPK 内置,离线可用3,979,016 B8,510,313 B
    Ubuntu 24.04 baseglibc 2.39apt首次联网下载29,936,675 B100,784,109 B

    实测:容器启动 31 ms;Ubuntu 冷启 2.6 ~ 4.2 秒;Alpine 冷启 0.1 秒级。Ubuntu 比 Alpine 慢一个量级,是由发行版自身开销(glibc + init 脚本链)决定的,不是加载器缺陷。

    注意:这不是安全沙箱。它保证兼容性和性能,不隔离不可信代码。

    能编,就能跑

    编完直接起本地服务,在手机内的 WebView 中预览:

    「在当前工作区建个项目,编译它,起个开发服务器,把 127.0.0.1 预览链接发我。」

    Agent 会真的执行:建目录 → 写代码 → make / gradle build → 起服务 → 给你回环链接。

    不提供 X11 / Wayland 桌面,图形结果走本地 HTTP + WebView 预览。


    各条路线各自擅长什么

    先说清楚一件事:已经有好几个同类项目在某些方面做得比我们好——界面打磨更成熟、移植适配更广、生态更热闹。这不是客套,是我们判断自己该往哪补的依据。

    下面这张表不是排名,是能力侧重对照。每一列都有它擅长的场景。

    轻量聊天型移植手工搭 Linux 环境proot 容器本方案
    强项上手快、界面轻环境完整、可控性高免 root 跑 Linux 的成熟方案编译环境 + 手机能力同时具备
    需要 Root否否否否(要 Root 时有完整通道)
    需要额外 Linux 环境否是常需要否
    原生启动轻量场景更快分钟级十几秒起2.3 秒
    容器启动不适用分钟级需完整 rootfs1.33 秒端到端(容器层 0.8%)
    免 root 容器性能—不适用成熟可用2.4 ms/命令,接近真 chroot
    编译缓存加速无无无有(约 24.5%)
    手机能力接入 Agent以界面为主需自己写需自己写108 路由 / 42 目录 / 21 开关
    手机端编译 C / C++通常不做有有有
    手机端编译 Java / APK通常不做部分部分有(JDK 17 + gradle + aapt2 + apksigner)
    glibc 兼容无是是容器可选(Alpine + Ubuntu 双 rootfs)
    Root 级能力无需外挂需外挂19 个子命令 + 四道自律
    装完即用是否否是

    我们的取舍是:不跟最好的那几个比谁界面更漂亮,而是把「真能干活」这一层补满。

    如果你要的是尽快跑起来聊两句,轻量方案可能更合适;如果你要在手机上真的编译、真的操作设备,那才是我们擅长的场景。


    📖 完整能力清单

    以下是按分组列出的全部能力。前七组对应 GET /dev/help 的自描述目录(42 条目录项 / 36 个唯一路径),另附几个目录之外但真实存在的路由(/dev/help、/dev/perms/status、/dev/perms/revoke)。

    感知(5 项)

    端点能力
    GET /dev/status设备总览:电量 / 温度 / 音量 / 屏幕 / 内存 / 网络 / 前台应用
    GET /dev/ping桥与无障碍是否在线(最快的一次健康检查)
    GET /dev/sensors传感器读数:type=accel|gyro|light|proximity|step|magnet|pressure
    GET /dev/notifications当前通知列表(需通知使用权),limit=20
    GET /dev/media当前媒体会话:标题 / 艺术家 / 进度 / 播放状态

    个人数据(4 项,各自独立授权)

    端点能力
    GET /dev/calendar查日程,from / to 为毫秒时间戳
    GET /dev/contacts搜通讯录,q=<关键词> limit=20
    GET /dev/sms读短信,q=<关键词> limit=20
    GET /dev/calls通话记录,limit=20(需 READ_CALL_LOG)

    控制(6 项)

    端点能力
    POST /dev/controlop=wifi|bt|volume|brightness|torch|vibrate;WiFi / 蓝牙在 Android 10+ 会返回 user_confirmation_required
    POST /dev/clipboard剪贴板读写
    POST /dev/media媒体控制:op=play|pause|toggle|next|previous|stop|seek|volume|stream-volume
    POST /dev/sms打开短信发送界面(不直接发送,由用户确认)
    POST /dev/notify-reply代用户回复可回复的通知(RemoteInput)
    POST /dev/calendar新增日程

    调度(3 项)

    端点能力
    POST /dev/remind建定时提醒,in_seconds= 或 at=<ISO8601>,repeat={"kind":"once|daily|weekday"};不依赖网络,重启后仍在
    GET /dev/remind-list列出全部提醒
    POST /dev/remind-cancel取消提醒

    底层射频与感知扩展(16 项)

    端点能力需 Root
    POST /dev/bt蓝牙底层:op=status|enable|disable|scan|advertise|connect|services|read|write|rfcomm|log;log 支持 format=binary 解析 HCI 抓包部分
    POST /dev/wifi-radioWiFi 底层:op=status|scan|enable|disable|link|capture抓包需
    POST /dev/net按 App(UID)查流量 / 断网;查询不需 root,封锁需封锁需
    POST /dev/ble手机当 BLE 外设(GATT Server),别的设备连上来读写你开放的特征值
    POST /dev/bt-hid手机冒充蓝牙键盘控制别的设备(HID Device,部分 OEM 会拦)
    POST /dev/pulse通过振动传递摩斯电码:不用亮屏、不出声就知道结果
    GET /dev/context上下文总线:时间 / 屏幕 / 锁屏 / Doze / 电池 / 网络 / 前台应用 / 通知概况 + should_nudge
    POST /dev/nudge主动提醒闸门:静音时段 / 息屏 / 锁屏 / Doze / 同一 key 的 30 分钟冷却,命中任一条件即拒,并回报具体原因
    POST /dev/hand「AI 的手」可视化:op=tap|path|clear|hide|status|debugbg
    GET /dev/notify-digest通知摘要:按 App 聚合计数 + 最近一条的时间(不返回正文)
    POST /dev/scene传感器场景推断:dark / covered / outdoor / still / moving / walking / running / altitude_change
    POST /dev/screenwatch屏幕变化检测:只回 changed_ratio / mean_delta / 变化网格,不存视频也不存图
    POST /dev/doze电池优化白名单自助:op=add|remove|list,并回报是否真的生效
    GET /dev/nfcNFC 硬件状态:硬件是否存在 / 系统是否开启 / 前台读标签是否已启动
    POST /dev/nfcNFC 前台读标签(NDEF 文本与原始字节);无刷写、无卡模拟
    POST /dev/geofence地理围栏:op=list|add|remove|clear

    屏幕与交互(6 项)

    端点能力
    POST /dev/dialog弹窗检测:用几何判据(底部成对按钮)找出系统弹窗与安全按钮
    POST /dev/verify校验某个动作是否真的生效(前后屏幕对比),expect= / gone=true|false / timeout_ms=
    GET /dev/record录屏状态:是否拿到授权 / 是否正在录屏 / 已录多久
    POST /dev/record屏幕录制;op=audio 时用 AudioPlaybackCaptureConfiguration 录制其他 App 的音频
    GET /dev/hid虚拟 HID 设备状态:创建状态 / 设备类型
    POST /dev/hid虚拟 HID 设备:注册真实外设键盘 / 鼠标 / 多媒体键并注入按键;op=status|create|key|tap|text|mouse|destroy

    权限自助(2 项,另含 revoke 子路由)

    端点能力
    GET /dev/perms权限总览:声明数 / 已获授权数 / 尚缺数(另有 GET /dev/perms/status 看进度详情)
    POST /dev/perms授予权限,body {"force":true}
    POST /dev/perms/revoke撤销指定权限,body {"perms":[...]}

    扩展与诊断(1 项)

    端点能力
    GET /diag桥自诊断:端口 / token / 无障碍 / 各能力开关

    21 个独立能力开关

    每项能力都要用户单独授权,默认全关。开关保存在 capabilities 偏好设置中,键名前缀为 cap.:

    开关覆盖能力
    status设备总览、上下文总线
    sensor传感器读数、场景推断
    notify主动提醒(nudge)
    notify_read通知列表、通知摘要
    notify_action代用户回复通知
    clipboard剪贴板读写
    control硬件开关、振动、Doze 白名单、弹窗检测、动作校验、「AI 的手」
    wifiWiFi 底层
    bt蓝牙底层、BLE 外设、蓝牙 HID
    sched定时提醒
    media媒体会话读写
    personal_calendar日历读写
    personal_contacts通讯录
    personal_sms短信读写
    personal_calls通话记录
    personal个人数据总开关
    rfNFC、地理围栏
    screen_capture屏幕变化监控、录屏
    hid虚拟 HID 设备
    net按 UID 查流量与断网
    root系统级门脚本

    33 个门脚本

    门脚本是给 AI 直接调用的命令行入口,比 dev api 更省 token、更适合脚本化:

    门脚本用途
    dev统一自描述入口:能力目录、用法、执行、直调 API、查路由表
    scr屏幕脚本:dump / shot / tap / input / swipe / key / find / changed / batch
    loop本地闭环执行器:多步计划一次下发,PICK → ACT → VERIFY → RETRY
    fast无障碍操作期间的「思考开关」,临时关掉干扰
    root系统级 19 个子命令:info ps kill cat ls rm undo cp mv chmod chown prop svc pm settings net mount journal exec
    hid虚拟 HID 一次性执行器:probe / create / tap / text / key / mouse
    mcp设备 MCP server(stdio JSON-RPC):serve / list / selftest / probe
    psx列进程
    killx按 pid 或名称模式结束进程
    say朗读文本
    media控制当前正在播放的媒体
    notify发通知
    notify-reply代用户回复一条可回复的通知
    remind定时提醒
    bt-radio蓝牙应用层:扫描 / 广播 / GATT / RFCOMM
    wifi-radioWiFi 底层(基于 iw):扫描(含隐藏 SSID)/ 链路 / 抓包
    device-control硬件开关
    device-status一次性设备快照
    device-ping最快的健康检查(桥 + 无障碍)
    dev-calendar / dev-clip / dev-contacts / dev-sms / dev-phone个人数据各端点
    dev-dialog / dev-verify弹窗检测与动作校验
    dev-geofence / dev-nfc地理围栏与 NFC
    dev-record / dev-sensors录屏与传感器
    getperm / grantperm / revokeperm权限查询、授予、撤销(只读 / 需 Root)
    _dsh_http.sh公共库:用 bash 内建 /dev/tcp 实现 HTTP 客户端,不是独立入口

    21 个动作原语

    loop 执行器支持的完整动作集:

    tap tap_text double_tap long_press swipe drag pinch input key launch intent scroll scroll_find scroll_collect set_switch collect repeat repeat_until back_to sleep noop


    📦 安装

    1. 确认架构

    adb shell getprop ro.product.cpu.abi
    

    arm64-v8a → 手机包;x86_64 → 模拟器包。

    2. 选包

    包体积代价适合
    完整包(-release.apk)~161 MB运行时预置,装完即用、离线可启动绝大多数人
    简单包(-noruntime.apk)~34 MB首启联网下载 130.8 MB 运行时(解压后 418.1 MB)存储紧张 / 想独立更新运行时
    源码构建视参数需 JDK 17 / SDK 36 / NDK / CMake / Node / Python开发者

    两个包跑的是完全同一套引擎,差别只是运行时在 APK 里还是在网络上。

    3. 首次启动

    1. 引导页选语言 / 朝向 / 主题
    2. 选运行模式:普通(不需要 Root)/ Shizuku / Root
    3. 等运行时就位(完整包已内置,只需首次解压;简单包此时联网下载)
    4. 配置模型 API Key 或登录模型服务
    5. 选工作区

    第一次可以这样测:

    「在当前工作区建个 hello.c,用 clang 编出来跑一下,把输出发我。」

    4. 想操作其他 App

    到系统设置里开启 DSH Screen Tap 无障碍服务。Android 13+ 还要确认「允许完全控制设备」。App 不能静默开启这个权限,必须由你手动点。

    5. 想用 Linux 容器

    设置里切到 Linux 模式,首次会部署 Alpine(内置,离线)或 Ubuntu(需下载约 30 MB)。两条路径共用同一份工作区与配置。


    🔧 从源码构建

    # 前置:JDK 17+、Android SDK 36、Node 22、Python 3
    
    # 1) 收集运行时(拉 bionic 包 + 打 Android 适配补丁)
    ./scripts/build-runtime.sh --abi arm64-v8a --out dist/runtime-arm64-v8a.zip
    
    # 2) 构建 APK
    ./gradlew :app:assembleDebug -Pabi=arm64-v8a -Ppackage=full \
      -PruntimeZip="$PWD/dist/runtime-arm64-v8a.zip"
    
    # 输出:app/build/outputs/apk/debug/app-debug.apk
    

    Windows Git Bash 用 gradle.bat 替代 ./gradlew。

    不打包运行时(体积小,首启要下载):

    ./gradlew :app:assembleDebug -Pabi=arm64-v8a -Ppackage=noruntime
    

    运行时流水线细节见 docs/CI_RUNTIME_PIPELINE.md。


    📚 深度文档

    文档内容
    docs/CAPABILITY_MAP.md手机能力全量盘点、权限档位、实现状态
    docs/ACCESSIBILITY.md无障碍控制、视觉兜底、失败恢复
    docs/CI_RUNTIME_PIPELINE.md运行时收集、去重、校验、发布
    docs/RUNTIME_SWAP.md运行时两阶段换装与混合态恢复
    docs/LAN_WEBUI.md局域网 WebUI 代理与验证码
    docs/SSH.mdSSH 远程工作区
    docs/android-agent-routes.zh.mdAndroid Agent 路线对比长文
    docs/RELEASE.md签名、构建、发布流程

    ⛔ 边界(请知悉)

    不是端侧大模型。 模型不在 APK 里,走你配置的 API 或模型服务。

    不是安全沙箱。 Linux Workspace 也一样——它保证兼容性和性能,不隔离不可信代码。Root 模式下 Agent 拥有整个设备的读写能力。

    有些权限静默不了(系统不让,会返回 user_confirmation_required,绝不假装成功):无障碍服务、MediaProjection、Android 13+ 的 WiFi / 蓝牙开关、部分 OEM 的 HID Profile。

    长任务不等于永不中断。 前台服务 + 监督器尽力保活,但用户强停、极端省电策略、厂商冻结后台(如 OplusHansManager)、设备重启、Root 操作杀进程都会断。断了要重新派发。

    无障碍读不全所有界面。 纯 Canvas、游戏画面、部分受保护页面没有可用节点树,程序会按层降级(节点树 → OCR → 图标几何 → 帧差),但仍不能把所有图形界面变成可靠的结构化信息。

    不该拿它做的事。 不要用虚拟 HID / 无障碍 / Root 绕过风控、欺骗用户、操作未授权设备。项目不提供让注入输入「不可检测」的实现。


    ❓ FAQ

    需要 Root 吗? 不需要。普通模式已经能跑引擎、编译、读文件、用多数常规能力;Root 只是把系统级那一层也打开。

    Linux Workspace 需要 Root 吗? 不需要。它用 seccomp 在 App 沙箱内加载 rootfs,不依赖 Root / ptrace / user namespace / chroot。

    真的能在手机上编 APK 吗? 能。OpenJDK 17 + gradle + aapt2 + apksigner + d8 全套,装 android-buildtools 扩展即可(其中的 gradle 启动脚本我们已按 issue #86 修好)。

    完整包 161 MB 装了什么? 整套 bionic Node 运行时——解压后 418.1 MB、15292 个文件。简单包只带清单,首启下载同一个 zip。

    为什么不走 proot? 它多了一层用户态翻译,还要解压 rootfs,直接吃掉启动速度。我们用 seccomp 做同样的事,省掉 ptrace 那一层:只比需要 root 的真 chroot 慢约 1 ms,比 proot 快 8~14 倍。

    Alpine 和 Ubuntu 选哪个? 默认 Alpine(小、离线、快);需要 glibc-only 的预编译程序或 apt 生态,就选 Ubuntu。

    能力「存在」但 Agent 不知道? 五个条件必须全部满足:① 实现已注册进桥;② 已登记进能力目录;③ 能力开关已由用户授权;④ 环境说明书已升级;⑤ 引擎已重启。自检:

    dev
    dev api GET /dev/help
    dev api GET /dev/routes
    

    怎么从电脑访问手机 WebUI? 在设置里开启局域网 WebUI,启动代理,配合 6 位一次性验证码访问。这暴露的是能操作文件、执行命令的 Agent,只在可信网络用,用完就关。

    和手工搭 Linux 环境能一起用吗? 能。跑的是同一个引擎,差别只在运行层。


    ⚠️ 免责声明

    独立社区项目,与 DeepSeek 官方无隶属关系。

    只在你拥有或明确获授权的设备上使用。普通 / Shizuku / Root 三档模式的系统边界完全不同;Root 模式下 Agent 生成的命令可能修改或删除系统文件、应用数据、网络规则、设备配置。

    使用者自行承担以下风险及后果:数据丢失、应用或系统损坏、设备无法启动、账号或服务条款风险,以及 Root / Shizuku / 无障碍 / 自动化带来的后果。

    模型服务商的 API 使用、数据处理、计费规则由你配置的服务端点决定。


    反馈

    提 issue 请附:设备型号、Android 版本、CPU ABI、版本号、当前运行模式、相关权限状态、logcat、最小复现步骤、失败时的原始输出。


    🙏 贡献者

    感谢所有提 Issue、提供复现日志、参与真机测试、提交 PR 的贡献者。完整名单见 Contributors。

    也要感谢上游与生态:DeepSeek Harness、AOSP、bionic 工具链、Node.js、ripgrep、OpenSSH、SQLite、FFmpeg、llama.cpp。


    许可证

    除特别声明外,仓库内容(Kotlin、Java、XML、脚本、探针)均使用 MIT License。

    app/src/main/cpp/dsh_alpine.c 及其运行时实现使用专有许可证,条款见 dsh-linux-runtime LICENSE。专有许可不等同于仓库根的 MIT。 第三方组件原始许可证见 NOTICE。

    修改 dsh_alpine 时必须遵守其专有许可证,且不得引入 GPL / AGPL 或与本项目许可冲突的代码。