Some checks failed
Android CI Build / check (push) Has been cancelled
Android CI Build / package-apks (push) Has been cancelled
Docs Deploy / build (push) Has been cancelled
Module Market Check / Validate modules/ (push) Has been cancelled
Module Market Publish / Generate submissions.json (push) Has been cancelled
Docs Deploy / deploy (push) Has been cancelled
- Package rename com.webtoapp -> br.com.drukstech.codeapp - Product rename WebToApp/web-to-app -> DruksCode/drukscode - Design system Wta* -> Dkc* - applicationId br.com.drukstech.codeapp (.play for gplay flavor) - rootProject.name DruksCode - Fresh git history (upstream kept as remote for sync)
42 lines
2.8 KiB
Markdown
42 lines
2.8 KiB
Markdown
# 本地服务运行时
|
|
|
|
DruksCode 在设备端运行真实的服务运行时,并打包成可安装的 APK。按运行时不同,这可能是从应用存储 fork+exec 原生二进制(如同 Termux)、JNI 内嵌引擎(Node.js),或直驱构建加载通道(受限宿主上的 Go)。生成应用中的 WebView 指向由运行时提供的本地端口。
|
|
|
|
## 支持的运行时
|
|
|
|
| 运行时 | 版本 | 说明 |
|
|
| --- | --- | --- |
|
|
| **Node.js** | 18.20.x | 通过加载 `libnode.so` 的原生 `node_launcher` 包装器,在独立的 `:nodejs` 操作系统进程中运行。支持自定义原生 `.node` 扩展。 |
|
|
| **PHP** | 8.4 | 来自 `pmmp/PHP-Binaries`,首次使用下载一次。Composer 2.10.x。自定义原生扩展(`zend_extension`、`.so`)。 |
|
|
| **Python** | 3.14 | Flask、Django、FastAPI(uvicorn)、Tornado、内置 HTTP 服务器。pip 依赖解析进 `.pypackages`。二进制名带版本号。 |
|
|
| **Go** | 1.26 | 官方 Linux arm64 工具链(国内用 USTC 镜像)。设备端 `go build` / `go mod` / `go run`、`vendor/` 离线构建、通过 `go_exec_loader` 提供静态服务。 |
|
|
| **WordPress** | 7.x | 基于本地 PHP + SQLite(`sqlite-database-integration`)。主题与插件导入。 |
|
|
|
|
**Linux 环境** 界面管理 Node、PHP、Python 和 Go 的工具链与依赖。
|
|
|
|
## 运行时如何协调
|
|
|
|
- **端口管理器** —— 通过广播接收器在多个生成应用间协调运行时端口,冲突时重分配、自动杀掉冲突方或弹窗提醒。运行时通过端口管理器分配端口,并在停止时清理。
|
|
- **本地 DNS 桥代理** —— Android JVM 中的 HTTP CONNECT 代理,为那些 musl/打包二进制无法触达系统解析器的运行时,提供可用的 DNS 解析和出站 HTTP。
|
|
- **下载** —— 大型运行时下载使用延长超时的下载客户端,而非默认的短超时客户端。
|
|
|
|
## 导出要求
|
|
|
|
导出运行时应用时,所需的原生库会被嵌入 APK:
|
|
|
|
- **Node.js** → `libnode_bridge.so` + `libnode.so`(16KB 对齐)+ `libc++_shared.so`
|
|
- **Go** → `libgo_exec_loader.so`
|
|
|
|
::: info 16KB 页对齐
|
|
`libnode.so` 和其他大型 ELF 原生库为 Android 15+ 设备做了 16KB 对齐。原生启动器在 `dlopen` 之前启用 16KB 应用兼容。
|
|
:::
|
|
|
|
---
|
|
|
|
::: info 宿主预览与生成应用的区别
|
|
Node.js 应用的宿主预览走同一套 JNI 启动器,在任何 `targetSdk` 下都可用。Go 在宿主内经直驱通道构建和预览,即使 fork+exec 被拦截也不受影响。其他基于 exec 的运行时(PHP / Python / WordPress)只有在宿主构建允许从应用存储 exec 时才能预览 —— 在 `targetSdk` 35 的宿主上,SELinux W^X 会拦截,这些预览会以明确提示优雅降级。生成 APK 始终以 `targetSdk` 28 发布,完全不受影响。
|
|
|
|
::: tip 各运行时的安装指南即将推出
|
|
每个运行时的详细首次安装、依赖安装与故障排除正在编写中。
|
|
:::
|