前言¶
DeepSeek Harness(DSH)生态里,很多插件在桌面 Linux 或 Windows 上开发、调试通过后就会上架或分享给他人。DeepSeek Harness for Android(DSHA)的运行环境却是手机里的 Linux arm64 + glibc proot 容器,不是开发机上的路径、Shell 或 CPU 架构。常见结果是:依赖里带了要编译的原生模块、源码写死 C:\Users\... 或只下载 x64 二进制,在电脑上一切正常,装到 DSHA 后直接起不来。
在真正安装之前做一轮只读源码的静态体检,可以把这类问题提前标出来。下面介绍社区插件 dsh-android-portability(维护者 Liaoyun666):用 17 条规则扫描插件目录,给出 文件:行、原文片段和改法建议,不执行代码、不 npm install、不联网。
这是什么¶
dsh-android-portability 是 DSH 体系下的静态可移植性检查工具,面向「插件能否在 DSHA(Linux arm64 + glibc,proot 容器)上跑起来」这一问题。它只读 package.json 与源码文本,对照规则表输出阻断、警告或提示,并支持在 DSH 会话里通过工具调用,或在 CI 里单独用 Node 跑 CLI。
插件在 SkillHub 目录中的分类为 admin-security;仓库 package.json 里 DSH Hub 展示分类为「开发工具」「质量检查」,提供表面为 tool。许可证 MIT,运行时要求 Node >= 20,当前资料中版本为 1.0.0。DeepSeek Harness 社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
它查哪三类常见问题¶
README 归纳了搬到手机上最常见的三类「死法」,也是规则设计的背景:
- 原生模块依赖:如
sharp、better-sqlite3、node-pty等,arm64 预编译包常缺失,容器内又往往没有完整编译工具链。 - Windows 专用路径与环境:写死
C:\...、%APPDATA%、powershell.exe等,在安卓 proot 容器里不存在。 - 架构写错:下载或分支逻辑只认
x64,在 arm64 上装错二进制导致崩溃。
静态扫描不能覆盖运行时 API 行为差异;边界在 README「它不做什么」一节已说明。
核心功能¶
DSH 工具¶
安装后可在任意会话里让模型协助检查,或显式调用:
dsh_check_android_portability:检查单个插件目录。dsh_scan_profile_android:批量扫描/root/.dsh/profiles/*/node_modules下已安装的插件。
工具声明为只读插件目录下的 package.json 与源码文本,不执行插件代码,network 能力为空。
17 条规则(概要)¶
规则分 D 组(依赖与清单) 与 S 组(源码)。注释行不参与匹配,避免把「不要用 C:\ 路径」这类说明误报。
D 组
| 号 | 查什么 | 级别 |
|---|---|---|
| D1 | dependencies 中的原生模块(sharp、better-sqlite3、node-pty 等) |
阻断 |
| D2 | optionalDependencies 仅有 win32/darwin 二进制,缺 linux-arm64 |
阻断 |
| D3 | 安装脚本使用 node-gyp / node-pre-gyp / prebuild-install / cmake-js | 阻断 |
| D4 | 包内带 binding.gyp 或 .node(.wasm 仅提示) |
阻断 |
| D5 | os / cpu 排除 linux 或 arm64 |
阻断 |
| D6 | files 白名单漏掉入口文件 |
阻断 |
| D7 | engines.node 高于容器 Node 版本 |
阻断 |
| D8 | 开发依赖中含原生模块 | 提示 |
S 组
| 号 | 查什么 | 级别 |
|---|---|---|
| S1 | Windows 绝对路径(C:\、E:\ 等) |
阻断 |
| S2 | Windows 环境变量(如 %APPDATA%) |
阻断 |
| S3 | 调用 cmd.exe / powershell |
阻断 |
| S4 | 引用 .bat / .ps1 / .exe |
警告 |
| S5 | 仅 win32/darwin 分支,其它平台走 else | 警告 |
| S6 | 下载逻辑中出现 x64 |
警告 |
| S7 | 写死 /bin/bash(容器内多为 sh) |
警告 |
| S8 | 直接 require('./x.node') |
阻断 |
| S9 | child_process 调用外部程序(PATH 很短) |
提示 |
完整说明可在 CLI 中列出:
node tools/cli.js --list-rules
误报与忽略¶
规则定义、测试样本里会故意包含坏例子。可用 .portabilityignore(精确路径、目录前缀、通配符)或在 package.json 中配置,两处叠加生效:
{
"dsh": {
"androidPortability": {
"ignore": ["generated/"]
}
}
}
安装与启用¶
官方安装命令如下(来自仓库 README,注意命令前缀为 dsha-plugin):
dsha-plugin install Liaoyun666/dsh-android-portability
装完后即可在会话中使用上述两个工具。插件随当前 DSH 进程权限运行;安装前应自行审阅仓库源码与 MIT 许可证,确认符合你的安全策略。本工具本身不联网、不执行被检插件,适合对陌生仓库做只读扫描,但仍建议在可信来源安装本检查插件。
兼容性(来自 package.json):dsh >= 0.1.5-rc.1,node >= 20。
典型用法¶
在 DSH 里¶
安装完成后,可直接在对话中说明「帮我查一下某个插件目录能不能装到手机上」,或调用 dsh_check_android_portability / dsh_scan_profile_android。
命令行与 CI¶
可脱离 DSH 单独运行,便于发布前或 GitHub Actions 集成:
node tools/cli.js ./my-plugin # 人类可读报告
node tools/cli.js ./my-plugin --json # JSON 输出
node tools/cli.js ./my-plugin --github # GitHub Actions 注解(标到对应行)
node tools/cli.js . --verbose # 每组列出全部命中(默认每组 3 处)
node tools/cli.js . --strict # 警告也视为失败
退出码:0 表示可装,1 表示有问题,2 表示用法错误。
对本插件目录自检(开发文档中的惯例):
node tools/cli.js .
适用场景与注意¶
适合谁:编写或维护 DSH 插件、计划在 DSHA 上分发的开发者;需要在 CI 里门禁「安卓可移植性」的仓库维护者。
它不做的:不自动改代码;不替代真机或容器内联调;扫不到纯运行时才会暴露的问题。
权限与安全:作为 DSH 插件安装时,遵循 DSH「一切皆插件」的模型——以当前 harness 进程权限读取你指定的插件路径。对第三方插件做体检前,建议先确认目标目录来源与许可证;本工具设计为静态读文本,但不改变「只安装你信任的工具」这一基本原则。
结尾¶
经过上面的步骤,你可以在发布或安装前用 dsh-android-portability 对 DSHA 环境(Linux arm64 + glibc proot)做一次静态对齐:17 条规则、可忽略的误报路径、CLI 与 DSH 双入口。目录页与源码分别以 SkillHub 与 GitHub 为准:
- 目录页:https://www.skillhub.cn/plugins/Liaoyun666/dsh-android-portability
- GitHub:https://github.com/Liaoyun666/dsh-android-portability