
WebToApp URL/Webpage 配置项详解Target URL、PWA 分析与故障转移镜像【免费下载链接】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本篇讲解 WebToApp「Edit Common Config通用配置编辑」中Basic info卡片顶部的URL / Webpage字段——它是所有 Web 类应用类型的核心字段决定 WebView 要加载的目标网站。读完本文你将了解该字段的配置方式、WEB类型专属的PWA 分析功能的完整工作机制从 URL 归一化、manifest 抓取到 meta 标签降级以及目标不可达时如何通过故障转移镜像 URL 兜底并能结合仓库源码定位每一项行为对应的实现位置。URL/Webpage 字段的位置与作用URL / Webpage是目标 WebView 所加载的内容是 Web 类应用类型的主字段。它位于 Edit Common Config 编辑器顶部的Basic info卡片中。打开方式在应用卡片上点 ⋮选择Edit Common Config对 Web 应用该入口直接叫Edit。当前该卡片下唯一的选项是Target URL— 要加载的网站地址例如https://example.com。需要注意的是「target目标」对不同应用类型含义不同对 Web 类类型target 就是这个 URL对非 Web 类型本地文件夹、项目、媒体等target 是类型专属的源在 Edit Core Config 中配置而非本字段。这一点在 Edit Common Config 总览 的提示中也明确区分Basic info 等卡片存放的是所有应用共享的选项类型专属的源/运行时配置一律归入 Edit Core Config。PWA 分析仅 WEB 类型对WEB应用编辑器中的PWA analysis小节可以检查目标站点并检测 Progressive Web App / 离线缓存线索帮助你决定离线策略。这一小节对应的 UI 是 CreateAppScreen.kt 中的PwaAnalysisSection组件完整调用链为PwaAnalysisSection (UI) └─ MainViewModel.analyzePwa(editState.url) // 触发分析 └─ PwaAnalyzer.analyze(url) // Dispatchers.IO 上执行 └─ PwaAnalysisState.Success(result) └─ MainViewModel.applyPwaResult(result) // 用户确认后应用建议三个关键方法分别位于 MainViewModel.kt 的analyzePwaL235、applyPwaResultL255和resetPwaStateL349。UI 侧通过viewModel.pwaAnalysisState.collectAsStateWithLifecycle()订阅分析状态URL 为空或正在分析时按钮禁用失败时以WtaStatusBanner展示错误成功后弹出可「应用/关闭」的PwaResultCard。分析流程与请求约束核心实现是 PwaAnalyzer.kt 中的analyze()L67。它是一条严格的降级式流水线URL 归一化L126-L132去除首尾空白若不以http://或https://开头则自动补https://前缀。因此填example.com与https://example.com等价。抓取 HTMLdownloadHtmlL159-L166使用 OkHttp 拉取文档约束条件包括超时连接 10s、读 15s、整体调用 20sL23-L25体积上限HTML 最多 512 KBMAX_HTML_SIZEmanifest JSON 最多 256 KBMAX_JSON_SIZE通过readLimitedText分块限流读取避免超大页面撑爆内存请求头Chrome 131 桌面 UA Accept-Language: en-US,... 禁用缓存 Sec-Fetch-*语义头模拟真实浏览器导航。 若 HTML 为空直接返回pwaAnalyzeEmptyPage错误提示。定位 manifestextractManifestUrlL272-L299先用两组正则从 HTML 中匹配link relmanifest href...两种属性顺序都覆盖大小写不敏感若 HTML 中没有声明则主动探测三个常见路径/manifest.json、/manifest.webmanifest、/site.webmanifest哪个返回合法 JSON以{开头就用哪个相对地址通过resolveUrlL134-L149相对最终 URL含重定向后的finalUrl解析成绝对地址。解析 manifestparseManifestL301-L335提取name、short_name、start_url、scope、display、theme_color、background_color、icons、orientation、description、lang、dir字段模型见 PwaModels.kt 中的PwaManifest/PwaIcon。图标选择策略buildResultFromManifestL337-L358优先purpose含maskable的图标其次按sizes中最大像素值降序any视为无限大。meta 标签降级若 manifest 未找到或下载失败回退到extractFromMetaTagsL360-L378从 HTML 中提取theme-color、og:title、og:image、apple-touch-icon、title与 favicon找不到时兜底为/favicon.ico。只要抓到其中任一条即视为弱 PWA 信号isPwa true否则isPwa false。分析结果数据模型结果封装在 PwaAnalysisResult字段含义isPwa是否检测到 PWA/离线线索suggestedName建议应用名short_name优先其次name/og:title/titlesuggestedIconUrl建议图标 URLsuggestedThemeColor/suggestedBackgroundColor建议主题色/背景色经过normalizeColorL461-L504统一为#RRGGBB大写支持 3/6/8 位 hex、rgb()与常见命名色suggestedDisplay/suggestedOrientationmanifest 中的展示模式与方向startUrl/scope应用入口与可用范围source数据来源MANIFEST/META_TAGS/NONEPwaDataSource枚举errorMessage失败时的人类可读原因PwaAnalysisStateIdle/Analyzing/Success/Error驱动 UI 状态机。用户在结果卡上点「应用」后MainViewModel.applyPwaResult(result)会把建议值回填到编辑状态对应 App Name、App Icon 等字段。此外suggestDeepLinkHostsL438-L454会收集原始 URL、scope、startUrl的域名并对每个域名生成带/不带www.两种变体供深度链接域名配置参考。错误处理细节PwaAnalyzer把不同失败转成针对性提示buildHttpErrorMessage/buildExceptionMessageL235-L270例如HTTP 401/403 → 站点拒绝分析请求429 → 站点限流DNS 解析失败、连接/读取超时、TLS 握手失败均有独立文案对局域网地址的超时会给出专门的本地网络权限提示借助LocalNetworkPermission.isPrivateNetworkUrl判断——源码注释说明 Android 16/17 的本地网络权限被拒时会表现为静默 TCP 超时。行为验证可参考测试用例 PwaAnalyzerTest.kt 与 PwaModelsTest.kt。故障转移镜像 URLFailover当目标站点不可达时的自动兜底failover mirror URLs不属于本卡片而是配置在 Advanced Settings 的Failover项failoverEnabled开关、failoverUrls镜像列表、failoverTimeoutSeconds触发超时。也就是说Target URL 决定「加载什么」Failover 决定「加载不了时换什么」。小结与延伸阅读你想知道的去哪里Target URL 字段本文主体url-webpage 文档编辑器全部卡片总览Edit Common Config非 Web 类型的 target 配置Edit Core ConfigFailover 镜像 URLAdvanced SettingsPWA 分析实现PwaAnalyzer.kt、PwaModels.kt分析结果 UICreateAppScreen.kt单元测试core/pwa 测试【免费下载链接】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),仅供参考