尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
如何搭建 Titanium Browser CI 流水线?GitHub Actions 签名构建与 gh attestation 构建认证完整指南
如何搭建 Titanium Browser CI 流水线GitHub Actions 签名构建与 gh attestation 构建认证完整指南【免费下载链接】android-titanium-browserSecure open-source Android browser with support for extensions项目地址: https://gitcode.com/gh_mirrors/an/android-titanium-browserTitanium Browser 是一款基于 Chromium 的开源安全 Android 浏览器支持扩展安装与签名发布。本文将手把手带你搭建它的 CI 流水线使用 GitHub Actions 完成 Chromium 编译、APK/AAB 签名构建并讲解如何用 gh attestation 验证构建产物的真实性。即使你是 CI 新手也能照做完成第一次自托管构建。为什么值得自己搭建 Titanium Browser 构建流水线很多用户只会在 Releases 页面下载 APK但自己搭建 CI 流水线有三个实际好处好处说明 签名可控用自己的 keystore 签名产物只来自你的构建环境⏰ 版本可控定时触发 手动触发随时锁定最新 Chromium 快照构建✅ 可验证配合 gh attestation任何人都能校验这个 APK 确实由该仓库的 CI 产出Titanium Browser 的每次官方发布都由 Actions 构建并支持用 GitHub CLI 做构建认证见 README.md。你在自己的 Fork 里复刻这套流程即可。一分钟看懂现有流水线结构整个 CI 定义只有一个文件build.yml先读懂它你改造时就不会迷路。触发方式手动 定时双保险在 build.yml 中workflow_dispatch手动触发并暴露一个runner输入项可填ubuntu-latestGitHub 托管或self-hosted自托管schedulecron: 0 0 */16 * *即每 16 天自动跑一次。权限声明attestations 是认证的关键build.yml 声明了三项权限permissions: contents: write # 允许发布 Release id-token: write # 允许 OIDC 身份令牌 attestations: write # 允许写入构建证明attestation缺少attestations: write最后一步的构建认证会直接失败——这是新手最常踩的坑。六步流水线从源码到认证产物步骤位置作用CheckoutL23-L25拉取代码并初始化子模块含 vanadiumUpdateL27-L39将 vanadium 子模块升级到最新 tag 并回推BuildL46-L52执行 build.sh完成编译与签名SetL54-L60提取版本号重命名产物为版本号-时间戳-架构.apk/aabPublishL62-L71用 action-gh-release 发布到 ReleasesAttestL73-L79对三个产物写入构建证明签名构建配置两个 Secrets 搞定 APK 签名CI 里不直接放密钥文件而是把 keystore 和属性文件做 base64 编码后存入 Secrets。准备本地密钥用keytool生成keystore.jks记下keyAlias、keyPassword、storePassword写一个local.properties文件保存这三个值分别编码base64 -w 0 keystore.jks和base64 -w 0 local.properties。配置 Repository Secrets在仓库的Settings → Secrets and variables → Actions中添加两个密钥对应 build.yml 中的引用Secret 名称内容LOCAL_TEST_JKSbase64 编码的local.propertiesSTORE_TEST_JKSbase64 编码的keystore.jks流水线运行时common.sh 中的set_keys会把这两个 Secret 解码还原到keys/目录随后 build.sh 调用签名函数sign_apk用 Android SDK 的apksigner对 APK 签名common.shsign_aab用jarsigner对 AAB 签名common.sh。构建结束后 build.sh 会立即删除本地keys/目录避免密钥残留在 Runner 磁盘上。⚠️ 注意keystore 一旦泄露攻击者可继续用同一签名发版。请只在私有 Fork 的 Secrets 中存放切勿提交进仓库。Runner 选择GitHub 托管还是自托管build.yml 通过一行表达式决定 Runnerruns-on: ${{ github.event_name workflow_dispatch inputs.runner || self-hosted }}ubuntu-latestGitHub 托管零配置但 Chromium 全量编译对 CPU/内存/磁盘要求很高免费额度与磁盘容易不够self-hosted自托管官方默认推荐。建议一台干净的 Linux 机器官方脚本基于最新 Ubuntu见 build.sh 的依赖安装逻辑注册为 Actions Runner 后即可复用。手动触发时在Actions → Build → Run workflow里填入 Runner 值即可切换。发布产物并用 gh attestation 验证构建认证产物长什么样流水线会发布三个文件build.yml版本号-时间戳-arm64-v8a.apk— 64 位设备安装包版本号-时间戳-arm64-v8a.aab— Google Play 包版本号-时间戳-armeabi-v7a.apk— 32 位设备安装包用 GitHub CLI 验证真实性下载产物后一条命令即可验证它是否由你的仓库 CI 构建原理见 README.mdgh attestation verify 版本号-时间戳-arm64-v8a.apk -R 你的账号/仓库名验证通过会输出构建时间、Runner 信息和 commit形成代码 → 构建 → 产物的完整证据链。这正是permissions中id-token: write与attestations: write的意义所在。常见问题与排错清单现象原因与解决Attest 步骤失败检查 build.yml 是否声明了attestations: write与id-token: write签名失败 / 找不到 keyAlias确认两个 Secret 的 base64 编码正确local.properties中三个字段齐全构建中途磁盘写满改用自托管 Runner或清理磁盘Chromium 源码与中间产物体积极大版本号异常版本来自 vanadium 子模块的 args.gn 版本号提取逻辑build.shUpdate 步骤会先升级到最新 tag总结搭建 Titanium Browser 的 CI 流水线只需三步读懂 build.yml 的六步结构 → 配置LOCAL_TEST_JKS与STORE_TEST_JKS两个签名 Secrets → 选择合适 Runner 并运行。再用gh attestation verify给每个产物盖上构建认证的印章你就拥有了一条可复现、可验证、签名可信的完整发布流水线 。相关核心文件build.sh · patch.sh · args.gn · common.sh【免费下载链接】android-titanium-browserSecure open-source Android browser with support for extensions项目地址: https://gitcode.com/gh_mirrors/an/android-titanium-browser创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Hey的3个开关参数:-disable-keepalive、-disable-compression、-disable-redirects何时该用

