Repository navigation
在 Android/Termux 原生跑通 DSH:补齐 node-addon-require-builtin 的 android 编译与 bionic 补丁(附可复现步骤) #9093
lzx2322374600-coder
started this conversation in
Ideas
Replies: 1 comment
你把一个平台缺口变成了可复现的移植手册——建议把诉求写在"缺口本身"上1. 这一类的形态在本仓是有先例的本仓的原生件是按平台分发的预编译产物(例如
2. 你的贡献价值在于"在设备上现场编译跑通了"这是移植手册式的产出,比"报个 bug"有用的多。建议把诉求写成两条:
第 2 条比"请支持 Android"更容易被接受——因为它不要求维护者承诺新平台,只要求把已有的缺口写清楚。 3. 请补三样(让第 2 条能落地)
4. 版本提醒(本轮基线)
一条边界我确认的是**"按平台分发预编译产物"这一形态在本仓成立、且平台矩阵出过问题**(这支撑了你的归因)。该包是否真缺 android-arm64 产物以你的实测与第 1 节的路径为准——我没有核到该包的清单。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
TL;DR
在 Android / Termux 上原生跑通 DSH 的最后一块硬骨头:
@deepseek-ai/dsh启动时硬依赖的原生插件node-addon-require-builtin没有 android-arm64 预编译产物,会让dsh web直接致命退出。本文给出在手机上现场编译该插件的完整方法(两处极小的源码补丁 + 一条构建命令),已在真机实测跑通。
环境(实测)
process.versions.modules= 147)@deepseek-ai/dsh0.2.0-rc.2(npm i -g,包装器带--expose-internals)node-addon-require-builtin@0.1.x(@deepseek-ai/dsh-app-boot启动时 require)现象
加载器
node-addon-native-custom-loader的查找顺序是:node-addon-require-builtin-android-arm64→ 官方未发布(只发布了 darwin-x64/arm64、linux-x64/arm64-gnu、linux--musl、win32-);node-addon-require-builtin/build/<backend>/<abi>-android-arm64/require_builtin.node。根因(两处,都不大)
scripts/build.ts的平台白名单只覆盖 darwin / linux / win32,android 直接抛Error: unsupported platform for direct build: android;packages/native/src/{runtime_context,runtime_probe}/platform.cc把__linux__ && __GLIBC__之外的一切 Linux 都判为"不支持",于是 bionic(Android) 命中
Unsupported/no-context: unsupported linux libc current-context reader。—— 但被门禁挡住的实现(
ReadDirectCurrentV8Context/DecodeGetterWithWideWindowRetry)本身是平台无关的,只是分支按 glibc 写死了。
解法
1) 两处源码补丁
packages/native/src/runtime_context/platform.cc:packages/native/src/runtime_probe/platform.cc:scripts/build.ts:把 android 当成 linux 的链接参数if (process.platform === 'linux') { return ['-shared', '-fPIC', '-pthread', ...args]; } - throw new Error(`unsupported platform for direct build: ${process.platform}`); + // Android/bionic: same link flags as linux + return ['-shared', '-fPIC', '-pthread', ...args];2) 构建与安装(就在手机上编译)
3) 验证
之后
dsh web正常启动,浏览器访问http://127.0.0.1:3080即可(首次要用它打印的带?token=的地址访问)。给上游的两点建议
deepseek-ai/dsh-node-addon-require-builtinscripts/build.ts支持 android;platform.cc的__linux__ && __aarch64__(bionic)走 arm64 reader;node-addon-require-builtin-android-arm64(napi-v9)optional 包 —— 这样 Termux 用户npm i -g后即可直接用。@deepseek-ai/dsh-app-boot:在缺少该插件时能否优雅降级(例如检测到已用--expose-internals启动时回退到内置通道),而不是致命退出?Android/Termux 属于社区长期存在的使用场景,一个可选依赖不该让整个 harness 无法启动。附:一键修复脚本
fix-require-builtin-android.sh(可直接并入 Termux 安装脚本,幂等)*本文形成于 2026-10-08,实测链路:Termux → Node v26.4.0 →
@deepseek-ai/dsh0.2.0-rc.2 →dsh web在127.0.0.1:3080正常提供服务(同一台手机上还跑了 dsh-preset-mobile-use + agent-mobile-use 的副屏自动化,一并验证通过)。All reactions