
WebToApp 运行时管理详解手机端 PHP / Node.js / Python / Go / WordPress 运行时二进制下载、镜像与缓存机制【免费下载链接】web-to-appThe most full featured web-to-app toolkit on Android, a complete APK workshop that runs entirely on your phone项目地址: https://gitcode.com/GitHub_Trending/web/web-to-app本篇围绕 WebToAppweb-to-app的「运行时管理」功能展开它是管理服务端类应用类型PHP、WordPress、Node.js、Python、Go所依赖的运行时二进制的统一入口负责就绪状态展示、带进度的下载/暂停/继续/取消、按运行时或全部清除以及国内/全球镜像选择。读完本文你将理解该功能背后的下载状态机、各运行时依赖管理器DependencyManager的职责划分、镜像自动选择逻辑以及运行时缓存目录的复用机制并可结合仓库源码定位到对应实现文件。功能定位它管什么不管什么运行时管理界面从主界面「⋮ → 运行时管理」打开路由实现在 AppNavigation.kt 中挂载 RuntimeDepsScreen。它管理的对象是运行时二进制本身——即应用运行时需要下载的 PHP 解释器、WordPress 核心文件、Node.js 运行时、Python 运行时、Go 工具链等而前端构建打包器、Composer 等「工具链与构建依赖」则由相邻的 Linux 环境 页面管理两个页面互为补充运行时管理下载、镜像、缓存、清除运行时二进制Linux 环境安装/更新构建工具链、直接安装 PHP 与 Python 运行时、Composer、前端构建环境、缓存重置。文档中也明确提示运行时类型的创建界面在需要安装时会自动跳转到 Linux 环境页而运行时二进制下载、镜像则指向本页。管理的运行时及对应版本官方文档列出的受管运行时为PHP 运行时、WordPress 核心、Node.js 运行时、Python 运行时、Go 运行时。各运行时的固定版本号在源码中以常量形式声明界面卡片上展示的版本号即取自这些常量运行时版本常量声明位置PHP8.4PHP_VERSIONWordPressDependencyManager.ktWordPress 核心7.0WORDPRESS_VERSION同上WordPress SQLite 集成插件2.2.23SQLITE_PLUGIN_VERSION同上归类为「运行时插件」而非运行时本体Node.js18.20.4NODE_VERSIONNodeDependencyManager.ktPython3.14PYTHON_VERSIONPythonDependencyManager.ktGo1.26.4GO_VERSIONGoToolchainManager.kt从源码结构看界面内部用RuntimeKind枚举区分 PHP、WORDPRESS、SQLITE、NODE、PYTHON、GO 六个条目并按RuntimeSection分为「运行时」5 项与「插件」SQLite 集成两个分区展示就绪总数按 6 项统计PHP、WordPress、SQLite 插件、Node、Python、Go。一个值得注意的实现细节Node.js 运行时下载的是 capawesome-team 的 nodejs-mobile 分支其 Android 二进制已按 16 KB 内存页对齐预编译运行时不需要再做 ELF 重写入。按运行时状态就绪判定与下载进度每个运行时条目显示「就绪 / 未安装」徽标就绪标志由各依赖管理器分别提供界面在 RuntimeDepsScreen.kt 中聚合PHP / WordPress / SQLite 插件WordPressDependencyManager.isPhpReady/isWordPressReady/isSqlitePluginReadyNode.jsLocalBuildEnvironment.isNpmReadyPythonPythonDependencyManager.isPythonReadyGoGoDependencyManager.isGoToolchainReady。下载进度由统一的状态机驱动。共享的 DependencyDownloadEngine 是全局单例维护Idle / Downloading / Paused / Extracting / Complete / Error状态流MutableStateFlowState界面通过collectAsStateWithLifecycle收集该状态并渲染下载中显示文件名与进度条暂停显示「已暂停 · 文件名」提取阶段显示解包状态出错则弹出 Snackbar 提示。各依赖管理器如 NodeDependencyManager 的 DownloadState同样以StateFlow暴露自身下载状态界面订阅其Error分支展示失败原因。下载完成后引擎进入Complete界面随即刷新就绪标志与缓存体积fullRefresh流程实现「下载完即变绿」的状态闭环。全部下载、暂停 / 继续 / 取消、清除全部下载点击后并非盲目重复下载而是逐项检查就绪标志只补缺失项。以 RuntimeDepsScreen.kt 的 runDownloadAll 为例它依次判断phpReady/wpReady/sqliteReady、nodeReady、pythonReady、goReady仅对未就绪部分调用对应管理器的安装方法最后按整体结果提示「全部就绪」或「安装失败」。暂停 / 继续 / 取消三个操作直接委托给DependencyDownloadEngine.pause() / resume() / cancel()见 DependencyDownloadEngine.kt#L166-L196引擎按taskId维护多任务状态暂停时保存当前进度继续时从断点恢复。清除支持两种粒度且都带确认对话框单个运行时条目卡片上「清除」按钮弹出确认后调用该运行时的clearCacheWordPress、Node、Python、Go 各自独立清理全部清除顶部「清除全部」或存储卡片底部按钮确认后一次性调用四个依赖管理器的clearCache。此外就绪的运行时提供「重装」选项其实现是「先清除、再下载」runInstall(kind, reinstall true)适合二进制损坏后的恢复。界面还展示各运行时的缓存占用getCacheSize与项目数量统计各项目目录下的子目录数存储卡片用色条按占比可视化 WordPress / Node.js / Python / Go 四块缓存。镜像选择自动、全球与国内文档描述镜像功能为「自动选择镜像带国内镜像选项」。源码中每个依赖管理器都定义MirrorRegion枚举CN/GLOBAL选择逻辑以 NodeDependencyManager.kt#L66-L83 为代表自动未手动选择时依据设备默认语言判断——中文系统选CN其他语言选GLOBAL手动界面「下载镜像」卡片提供国内 / 全球 / 自动三个 Chip切换时同步写入 WordPress、Node、Python 三个管理器见onMirrorChange函数镜像源示例Go 运行时在国内使用中科大镜像mirrors.ustc.edu.cn/golang/...全球源为dl.google.com/go/...GoToolchainManager.kt#L27-L33Node.js 国内镜像通过GitHubMirror.proxiedCn(...)对官方下载地址做代理转换。下载失败时引擎还支持在镜像 URL 列表中按序回退重试downloadFileWithFallback配合每个 URL 的重试次数上限提升弱网环境下的成功率。设计要点首用下载、缓存复用、长超时客户端结合文档「说明」部分与源码可以归纳出三条设计约束首次使用时下载运行时不在 APK 内打包而是在首次创建对应类型应用或手动触发安装时下载缓存跨应用复用运行时解压到应用私有目录如 Node 位于filesDir/nodejs_deps下的 ABI 子目录多个应用共享同一份运行时缓存存储卡片中按运行时统计的体积即来源于此大文件长超时下载文档指出大型下载使用延长超时的下载客户端从 DependencyDownloadEngine.kt 源码结构看引擎对下载过程有专门的注释说明——保持 socket 打开的策略被刻意设计得远低于 OkHttp 默认读超时的约束场景避免大体积归档如 Go 工具链压缩包在传输中途被超时切断。与 Linux 环境的边界运行时管理只负责「二进制从哪来、放在哪、占多少空间、如何清理」至于围绕运行时的工作目录nodejs_deps、python_projects、go_projects等、构建工具链的安装与更新、Composer 安装、前端打包器就绪检查以及损坏状态的「重置环境」均归属 Linux 环境 页面实现见 LinuxEnvironmentScreen.kt 与 LocalBuildEnvironment.kt。从源码结构看Node.js 运行时的「安装」按钮实际触发LocalBuildEnvironment.ensureInstalled即运行时安装与工具链安装在此处汇合这也是两个页面功能存在交集的原因。关键源码索引界面与交互RuntimeDepsScreen.kt状态聚合、全部下载、清除确认、存储可视化共享下载引擎DependencyDownloadEngine.kt状态机、暂停/继续/取消、镜像回退各运行时管理器WordPressDependencyManager.kt、NodeDependencyManager.kt、PythonDependencyManager.kt、GoToolchainManager.kt相邻文档运行时管理、Linux 环境【免费下载链接】web-to-appThe most full featured web-to-app toolkit on Android, a complete APK workshop that runs entirely on your phone项目地址: https://gitcode.com/GitHub_Trending/web/web-to-app创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考