3步看懂TVBoxOSC:电视盒子APK自动构建流水线
【免费下载链接】TVBoxOSCTVBoxOSC - 一个基于第三方项目的代码库,用于电视盒子的控制和管理。项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC
TVBoxOSC 是一条自动构建电视盒子视频播放 APK 的流水线仓库:多数人只关心安装包从哪下,很少有人关心这个 APK 到底是怎么构建出来的。
📍 项目定位:电视盒子视频播放的自动构建仓库
TVBoxOSC 是一个用于电视盒子控制与管理的构建仓库,本身不含播放器源码。它盯住上游 TVBoxOS 与 Box 两个项目的最新提交,有更新就自动拉代码、打补丁、编译、签名,发布一个可直接装到电视盒子上的 APK。
跟踪上游、改构建配置、签名打包这套活,人工做又慢又容易漏,这个项目把它全部交给了 CI。对想追最新版的用户,意味着不用等人工手动打包;对想研究 CI 的人,它是一条麻雀虽小五脏俱全的构建流水线。想看它长什么样,先看入口文件:
cat .github/workflows/test.yml # 整条构建流水线都写在这个文件里🚀 最短上手路径:克隆仓库与查看构建流水线
不需要配置环境,三步就能把这条流水线看完:
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/tv/TVBoxOSC。拿到 README 和 CI 配置,这就是仓库的全部。 - 阅读 README.md 的 Credits 段,能看出它跟踪哪两个上游项目,以及各自固定在哪个提交上。
- 打开 .github/workflows/test.yml,按"检查新提交 → 克隆 → 打补丁 → 签名 → 构建 → 发布"的顺序读一遍。
克隆完没看到 app/ 源码,以为自己下错了?这个仓库只是个"构建壳",源码在上游项目里,由流水线运行时拉取,README 里记录的正是上游的提交号。
🧩 核心能力拆解:提交跟踪、构建补丁与签名发布
提交跟踪:没有新提交就跳过构建
要解决的问题:上游提交频繁,每次都重新编译会白耗 CI 资源。做法是构建开头先拉上游 main 分支的最新提交号,再回 README 里 grep 一遍,已经收录过就直接判定"无新提交"退出,test.yml 里关键的几行:
commit=$(curl -sL $upStream/commits/main |grep -o "/commit/[a-z0-9]*" |head -1 | cut -d\/ -f5) if ! grep -q "$commit" README.md; then # 不在 README 里才算有新提交 echo "commit=$commit" >> $GITHUB_ENV fi构建时打补丁:三处修改让上游源码能编过
要解决的问题:上游源码里写死了原作者本机的路径和依赖,直接 clone 下来编不过。做法是 clone 之后用 sed 打三处补丁——版本名换成构建时间戳、删掉硬编码的 Windows Python 路径、给 crosswalk 补一个备用 maven 源:
sed -i 's/buildTime()/+"${tag}"/g' app/build.gradle # 版本名写入构建时间戳 sed -i '/buildPython.*python.exe/d' pyramid/build.gradle # 删掉 Windows Python 路径 sed -i "/crosswalk/a\ maven { url '<备用源>' }" build.gradle # 依赖源防挂签名与发布:构建完的 APK 可直接安装
要解决的问题:未签名的 APK 装不上去,发布说明还得手写。做法是把签名配置注入 build.gradle,证书直接用仓库里自带的 TVBoxOSC.jks,再用上游"上次提交 → 本次提交"的 git log 自动生成变更日志,最后连同 APK 一起发布:
./gradlew assemblerelease --build-cache --parallel --daemon # 产物:TVBox_{上游}_{时间戳}.apk + 源码压缩包 + 变更日志README 当台账:发布记录就是下次校验的依据
要解决的问题:流水线怎么知道"这个版本已经发过了"。做法是发布成功后,用 sed 把 README 里对应上游那一行的 "Updated: 旧提交" 改成新提交号并推回仓库。这个字段一物两用——给人看是版本对照表,给机器用是去重键,这也是"grep README 判断有无新提交"能成立的原因。
🔁 一条完整工作流:从上游提交到 Release 发布
按顺序走完一遍,就是每个新版本 APK 的完整来路:
- 触发:每天 6 点 59 分定时跑,或手动触发(workflow_dispatch)
- 输入:拉取上游 main 分支最新提交 SHA
- 比对:README 里已有该 SHA → 整条流水线跳过;没有 → 继续
- 处理:按该提交 clone 上游源码 → 打三处补丁 → 注入签名配置
- 编译:
./gradlew assemblerelease,打包 apk/、源码压缩包、变更日志 - 输出:以时间戳为版本号发布新 Release,更新 README 的提交号,并向 Telegram 频道推送更新
手动触发还能带两个开关:rebuild 忽略构建记录强制重跑,donotpublish 构建后不发新版,适合只想验证编译的情况。
⚠️ 边界与搭配:单独用够不够,缺什么要搭配
- 仓库里没有应用源码。想改播放器功能,得自己 fork 上游项目动手,这个仓库的流水线只负责"不改代码的构建 + 打包"。
- 构建依赖外网:取上游提交、访问 GitHub API、拉 crosswalk 备用源都要走网络,源一挂当天就出不了包,流水线里那句"防挂"的注释说的就是这个。
- 一天最多巡检一次,外加手动触发:上游有新提交时,新 APK 最晚也要等第二天。
- 拿到的是"壳播放器":仓库不提供片源,装好 APK 后要自己配置内容源,源的合法性由使用方自行把关。
去仓库的 Releases 页下载最新的 TVBox_*.apk,装到电视盒子上,就能看到这条流水线的最终产物。
【免费下载链接】TVBoxOSCTVBoxOSC - 一个基于第三方项目的代码库,用于电视盒子的控制和管理。项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考