突破 Chromium 限制Titanium Browser 实现 Manifest V2 扩展支持的源码级原理详解【免费下载链接】android-titanium-browserSecure open-source Android browser with support for extensions项目地址: https://gitcode.com/gh_mirrors/an/android-titanium-browserTitanium Browser 是一款基于 Chromium 的安全开源 Android 浏览器它的最大亮点是完整支持 Manifest V2MV2扩展。在 Chrome 官方逐步封杀 MV2 的今天这个特性显得尤为珍贵。本文将带你从源码角度看懂它是怎么突破 Chromium 的限制把 MV2 扩展救活的。一、为什么 Chromium 系浏览器默认不再支持 MV2 扩展先搞懂背景。Chromium 官方正把扩展生态从 MV2 迁移到 MV3为此在代码中埋了多道闸门构建层面browser_action、page_action这些 MV2 专属 API 已从编译源列表中移除MV2 扩展装上也跑不了商店层面webstore_privateAPI 中把 MV2 的弃用状态设为kHardDisable硬性禁用安装层面manifest_v2_handler.cc里有一个总开关g_allow_mv2_for_testing默认值是false——即使前两道闸门绕过MV2 扩展依然无法启用。这三道闸门环环相扣是官方刻意设计的结果。而 README.md 中的架构流程图明确把Manifest V2 Secure Off Store Install Support列为 Titanium Browser 的核心附加补丁之一这正是本文的主角。二、源码拆解三行 sed 命令撬开 MV2 闸门整个 MV2 复活过程全部集中在 patch.sh 的# ext: mv2段落只有三处改动却个个打在要害上把 MV2 API 加回编译列表patch.sh#L71向 Chromium 的chrome/common/extensions/api/api_sources.gni中重新注入browser_action.json和page_action.json。相当于把被官方拆除的零件重新装回工厂流水线MV2 扩展的图标按钮、页面操作等核心能力才不会被编译丢掉。解除商店 API 的 MV2 硬禁用patch.sh#L72将webstore_private_api.cc中的MV2DeprecationStatus::kHardDisable改为kNone。这直接影响了从扩展商店下载安装时的兼容性判定。打开 MV2 总开关patch.sh#L73把manifest_v2_handler.cc中的g_allow_mv2_for_testing从false改为true。变量名虽然带 for_testing但它是 Chromium 内部允许加载 MV2 扩展的最终裁决点改为true后 MV2 扩展即可正常安装与运行。 值得一提的是这种基于sed的打补丁方式配合 args.gn 的构建配置无需维护庞大的 Chromium fork只需几行脚本随 Chromium 版本升级即可平滑适配——这也是项目能持续跟进最新内核的原因。三、基石配置is_desktop_android 让扩展有家可住MV2 闸门打开只是第一步。Android 版 Chrome 对扩展能力的裁剪非常多而 args.gn#L2 中的一行配置是关键is_desktop_android true这个 GN 构建参数会把浏览器按桌面级 Android对待解锁桌面版 Chrome 才有的完整扩展运行环境DevTools、权限模型、API 集合等。配合 patch.sh#L120 把_manifest_features.json中的platforms加入desktop_android扩展里声明的win/mac平台限制也能在手机上生效。patch.sh 中还有一组ext:前缀的补丁ext: toolbar、ext: popup、ext: incognito等分别解决了扩展工具栏按钮渲染、弹窗尺寸、隐身模式运行等移动端适配问题——这些细节补丁才是 MV2 扩展在手机上真正好用的保障。四、进阶机制安全加载商店外扩展Chromium 默认只信任 Chrome Web Store 下发的扩展。patch.sh#L76 在download_crx_util.cc的OffStoreInstallAllowedByPrefs中开了一个白名单口子请求来源为chrome-extension协议时放行URL 或 Referer 属于 Opera、Edge 官方商店/CDN 域名时放行。同时项目还内置了一套捆绑扩展分发机制由三个文件协作完成文件作用extensions/BUILD.gnGN 构建规则把bundled.json与.crx文件打包进 APK 的assets/extensions/目录extensions/bundle.py构建脚本下载.crx解析其头部提取扩展 ID 与版本生成/更新bundled.json索引extensions/stage_bundled_extensions.inc运行时 C 代码浏览器启动时读取bundled.json将 APK 资产中的.crx释放到扩展目录并合并进外部扩展偏好external prefs这条APK 资产 → 启动时释放 → 外部扩展注册的流水线让可信扩展可以随应用安全分发无需用户手动折腾——也就是 README.md 中所说的 Secure Off Store Install Support。五、新手上手如何在 Titanium Browser 中加载 MV2 扩展理论讲完实操非常简单加载未打包扩展进入 chrome://extensions打开右上角Developer mode点击Load unpacked在存储选择器SAF中选中扩展所在文件夹即可MV2 扩展直接可用。从商店安装打开 Chrome Web Store通过菜单按钮⋮开启Desktop site桌面站点之后像桌面端一样正常安装。隐身模式使用进入扩展管理页 → 找到扩展 →Details→ 开启Allow in Incognito。如果你感兴趣动手编译仓库提供了构建脚本克隆后按 README.md 的 Building 章节配置 CI 密钥即可产出签名版本git clone https://gitcode.com/gh_mirrors/an/android-titanium-browser结语 Titanium Browser 用不到十行核心补丁就精准撬开了 Chromium 为 MV2 设置的三道闸门恢复 API 编译、解除商店硬禁用、打开总开关再叠加is_desktop_android桌面化配置与商店外安全加载机制让 uBlock Origin 这类经典 MV2 扩展在 Android 上重获新生。对想折腾移动端扩展生态的开发者来说这个开源项目GPL-2.0 许可见 LICENSE的 patch.sh 本身就是一份极具参考价值的 Chromium 扩展机制学习材料。【免费下载链接】android-titanium-browserSecure open-source Android browser with support for extensions项目地址: https://gitcode.com/gh_mirrors/an/android-titanium-browser创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?