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

安卓移植补丁 Yessssman/dsh-android-compat

DeepSeek Harness
Yessssman16 天前有提交已提供中文文档扫描:无法判定

在 Android 与 Termux 上运行并升级 DSH,自动验收移植结果

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Yessssman/dsh-android-compat
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/10/20·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 16 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/10/20) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
⚪ 扫描:无法判定尚无人工评估
展开查看扫描说明与证据 ↓

已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。

  • · 取源不可用(Error: github tarball HTTP 404 @ https:
  • · api.github.com
  • · repos
  • · Yessssman
  • · dsh-android-compat
  • · tarball)
扫描于 2026/11/3(1 天前)

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
DSH on Android/Termux —— 安卓兼容方案 把 DeepSeek Harness(DSH)移植到 aarch64 Android / Termux 上运行的完整方案:固化的升级流程、精确锚点补丁脚本、原生件构建、原生语音输入,以及一套自动验收脚本。 兼容层只有 patches/。 DSH 的 checkout 直接跟上游(origin = deepseek-ai/deepseek-harness),不维护 fork:升级就是「fetch 上游 → 用补丁把改动静默重放到新 tag 上」。移植分支只是补丁的产物,随时可由 recreate-android-branch.mjs 从任意 tag 重建。 (2026-10-18 起取消 fork,理由见 UPGRADE-RUNBOOK.md Phase J。
展开完整文档(README 剩余 1 节)
DSH on Android/Termux —— 安卓兼容方案

把 DeepSeek Harness(DSH)移植到 aarch64 Android / Termux 上运行的完整方案:固化的升级流程、精确锚点补丁脚本、原生件构建、原生语音输入,以及一套自动验收脚本。

兼容层只有 patches/。 DSH 的 checkout 直接跟上游(origin = deepseek-ai/deepseek-harness),不维护 fork:升级就是「fetch 上游 → 用补丁把改动静默重放到新 tag 上」。移植分支只是补丁的产物,随时可由 recreate-android-branch.mjs 从任意 tag 重建。
(2026-10-18 起取消 fork,理由见 UPGRADE-RUNBOOK.md Phase J。)

入口

| 文档 | 内容 |
| UPGRADE-RUNBOOK.md | 固化升级方案(主入口):A 检查上游 → B 冲突预判 → C rebase 与冲突处置 → D 同步移植 → E 安装 → F 构建 → G 验收 → H 提交 → I 用户重启;含已知故障模式表与回滚 |
| REPORT.md | 移植原理与历史(§9 之后为源码树移植的有效部分) |
| REPORT-upgrade-.md | 历次升级的完整记录(从 0.1.7-alpha.1 到 0.2.1-rc.2) |
| sherpa-android/ | 本地 SenseVoice 语音识别的 Node-API 绑定(源码、编译脚本、真机证据) |
| voice-conversation/ | 朗读插件(本地 VITS)的适配与启停脚本 |
| attachment-check/ | 附件存储的安卓修复与复验 |

工具链(patches/)

| 脚本 | 作用 |
| recreate-android-branch.mjs | 从任意上游 tag 重建移植分支:切基线、应用锚点、校验、提交;补丁无法生成锁文件,安装后 amend |
| apply-source-patches.mjs | 46 条精确锚点补丁,幂等;--check 只校验不写 |
| sync-android-port.mjs | 一条命令跑完重建 / pnpm install 之后必须做的机械步骤(清孤儿产物 → 锚点 → Codex payload → node-pty 绑定),失败即停 |
| verify-android-port.mjs | 12 项隔离验收:版本、锚点、客户端产物、原生件、三种启动方式、语音绑定、可证只读、进程清理 |
| prune-stale-builds.mjs | 清理上游改名后遗留的孤儿 lib/(会毒化 tsdown 的构建) |
| install-codex-payload.mjs | 安装 pnpm 因 os: ["linux"] 跳过的 Codex arm64 payload |
| install-node-pty-binding.mjs | 在设备上 node-gyp rebuild 出 node-pty 的 android 绑定(持久化终端需要) |

快速开始

git clone https://github.com/Yessssman/dsh-android-compat ~/android-dsh
git clone https://github.com/deepseek-ai/deepseek-harness ~/deepseek-harness

用补丁把移植重放到当前上游 tag 上(建本地分支 + 应用锚点 + 提交)
node ~/android-dsh/patches/recreate-android-branch.mjs --root ~/deepseek-harness --from dsh-v0.2.1-rc.2

完整流程(装依赖、构建、验收)见下面的「在 Termux 上从零跑起来」

本方案假定端口工具链放在 ~/android-dsh、DSH checkout 在 ~/deepseek-harness (文档里的路径都按这个约定书写)。

上游更新后怎么跟

不维护 fork,也不依赖移植分支的历史——兼容层就是补丁:

cd ~/deepseek-harness
git fetch origin --tags # origin 直接指上游
node ~/android-dsh/patches/recreate-android-branch.mjs --root . --from <新 tag>

锚点若与上游正文漂移,脚本会在对应文件上失败(而不是悄悄跳过),按 UPGRADE-RUNBOOK.md Phase C 改锚点字面量后重建即可。
完整判据与备选方案(保留历史的 rebase)也在那里。

--from 接受任何 ref,所以也能直接落在未发版的 master 上:

node ~/android-dsh/patches/recreate-android-branch.mjs --root . --from origin/master --dry-run
node ~/android-dsh/patches/recreate-android-branch.mjs --root . --from origin/master

脚本会检测目标有没有 dsh-v tag 指向它:非发版目标会打印 base NOT a release commit: includes unreleased upstream work,并把解析到的短 SHA 写进提交信息 (origin/master 是会动的 ref,事后得能查到基于哪个提交)。代价是可复现性不如 tag、锚点更容易漂移,所以打 master 之后安装与构建仍然照做。

在 Termux 上从零跑起来

以下步骤在一台全新的 Termux(aarch64)上从零到能打开 Web UI。实测设备:Android 16、 kernel 5.15、Node v26.4.0、pnpm 11.28.5。

0. 前置

- 磁盘 ~3 GB:.git 约 315 MB,node_modules 约 1.7 GB,Web 产物约 22 MB,再加构建临时目录。
- 内存:全量构建的观察峰值约 10 GB。设备内存小的话务必串行构建并留足 swap,否则容易被 OOM 杀掉。

1. 装 Termux 包

pkg update -y
pkg install -y git nodejs clang make python ripgrep
npm install -g pnpm@11.28.5 # 与根 package.json 的 packageManager 一致,避免再下载一份

各包的作用:

| 包 | 为什么需要 |
| nodejs | 运行时(engines 要求 ^22.19.0 \|\| >=24),并带 Node-API 头文件 $PREFIX/include/node/node_api.h |
| clang | native/system 的原生件用 cc 编译;node-pty 与 sherpa 绑定也用它 |
| make + python | node-gyp rebuild(node-pty 的 android 绑定必须在本机编) |
| ripgrep | 搜索的兜底:@vscode/ripgrep 没有 android 包,移植版会退到 PATH 上的 rg |
| git / curl | 克隆与下载 |

2. 克隆两个仓库并应用补丁

cd ~
git clone https://github.com/deepseek-ai/deepseek-harness deepseek-harness # 直接跟上游
git clone https://github.com/Yessssman/dsh-android-compat android-dsh

用补丁把移植重放到选定的上游 tag 上:建分支、应用 46 条锚点、校验、提交
node ~/android-dsh/patches/recreate-android-branch.mjs --root ~/deepseek-harness --from dsh-v0.2.1-rc.2

补丁是移植的唯一真源,分支只是产物。脚本会要求工作树干净、锚点全部应用成功(46 applied, 0 failed)才提交;跑完会打印锁文件由安装生成、以及下一步命令。

3. 装依赖

cd ~/deepseek-harness
pnpm install --ignore-scripts

--ignore-scripts 不能省:不跳过的话 lefthook 的 postinstall 会因为找不到 lefthook-android-arm64 而失败,而构建并不需要它。

4. 补齐设备内必须先做的两件事

node ~/android-dsh/patches/sync-android-port.mjs --root ~/deepseek-harness

这一条命令依次做四步,任一步失败就停:

1. 清理上游改名遗留的孤儿 lib/(会毒化 tsdown 构建)
2. 校验 46 条锚点(already-present: 46, failed: 0)
3. 装 Codex 的 arm64 payload(pnpm 因 os: ["linux"] 永远跳过它)
4. 编译并安装 node-pty 的 android 绑定(持久化终端需要)

5. 构建

cd ~/deepseek-harness
NODE_OPTIONS=--max-old-space-size=3072 pnpm build
NODE_OPTIONS=--max-old-space-size=3072 pnpm build:native-system

成果:客户端产物约 331 件;native/system/packages/android-arm64/bin/bionic/system.node 约 11,504 B。
首次全量构建大约 6–10 分钟(这台设备上 9 个构建门禁并行,实测 275–557 秒不等)。

6. 本地语音输入绑定(可选,但影响下一步验收)

bash ~/android-dsh/sherpa-android/setup.sh

下载并校验 sherpa-onnx 的 Termux aarch64 产物、编译 Node-API 绑定、安装到 ~/.dsh/speech-to-text/sensevoice/native/,再冒烟测试。约 27 MB + 模型文件。

这一步决定验收是全过还是少两项:内置语音识别(SenseVoice)依赖这个绑定和模型。
不做语音也用,但跳过它时下面的 sherpa native 与 voice preparation 两项会失败——那是预期的,不是构建坏了。

朗读(TTS)插件是另一件事,见 voice-conversation/;默认不启用,需要时用它的 voice-mode-toggle.sh enable/disable/status。

7. 验收(强烈建议)

node ~/android-dsh/patches/verify-android-port.mjs --root ~/deepseek-harness

做完了第 6 步时期望最后一行 PASS verify-android-port (12/12; failed=0)、退出码 0;没做第 6 步则是 10/12,并且失败的正好是那两项语音检查。

它会用隔离的 DSH_HOME 起三次服务(构建产物、源码、真实 profile 副本)、加载原生绑定、校验语音准备链路,并证明整个过程中 checkout 只读、自己起的进程都清干净。

8. 跑起来

cd ~/deepseek-harness
pnpm dsh web

终端会打印一行带 token 的地址,形如 http://127.0.0.1:3080/?token=…,在手机浏览器打开即可。
直接访问 / 会 401,必须带这个 token(首次打开后会用 cookie 记住)。
首次使用要到设置里配置模型凭据:先在界面里登录 DeepSeek 账号,或在 Models 页填入 API key。
数据落在 ~/.dsh。

⚠️ pnpm dsh web 跑在前台,重启服务要你自己在同一个 shell 里 Ctrl+C 再起;任何脚本/自动化都不应该去杀它。

9. 升级到新上游版本

见 UPGRADE-RUNBOOK.md(A→I),完成后按 Phase J 推回 GitHub。

当前状态

- 上游基线 dsh-v0.2.1-rc.2(687f282e86),版本 0.2.1-rc.2
- 移植 10 个提交、相对基线 31 个文件;其中 30 个源文件可由 46 条锚点逐字节复现,剩下 pnpm-lock.yaml 由 pnpm install 生成
- 锚点 46/46;客户端产物 331 件;原生件 android-arm64/bin/bionic/system.node 11,504 B
- 验收 12/12

设备与环境

| 项 | 值 |
| 设备 | Android 16,kernel 5.15,aarch64 (arm64-v8a) |
| 运行时 | Termux,Node v26.4.0 |
| 交互方式 | pnpm dsh web(源码启动),浏览器访问 |

移植了什么(要点)

- 原生件:上游没有 android 目标,新增 native/system/packages/android-arm64,按 bionic libc 构建 system.node(flock 等)。
- 启动:app-boot 的原生 requireBuiltin 在缺少 android 二进制时回退到 Node 的 --expose-internals;dsh 脚本与 bin.ts shebang 都带上该 flag。这是 pnpm dsh web 能起来的关键。
- 文件发布:Android 沙箱拒绝 link(2),会话日志与附件改用 rename / COPYFILE_EXCL 发布,保留 no-replace 语义。
- shell / 搜索:默认 shell 与 PATH 走 Termux 前缀;ripgrep 先看 DSH_RIPGREP_PATH,再退到 PATH 上的 rg。
- 语音输入:sherpa-onnx 没有 android 包,自带 Node-API 绑定;worker 需显式带 LD_LIBRARY_PATH 指向绑定目录(Termux 的 onnxruntime 包会用同名 .so 遮蔽兄弟库)。
- 持久化终端:process-inspector 让 android 复用 Linux /proc 实现(systemd scope 仍仅限 Linux);node-pty 需在设备上编译。
- 图片:sharp 无 android binding,走 @img/sharp-wasm32 兜底。

已知限制

- 本地沙箱不可用:该内核 landlock 返回 ENOSYS、bwrap 缺失,命令执行需 Full Access 或人工审批;这是上游 fail-closed 的正确表现。
- Codex 子智能体:只能跑 dangerously-bypass-approvals-and-sandbox 模式(安卓拦掉 bwrap/landlock),即无沙箱全权限,只应交给可信任务。
- 每次 pnpm install 后都要重跑 sync-android-port.mjs(会冲掉 Codex payload 与 node-pty 绑定)。
- 只在一台 aarch64 设备上验证;其他设备/架构未测。

许可

本仓库的文档与脚本按移植工作需要编写,随上游 DSH 一并遵循其许可; patches/*.patch 与 sherpa-android/ 中的第三方代码遵循各自来源的许可。
预览分享卡片长什么样 ↓Yessssman/dsh-android-compat
分享 · DeepSeek Harness Hub
Yessssman/dsh-android-compat

在 Android 与 Termux 上运行并升级 DSH,自动验收移植结果

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部