🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

安卓沙箱版 itiswdwa/dsh-android

DeepSeek Harness
itiswdwa5 天前有提交已提供中文文档扫描:含敏感能力

基于Webview的DeepSeek Harness安卓发行版。采用Ubuntu Proot以增加兼容性。

46.6/100
综合分
30
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装;安装清单取自 profile/package.json。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add itiswdwa/dsh-android
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · tool
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/21) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装;安装清单取自 profile/package.json

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-profile-web(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 08:39:51

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 30 处,展示前 25 条)
  • 删除本地文件递归
    docs/repair-profile-test.mjs:34
    rmSync(SEED, { recursive: true, force: true });
  • 写入本地文件
    docs/repair-profile-test.mjs:35
    mkdirSync(join(SEED, "profiles", "web"), { recursive: true });
  • 执行外部命令来自配置/变量
    docs/repair-profile-test.mjs:41
    return execFileSync(process.execPath, [SCRIPT, SEED, home], { encoding: "utf8" });
  • 读取本地文件
    docs/repair-profile-test.mjs:45
    return JSON.parse(readFileSync(path, "utf8"));
  • 删除本地文件递归
    docs/repair-profile-test.mjs:51
    rmSync(home, { recursive: true, force: true });
  • 写入本地文件
    docs/repair-profile-test.mjs:53
    mkdirSync(join(dir, "node_modules"), { recursive: true });
  • 写入本地文件
    docs/repair-profile-test.mjs:55
    mkdirSync(join(dir, "node_modules", pkg), { recursive: true });
  • 写入本地文件
    docs/repair-profile-test.mjs:56
    writeFileSync(join(dir, "node_modules", pkg, "package.json"), JSON.stringify({ name: pkg, version: "1.0.0" }));
  • 写入本地文件
    docs/repair-profile-test.mjs:58
    writeFileSync(join(dir, "package.json"), JSON.stringify({
  • 写入本地文件
    docs/repair-profile-test.mjs:61
    writeFileSync(join(dir, "cordis.patch.yml"), "# user patch layer\n- id: ui-theme\n config:\n preference: light\n");
  • 读取本地文件
    docs/repair-profile-test.mjs:107
    check(existsSync(join(dir, "node_modules", LOCAL_MARKET, "package.json")), "and its files are not deleted");
  • 读取本地文件
    docs/repair-profile-test.mjs:108
    const before = readFileSync(join(dir, "package.json"), "utf8");
  • 读取本地文件
    docs/repair-profile-test.mjs:110
    check(readFileSync(join(dir, "package.json"), "utf8") === before, "…byte-identical");
  • 删除本地文件递归
    docs/repair-profile-test.mjs:147
    rmSync(home, { recursive: true, force: true });
  • 读取本地文件
    docs/repair-profile-test.mjs:152
    const before = readFileSync(join(dir, "package.json"), "utf8");
  • 读取本地文件
    docs/repair-profile-test.mjs:162
    check(readFileSync(join(dir, "package.json"), "utf8") === before, "…and the file is byte-identical");
  • 删除本地文件递归
    docs/repair-profile-test.mjs:174
    rmSync(SEED, { recursive: true, force: true });
  • 发起网络请求
    plugin/dsh-plugin-android/lib/client.js:631
    const response = await fetch(api.base + path, {
  • 写入剪贴板
    plugin/dsh-plugin-android/lib/client.js:2026
    navigator.clipboard.writeText(value);
  • 写入剪贴板
    plugin/dsh-plugin-android/lib/client.js:2054
    navigator.clipboard.writeText(value);
  • 读取剪贴板
    plugin/dsh-plugin-android/lib/client.js:4419
    clipboard.readText().then((text) => input.pasteText(text), () => onMessage(t("termPasteHint")));
  • 写入剪贴板
    plugin/dsh-plugin-android/lib/client.js:4434
    clipboard.writeText(text).then(() => onMessage(t("termCopied")), () => onMessage(t("termCopyHint")));
  • 发起网络请求
    plugin/dsh-plugin-android/lib/client.js:5246
    fetch(`${endpoint.url}/sessions/${ptyId}`, {
  • 写入本地文件
    plugin/dsh-plugin-android/lib/index.js:207
    mkdirSync(dirname(cfg.diagFile), { recursive: true });
  • 写入本地文件
    plugin/dsh-plugin-android/lib/index.js:208
    appendFileSync(cfg.diagFile, `${JSON.stringify({ at: Date.now(), ...entry })}\n`);
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

3 张 · 点击查看大图

功能亮点

  • 安卓端运行Harness

README

由 DeepSeek 最新模型翻译生成
dsh-android 把 DeepSeek Harness 装进安卓手机。 一个 APK 搞定:不需要 Termux、不需要 root、不依赖任何其他应用。 应用自带一套 Ubuntu 运行时,在手机本地把 harness 跑起来,界面就是 harness 自己的 Web UI。 这是什么 DeepSeek Harness 官方以 npx @deepseek-ai/dsh web 的形式在电脑上跑。这个项目的做法是:把整套运行时(Ubuntu rootfs + Node + harness 及其依赖)打进一个 APK,用 PRoot 在手机里启动它,再用 WebView 打开它的界面 —— 于是手机上得到的就是原样的 harness,不是重做的客户端。 能干什么 - 完整的 Harness:会话、工具调用、子代理、Agent Teams、workflow、计划模式、技能,和桌面端同一套代码。 - 原生观感的设置页:设置 → 安卓沙箱 直接复用 harness 的组件库与主题令牌(按钮、开关、状态点、描边卡片都是原生的那几个),和「通用设置」同一个模子,深浅色自动跟随。 - 沙箱终端:左侧栏 >_ 图标,沙箱里的真 PTY。带命令输入栏(中文输入法在终端里会乱灌候选,所以输入走独立输入框)、历史命令、粘贴。
展开完整文档(README 剩余 1 节)
dsh-android

把 DeepSeek Harness 装进安卓手机。

一个 APK 搞定:不需要 Termux、不需要 root、不依赖任何其他应用。 应用自带一套 Ubuntu 运行时,在手机本地把 harness 跑起来,界面就是 harness 自己的 Web UI。

这是什么

DeepSeek Harness 官方以 npx @deepseek-ai/dsh web 的形式在电脑上跑。这个项目的做法是:把整套运行时(Ubuntu rootfs + Node + harness 及其依赖)打进一个 APK,用 PRoot 在手机里启动它,再用 WebView 打开它的界面 —— 于是手机上得到的就是原样的 harness,不是重做的客户端。

能干什么

- 完整的 Harness:会话、工具调用、子代理、Agent Teams、workflow、计划模式、技能,和桌面端同一套代码。
- 原生观感的设置页:设置 → 安卓沙箱 直接复用 harness 的组件库与主题令牌(按钮、开关、状态点、描边卡片都是原生的那几个),和「通用设置」同一个模子,深浅色自动跟随。
- 沙箱终端:左侧栏 >_ 图标,沙箱里的真 PTY。带命令输入栏(中文输入法在终端里会乱灌候选,所以输入走独立输入框)、历史命令、粘贴。
- 挂载手机文件夹:把任意目录挂进沙箱,agent 和终端直接读写。选目录时用系统文件夹选择器。
- 导出文件到手机:沙箱里的文件一键复制到手机 Download,文件预览页和设置页都有入口。
- 操作手机本身(可选,需要 Shizuku):内置 shiz 命令,以 Android shell 身份执行 —— 打开应用、看屏幕截图、调亮度、开关勿扰、读通知、装 APK……随附的 phone-control 技能会教 agent 怎么用。
- 恢复模式:harness 起不来时也能进沙箱 —— 连续几次启动失败后应用会自己切换到恢复模式,不加载 harness,直接起来一个 SSH 服务和一个 shell(密码是每次进入时新生成的令牌)。详见 docs/RECOVERY.md。
- 跟随系统主题:浅色/深色、连图标都会反色;Android 13+ 还支持主题化图标。

安装

要求:Android 8.0 以上、arm64 手机(绝大多数现代手机)。

1. 下载 dsh-android.apk(见 Releases;如果还没有发布包,可以按 构建文档 自己打一个),拷到手机。
2. 在文件管理器里点它安装,按提示允许「未知来源」。
3. 打开应用。首次启动需要解包约 400 MB 的运行时,大约 2 分钟(只有这一次);屏幕上会显示进度,之后每次冷启动约 5 秒。

第一次用

1. 配置模型:设置 → 模型 → 填 DeepSeek API Key(也可以用其他 OpenAI 兼容的端点)。想省事的话,在 设置 → 安卓沙箱 → API Key 里填也行,它会作为环境变量注入沙箱。
2. 选工作区:点「选择工作区」,选一个目录,然后就能开始对话了。
3. (可选)授权 Shizuku:设置 → 安卓沙箱 → Shizuku → 请求授权。授权后 agent 才能操作手机本身(截图、开关应用、改设置……)。
4. (可选)挂载文件夹 / 共享手机存储:设置 → 安卓沙箱 → 挂载。首次会申请存储权限,授权后沙箱里的 /sdcard 就是你手机上的共享存储。

更新

分两条通道,因为代价差很多:

| | 包含 | 体积 | 怎么做 |
| 热更新 | 插件、技能、系统提示词、沙箱脚本 | 几十 KB | 设置 → 安卓沙箱 → 检查更新 → 一键应用 |
| 重要更新 | 外壳:界面、图标、新接口 | ~143 MB | 同上,点「前往下载」装新 APK |

应用启动后会自己检查一次,设置页里也能随时手动检查。

不想联网也没关系:拿到 dsh-hot.zip 之后放进手机的 Download 目录、重开应用,同样会导入。

装新 APK 是覆盖安装,你的会话、API Key、挂载和设置都会保留。

常见问题

首次启动卡在「正在安装内置沙箱」很久? 正常,它在解包约 400 MB 的运行时。2 分钟左右,只做一次。请确保手机有足够空间(约 1 GB 余量)。

为什么抓网页失败,报 WEB_BLOCKED_URL / non-public IP? 手机开了 fake-IP 模式的代理(Clash 之类)时,所有域名都解析到 198.18.0.0/15,harness 的 SSRF 防护会按设计拒绝。让 agent 用 bash + node fetch 绕过即可 —— 附带的技能里已经写明。

沙箱里看不到我的文件? 去 设置 → 安卓沙箱 → 挂载,把要用的目录加进来;或者在系统设置里授予存储权限后用 /sdcard。注意:guest 里是 Linux 路径,手机上的 Download 在沙箱里是 /sdcard/Download。

服务起不来 / 白屏怎么办? 右上角会出现 ≡ 按钮(服务没起来时它才出现),点开是控制台:能看日志、启停服务、导入 rootfs。如果连重启几次都起不来,用控制台里的恢复模式:它不加载 harness,只起来一个 SSH 和一个 shell,让你进沙箱把 profile、依赖或磁盘修回来 —— 面板上会给出连接命令和本次会话的令牌。同一 Wi-Fi 用 ssh -p 8022 root@<手机 IP>,插着线用 adb forward tcp:8022 tcp:8022,只有手机就点「手机内控制台」。详见 docs/RECOVERY.md。

耗电吗? 服务在前台服务里跑,带一个 CPU 保持唤醒的锁,好让长时间任务不被系统冻结。
不想要的话,设置 → 安卓沙箱 → 关掉「后台保活」。不用的时候点「停止」即可。

支持哪些设备? arm64(arm64-v8a)的 Android 8.0+ 设备。x86 设备、32 位设备不支持。

已知限制

- APK 有 143 MB —— 因为它自带一整套 Linux 运行时,这是刻意的取舍(见 docs/ARCHITECTURE.md)。
- 没有 root。需要 root 的操作做不到。
- 非官方项目,与 DeepSeek 没有隶属关系。

反馈

有问题或建议请开 Issue。附上 设置 → 安卓沙箱 → 日志 里的内容会很有帮助。

许可与致谢

MIT。这是 DeepSeek Harness(MIT)的非官方安卓移植,其中的品牌标识、Ubuntu、Node 及各 npm 依赖的版权归各自所有者,详见 THIRD_PARTY.md。

想自己构建、看架构设计或踩坑记录?docs/BUILD.md · docs/ARCHITECTURE.md · docs/FINDINGS.md · docs/RECOVERY.md · docs/CI.md · docs/UPGRADE-DSH.md
· 每个版本改了什么见 CHANGELOG.md
预览分享卡片长什么样 ↓itiswdwa/dsh-android
分享 · DeepSeek Harness Hub
itiswdwa/dsh-android

基于Webview的DeepSeek Harness安卓发行版。采用Ubuntu Proot以增加兼容性。

这是你的仓库?认领条目

回到顶部