Hey的3个开关参数:-disable-keepalive、-disable-compression、-disable-redirects何时该用

Hey的3个开关参数:-disable-keepalive、-disable-compression、-disable-redirects何时该用 【免费下载链接】hey HTTP load generator, ApacheBench (ab) replacement 项目地址: https://gitcode.com/GitHub_Trending/he/hey hey 是一款轻量级 HTTP 负载测试…

📅 2026/10/2 7:10:18
低压电力电缆厂家排行与选择指南:国内头部源头工厂不踩坑

低压电力电缆厂家排行与选择指南:国内头部源头工厂不踩坑

江西众特邦电缆有限公司,是一家集研发、生产、销售于一体的江西本土低压电力电缆源头制造企业。公司坐落于南昌湾里罗亭工业园,注册资本5000万元,2025年入选国家电网配网电缆合格供应商。一句话定位:众特邦电缆,做扎根…

📅 2026/10/2 7:05:18
R语言基础语法入门

R语言基础语法入门

一、 基础操作与概念 1. 赋值与输出 在R语言中&#xff0c;最标准的赋值符号是左箭头 <-。虽然等号 也可以使用&#xff0c;但在R社区中 <- 是更为推荐的代码规范。 # 1. 赋值 x <- 10 # 将10赋值给变量x (推荐) y 20 # 使用等号赋值 (合法但不推荐)…

📅 2026/10/2 7:05:18
MORE NEWS

更多资讯

📰

Remote In Tech 公司档案解析:Exoscale 的完全远程欧洲云托管实践

数据集 【免费下载链接】remote-jobs Source for remoteintech.company — a community-maintained directory of remote-friendly tech companies 项目地址&#xff1a; https://gitcode.com/GitHub_Trending/re/remote-jobs 点击查看 免费下载 这篇技术指南以 exoscale.md 这…

📰

如何快速下载并解密视频号、抖音等平台的加密视频:res-downloader 使用指南

如何快速下载并解密视频号、抖音等平台的加密视频&#xff1a;res-downloader 使用指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downlo…

📰

正向代理与反向代理全解:从工作原理到 Nginx 实战选型(system-design-101)

后端文档教程 【免费下载链接】system-design-101 Explain complex systems using visuals and simple terms. Help you prepare for system design interviews. 项目地址&#xff1a; https://gitcode.com/GitHub_Trending/sy/system-design-101 点击查看 免费下载 本指南以 …

📰

C++基础(一) 简单认识一下C++

前言 创作该博客的初衷是为了巩固和督促自己在C的学习&#xff0c;也希望我的博客可以对您有所帮助。 目录 一.C的第一个程序 二.命名空间 2.1 namespace的价值 2.2 namespace的定义 2.3命名空间的使用 三.C输入&输出 四,缺省参数 五.函数重载 结束语 一.C的第一个…

📰

Confluence表格全攻略:从插入、美化到动态宏及避坑指南

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

📰

服务器选型避坑指南:从需求分析到硬件配置与运维实战

选服务器这件事&#xff0c;看起来就是CPU、内存、硬盘几个参数的事&#xff0c;但真到自己下单或者给公司做选型时&#xff0c;才发现问题一点都不简单。群里几乎每天都有人问类似的问题&#xff1a;“为什么我买的服务器跑几个虚拟机就卡死”“为什么Windows Server总是提示远…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