web-to-app 配置模板:将 WebViewConfig 通用配置存为命名快照并跨应用一键套用
web-to-app 配置模板将 WebViewConfig 通用配置存为命名快照并跨应用一键套用在 web-to-appWebToApp中每个应用都拥有一份独立的通用配置WebViewConfig涵盖浏览器行为、界面、网络、隐私、工具栏等设置。当你为一套浏览器环境反复调参后往往不希望为每个新应用重新配置一遍——配置模板Config Templates功能正是为此设计把整套通用配置保存为命名快照之后任何应用一键套用。读完本文你将理解模板的快照边界、UI 操作路径、底层存储实现ConfigTemplateStore.kt、Agent 工具接口以及测试对该机制的验证。模板是什么WebViewConfig 的完整快照模板是通用配置WebViewConfig的完整快照——即编辑通用配置编辑器里的全部设置JavaScript 开关、DOM Storage、缓存、User-Agent、桌面模式、缩放、刷新、全屏行为、下载、浏览器工具栏各按钮、状态栏样式、长按菜单等。这一点可以从WebViewConfig的数据类定义得到印证它定义在 WebApp.kt 中是一个带大量默认值的data class字段从javaScriptEnabled、domStorageEnabled一直延伸到状态栏、方向、注入脚本injectScripts等模板保存的就是这个对象的完整拷贝而非个别字段的差异。套用模板是整体替换而不是局部合并目标应用的WebViewConfig会被快照整体覆盖结果与保存时完全一致不会出现新旧值混杂。Agent 工具的描述字符串中也明确写了这一点Applying a template ... replacing its whole WebViewConfig with the template snapshot (a template is a full snapshot, never a partial merge). —— ConfigTemplateTools.kt边界说明应用类型相关设置入口文件、端口、依赖和 APK 导出设置不属于模板。模板快照的载体是一个专门的轻量数据类data class ConfigTemplate( val name: String, val createdAt: Long, val webViewConfig: WebViewConfig )—— 定义于 ConfigTemplateStore.kt每条模板由名称、创建时间戳和完整配置三部分组成。使用方法保存、套用与管理入口位于编辑通用配置编辑器顶栏的配置模板按钮书库图标Icons.Outlined.LibraryAddCheck。该按钮的 Composable 实现是 ConfigTemplateMenuButton.kt它被挂载在通用配置编辑器的固定顶栏中而非滚动配置列表内因为它作用于整份配置。保存为模板点击顶栏按钮后下拉菜单第一项为保存为模板输入模板名称长度1–40 字符输入框实时显示n/40计数超过 40 字符无法继续输入若名称与已有模板重名忽略大小写输入框下方会显示覆盖提示保存即覆盖旧快照保存成功后编辑器以 Snackbar 提示已保存。对应源码中保存对话框直接调用ConfigTemplateStore.save(context, trimmed, config)见 ConfigTemplateMenuButton.kt。套用模板两种入口下拉菜单已保存的模板按名称不区分大小写排序直接列在菜单中点击即把当前应用的通用配置整体替换为该快照并提示已套用 xxx管理对话框点击卡片中的模板名同样触发套用。从源码结构看套用的 UI 实现是回调onApplyConfig(template.webViewConfig)ConfigTemplateMenuButton.kt将快照作为新配置装载回编辑器改动与手动编辑一样落在编辑器里确认无误后照常保存即可。管理模板下拉菜单底部的管理模板打开一个对话框以卡片列表展示所有模板名称 x 天前式相对创建时间每张卡片提供点击卡片套用该模板重命名弹出输入框同样受 40 字符上限约束若新名与另一个已存在模板重名忽略大小写重命名会被拒绝并显示错误提示删除红色删除图标点击即移除。存储实现config_templates.json模板保存在本地app 存储目录context.filesDir中的config_templates.json应用升级不会丢失。实现上有一个值得注意的设计决策——它刻意没有做成 Room 实体而是 schema-free 的纯 JSON 文件。源码注释解释了原因随着WebViewConfig持续演进字段不断增加用 Gson 直接序列化整个列表可以免去数据库迁移成本见 ConfigTemplateStore.kt 的类注释。关键行为均可在 ConfigTemplateStore.kt 中逐一对照行为规则名称校验去除首尾空白后空名或超过MAX_NAME_LENGTH 40字符直接返回false拒绝同名覆盖save按忽略大小写匹配过滤后追加新快照即同名再次保存会覆盖旧值查找/删除/重命名全部按trim()ignoreCase匹配未命中时返回false而不抛异常重命名冲突新名若与其他模板重名忽略大小写rename返回false列表排序按名称小写排序返回容错降级文件不存在或 JSON 损坏时list通过runCatching { ... }.getOrDefault(emptyList())降级为空列表而不是崩溃写入采用整文件覆盖private fun write(context: Context, templates: ListConfigTemplate): Boolean runCatching { storeFile(context).writeText(Converters.gson.toJson(templates)) true }.getOrDefault(false)测试验证ConfigTemplateStoreTest单元测试 ConfigTemplateStoreTest.kt 基于 Robolectricsdk 33对上述每一条规则都有对应断言可作为行为契约参考保存后列出与读取保存WebViewConfig(zoomEnabled false, toolbarShowConsole false)后get能按忽略大小写的名称如my setup匹配My Setup取回且两个字段值与快照一致测试同名忽略大小写覆盖先存BasezoomEnabled true再存BASEzoomEnabled false列表只剩一条且值是新值测试非法名称拒绝纯空白名与 41 字符名均保存失败测试删除/重命名的忽略大小写与未命中报告删除不存在的模板返回false重命名到已存在名称被拒绝测试损坏文件降级向config_templates.json写入{not json后list返回空列表而非抛出异常测试。Agent 工具程序化管理模板应用内 Agent 也可以管理模板四个内置工具定义在 ConfigTemplateTools.kt 中由 ToolRegistryFactory.kt 注册工具参数只读行为ListConfigTemplates无是返回所有模板的名称与创建时间yyyy-MM-dd HH:mm格式SaveConfigTemplatename1–40 字符、appId否以指定应用的当前WebViewConfig保存为命名快照同名忽略大小写覆盖ApplyConfigTemplatename、appId否用快照整体替换目标应用的WebViewConfigapp.copy(webViewConfig template.webViewConfig)后写回数据库DeleteConfigTemplatename否按名称删除模板不存在时报错与 UI 入口不同Agent 工具以appId定位目标应用可先用ListApps/GetApp查询且保存时直接读取数据库中该应用的webViewConfig字段做快照。小结配置模板的机制可以归纳为三条快照语义模板 WebViewConfig完整拷贝套用即整体替换不合并、不含类型相关设置与 APK 导出设置轻量存储单文件config_templates.jsonGson 序列化schema-free 设计让WebViewConfig新增字段时无需数据迁移损坏时降级为空列表双入口一致编辑器顶栏 UIConfigTemplateMenuButton.kt与 Agent 工具ConfigTemplateTools.kt都收敛到同一份 ConfigTemplateStore 实现名称规则1–40 字符、忽略大小写、重名覆盖在两个入口保持一致并由单元测试完整约束。创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

GSD 自定义模型与 Provider 接入实战:通过 models.json 注册自建端点、微调模型与代理网关

GSD 自定义模型与 Provider 接入实战:通过 models.json 注册自建端点、微调模型与代理网关

人工智能AI Agent代码智能体Agent 编排CLIAI 应用 【免费下载链接】gsd-2 A powerful meta-prompting, context engineering and spec-driven development system that enables agents to work for long periods of time autonomously without losing track of the big picture…

2026/10/1 12:48:18 阅读更多 →
NetAlertX 测试工作流实战指南:DevContainer 环境、pytest 全链路与 sys.modules 污染排查

NetAlertX 测试工作流实战指南:DevContainer 环境、pytest 全链路与 sys.modules 污染排查

后端网络运维数据可视化 【免费下载链接】NetAlertX Centralized network visibility and continuous asset discovery. Monitor devices, detect change, and stay aware across distributed networks. 项目地址: https://gitcode.com/gh_mirrors/ne/NetAlertX 点击…

2026/9/30 8:08:37 阅读更多 →
Qt控件坐标定位实战:从QMouseEvent到QCursor的TaoToken配置验证

Qt控件坐标定位实战:从QMouseEvent到QCursor的TaoToken配置验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:46:22 阅读更多 →

最新新闻

地铁警戒线检测数据集:1125张双格式标注与YOLO训练避坑指南

地铁警戒线检测数据集:1125张双格式标注与YOLO训练避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 6:29:26 阅读更多 →
Smartstore价格计算流水线:价格计算器链原理完全解析

Smartstore价格计算流水线:价格计算器链原理完全解析

Smartstore价格计算流水线:价格计算器链原理完全解析 【免费下载链接】Smartstore A modular, scalable and ultra-fast open-source all-in-one eCommerce platform built on ASP.NET Core 10 项目地址: https://gitcode.com/GitHub_Trending/smar/Smartstore …

2026/10/4 6:29:26 阅读更多 →
基于MRAM与STM32F723 QSPI的工业数据存储实战方案

基于MRAM与STM32F723 QSPI的工业数据存储实战方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 6:29:26 阅读更多 →
Claude Opus 4.8 API接入实战:从Key申请到Cline与Claude Code配置

Claude Opus 4.8 API接入实战:从Key申请到Cline与Claude Code配置

1. 为什么大家都在折腾 Claude Opus 4.8 的 API 接入最近这段时间,我身边做开发的朋友几乎都在聊同一件事:怎么把 Claude Opus 4.8 接进自己的开发工作流里。原因其实不复杂——这个模型在代码理解、长上下文推理和复杂任务拆解上的表现,确实…

2026/10/4 6:29:26 阅读更多 →
GitHub 热榜项目:日榜(2026-10-03)

GitHub 热榜项目:日榜(2026-10-03)

本期共收录 17 个热门开源项目,合计新增 ⭐ 7,871 stars,热门语言:TypeScript、Python、JavaScript。 数据来源:GitHub Trending | 统计周期:日榜 | 更新日期:2026-10-03 📝 本期综述 涨星最高…

2026/10/4 6:29:26 阅读更多 →
图相似度模型:结构语义对齐的工业级实践指南

图相似度模型:结构语义对齐的工业级实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 6:28:26 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →