ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

web-to-app 多站点应用(Multi-Web)完全指南:用 MultiWebConfig 把多个站点打包进一个 APK

2026/9/17 2:54:23 拓冰建站 浏览量
web-to-app 多站点应用(Multi-Web)完全指南:用 MultiWebConfig 把多个站点打包进一个 APK web-to-app 多站点应用Multi-Web完全指南用 MultiWebConfig 把多个站点打包进一个 APK【免费下载链接】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-appweb-to-app 的「多站点」Multi-Web应用类型将多个站点合并到一个应用内支持选项卡、卡片、信息流、抽屉等多种布局适合构建链接枢纽、门户和应用合集。本文以 多站点应用类型文档 为主体结合仓库中MultiWebConfig数据模型、MultiWebShellMode渲染层与ApkBuilder导出流水线完整讲清多站点应用的核心配置、按站点配置继承机制、共享注入规则与导出时的回退策略帮助你把多个站点、本地 HTML 或已有应用收拢到一个屋檐下并理解哪些应用类型不能嵌入、为什么。适用场景多站点应用的目标是把「多个站点放在一个屋檐下」链接枢纽把若干外部站点按选项卡聚合一个图标进入、切换即达门户以抽屉或卡片形式呈现不同栏目每站可带主题色与分类应用合集通过EXISTING类型复用本机上已有的 web 应用或 HTML 项目含画廊、单图、单视频媒体应用。单个站点请直接使用 网页应用多站点只在你确实需要聚合时才引入。核心配置MultiWebConfig 与 MultiWebSite多站点应用的数据模型由MultiWebConfig和一个MultiWebSite条目列表支撑定义在 WebApp.ktdata class MultiWebConfig( val sites: ListMultiWebSite emptyList(), val displayMode: String TABS, val refreshInterval: Int 30, val showSiteIcons: Boolean true, // 反向存储旧 JSON 反序列化得到 false // 新旧应用都默认「站点跟随父应用配置」 val sitesUseOwnConfig: Boolean false, val projectId: String )WebApp模型通过multiWebConfig: MultiWebConfig?字段挂载多站点配置见 WebApp.kt应用类型为AppType.MULTI_WEB。站点条目的字段每个MultiWebSite条目携带站点的全部元数据字段说明name/url站点的标签和地址typeURL、LOCAL、INLINE_HTML或EXISTING复用另一个应用/项目localFilePath/inlineHtml/sourceAppId/sourceProjectId对应非 URL 类型的内容来源iconEmoji/faviconUrlemoji 图标或 favicon 地址themeColor按站点的强调色category在应用内对站点分组cssSelector/linkSelector用于内容提取的 CSS 选择器与链接选择器enabled/sortIndex站点开关与排序索引appType站点来源应用的类型标记默认WEBwebViewConfig/htmlConfig站点可携带自己的 WebView 或 HTML 项目配置nodejsConfig/phpAppConfig/pythonAppConfig/goAppConfig/wordpressConfig服务端运行时的配置槽位见下文「不可嵌入的类型」四种站点类型的 URL 解析规则MultiWebSite.getEffectiveUrl()决定了站点最终加载的地址见 WebApp.ktLOCAL或INLINE_HTML只要localFilePath非空就拼成localBaseUrl localFilePath站点指向导出时打包进 APK 的本地文件EXISTING且带localFilePath同样走本地路径否则回退到url其余情况普通URL类型直接加载url。布局与显示模式displayMode支持TABS选项卡、CARDS卡片、FEED信息流、DRAWER抽屉四种取值。新建应用固定为TABS当前版本暂无界面开关切换到其他布局。从源码结构看四种布局都已有完整的渲染实现MultiWebShellMode.kt 按displayMode分发到TabsMode/CardsMode/FeedMode/DrawerMode未知取值一律回退为TabsMode。showSiteIcons控制是否在界面上展示站点图标emoji 或 favicon默认true。站点列表为空时shell 会显示占位空态而不是崩溃。刷新间隔refreshInterval为两次自动刷新之间的秒数默认 30 秒。共享注入跨站点的公共 JS/CSS多站点应用支持把应用级 WebView 配置中的公共注入脚本应用到所有站点且按「站点脚本优先」合并。MultiWebShellMode.kt 的合并逻辑是站点自身的injectScripts全量生效应用级脚本中同名脚本被站点脚本覆盖不同名脚本追加在后——这样既能全局注入也能按站点精细覆盖。按站点配置sitesUseOwnConfig 的默认语义MultiWebSite虽然带有webViewConfig、htmlConfig等按站点配置槽位但默认情况下这些配置并不生效。数据模型中的注释写明了设计意图采用反向存储字段缺省时反序列化为false使旧配置与新应用都默认「站点跟随父应用配置」见 WebApp.kt。运行时行为与之一致MultiWebShellMode.kt 的注释指出「站点贡献的是内容URL、HTML 项目、媒体、模块资源而非设置」——默认由父应用的WebViewConfig统管所有站点避免烘焙进站点配置的应用级字段与父配置打架只有显式把sitesUseOwnConfig置为true才让每个站点保留自己的烘焙配置。导出流水线服务端运行时回退与媒体嵌入多站点应用导出 APK 时ApkBuilder会调用buildMultiWebBlock()把MultiWebConfig翻译成 shell 侧的MultiWebBlock/MultiWebSiteShellConfigJSON 字段带SerializedName见 ShellModeManager.kt其关键行为有两条1. 服务端运行时应用不能嵌入导出时回退为站点 URL。AppType枚举提供了单一事实来源requiresProcessExec覆盖 Node.js / PHP / Python / Go 等服务端运行时类型这类应用通过 forkexec 启动解释器其运行时不会打进多站点 APK。因此 ApkBuilder.kt 在导出时做归一化没有嵌入配置的站点若其类型是MULTI_WEB或requiresProcessExec的服务端运行时类型会被改写为纯WEB站点——shell 永远知道如何渲染一个 URL 站点而把它路由进一个 forkexec 从未打包的解释器的 shell 模式只会失败。这与文档「站点选择器会隐藏此类应用旧配置在导出时回退为站点 URL」的描述一致UI 侧的选择器也直接过滤掉了这类应用见 CreateMultiWebAppScreen.kt。嵌套防护同样在导出时兜底resolveMultiWebSiteSource()对「多站点嵌多站点」与「引用自身」返回 null 而非中止构建被删除的源应用也被容忍——此时该站点回退为纯 URL 站点见 ApkBuilder.kt 的注释。2. 画廊 / 单图 / 单视频站点的媒体在导出时嵌入、运行时解析。resolveMultiWebSiteMediaInputs()按站点 id 收集 GALLERY / IMAGE / VIDEO 源应用的媒体输入本地可读文件才会被嵌入远程 URL 媒体跳过这些媒体随 APK 打包运行时由 shell 解析因此媒体站点能正常渲染而不会黑屏见 ApkBuilder.kt。说明与边界网络与隐私按应用生效每个站点仍是一个网页目标应用级的网络与隐私选项作用于整个多站点应用而非按站点拆分。refreshInterval与showSiteIcons有默认值30 秒、显示配置缺失时按默认值走与 MultiWebBlock 及 shell 侧默认值保持一致。服务端运行时应用Node.js / PHP / Python / Go / WordPress不能作为站点嵌入它们的运行时不会打进多站点 APK选择器会隐藏它们旧配置在导出时回退为站点 URL。单个站点场景请改用网页应用类型。参考文档多站点中文 / Multi-Web英文数据模型WebApp.ktMultiWebConfig / MultiWebSiteShell 配置ShellModeManager.ktMultiWebShellConfig布局渲染MultiWebShellMode.kt创建界面与站点选择器过滤CreateMultiWebAppScreen.kt导出回退与媒体嵌入ApkBuilder.ktbuildMultiWebBlock【免费下载链接】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),仅供参考