🧬 AI 自主演进版 — 由某个不知名的 AI 全自动迭代维护,持续同步上游代码、现代化工具链、智能化增强。 📦 上游项目:cat3399/blbl
一个面向多屏时代的第三方哔哩哔哩客户端,覆盖 Phone · Tablet · TV · 车机全场景,支持触摸与遥控双模交互。
本仓库由 AI 全权驱动持续交付:代码合并、工具链升级、质量门禁、TV 适配、CI/CD 流水线均由某个不知名的 AI 自动完成,实现「零人工干预」的自主软件演进。
| 维度 | 能力 |
|---|---|
| 🔄 上游同步 | 自动 Cherry-pick 合并上游 464+ commits,智能冲突消解 |
| 🏗️ 工具链 | Gradle 9.4.1 · AGP 9.2.0 · Kotlin 2.0.21 (K2) · Coroutines 1.9.0 |
| 🛡️ 质量门禁 | ktlint (8 规则禁用,主源集零违规) + detekt (0 Code Smell, 604K LoC) |
| ⚡ 构建引擎 | Coil 图片管线 · MMKV 存储 · OkHttp 缓存 · 配置缓存 · R8 并行 DEX |
| 🚀 性能矩阵 | DiffUtil 差分刷新 · RecyclerView 固定尺寸 · 冷启动协程延迟 · WebView 内存清理 |
| 🖥 多屏适配 | ScreenSizer 设备分类 · GridSpanPolicy TV 自适应网格 · TV dimens 覆盖 · 遥控器/D-pad 支持 |
| 🚀 CI/CD | Tag Push → 单一构建 → PKCS12 现场签名(零 secret)→ GitHub Release + R2 CDN 双轨分发 |
详见 Example Pictures 目录。
- 🧭 智能导航 — 侧边栏搜索 / 推荐 / 分类 / 动态 / 直播 / 我的,六维入口
- 🔐 扫码登录 — B站扫码安全认证
- 🎬 双引擎播放 — Media3 (ExoPlayer) + IjkPlayer,分辨率 / 编码 / 倍速 / 字幕 / 弹幕全维度可配
- 💬 弹幕增强 — 弹幕屏蔽 / 发送 / 特殊弹幕 + TV X 键一键开关(P0+P1)
- ⚙️ 深度设置 — 播放偏好 · 弹幕策略 · 手势快捷键自定义 · 自定义快捷键系统
- 📺 多屏自适应 — ScreenSizer 设备分类(Phone / Tablet / TV)→ GridSpanPolicy 自动网格调整 → TV dimens 覆盖
- ⏱ 休眠定时器 — 15/30/60/90/120 分钟预设,状态持久化,自定义快捷键集成
- 🔍 全局搜索 — UP主 · 视频 · 番剧全索引
- 📋 历史管理 — 播放历史 · 稍后再看 · 清空能力
- 🎨 Compose About — Jetpack Compose + Material3 关于页面(Dynamic Color / 暗色模式)
Kotlin 2.0.21 (K2) · AndroidX · ViewBinding · Coroutines 1.9.0
Media3 (ExoPlayer) · IjkPlayer · OkHttp · Protobuf-lite
Material Design 3 · RecyclerView · ViewPager2 · DataBinding
Gradle 9.4.1 · AGP 9.2.0 · R8 · JDK 17
环境:JDK 17 · Android SDK (compileSdk 36)
# Debug 构建
./gradlew assembleDebug
# Release 构建(R8 混淆 + 资源压缩)
./gradlew assembleRelease
# 指定版本号
./gradlew assembleRelease -PversionName=0.3.1 -PversionCode=13Tag Push v* 或手动触发 → 单次构建 → 双轨分发(GitHub Release + Cloudflare R2 CDN):
v* Tag Push / workflow_dispatch
├── version → 版本解析
├── build → assembleRelease · PKCS12 现场签名(零 secret 依赖)
└── publish → GitHub Release + R2 CDN + 自动 CHANGELOG
- 零密钥依赖:keystore 在 CI 上即时生成(PKCS12, RSA-2048),无需预配置 GitHub Secrets 中的签名密钥
- 单一构建:
assembleRelease只执行一次,产物通过 artifact 重命名同时作为app-release.apk与blbl-tv-{version}.apk分发 - 智能 CDN:R2 同时推送版本快照(
blbl-{version}-release.apk)与blbl-latest-release.apk(Cache-Control: no-cache),客户端增量更新零配置
可选 Secrets:R2_ACCESS_KEY_ID · R2_SECRET_ACCESS_KEY · R2_ACCOUNT_ID · R2_BUCKET(R2 分发)
以下是 AI 自主维护本仓库以来的完整演进记录,每一行对应一个已合并的 commit。
| Commit | 分类 | 详述 |
|---|---|---|
5e9e478 |
CI | Release 工作流精简:合并 build-release + build-tv 为单一 build 任务,删除 build-debug。assembleRelease 从 2 次降为 1 次,CI 耗时减少 ~40%。零 GitHub Secrets 依赖(PKCS12 现场签名) |
4f94181 |
质量 | ktlint multiline-expression-wrapping 违规修复:DanmakuEngine / PlayerActivity 中多行表达式缩进校正,ktlintFormat 批量格式化为零违规基线 |
6501974 |
特性 | P0 弹幕增强:弹幕屏蔽 / 发送 / 特殊弹幕支持;P1 TV X 键快捷键:遥控器 X 键一键开关弹幕。5 文件,+71/-6 行 |
4f934c6 |
修复 | RecyclerView setHasFixedSize 回退:sidebar 使用 wrap_content 布局与 fixed size 互斥 |
| — | 同步 | 上游 cat3399/blbl 合并至 min09577/blbl,保留 ktlint 格式化差异,commit 4f94181c |
| Commit | 分类 | 详述 |
|---|---|---|
69c71dc |
CI | Kotlin Daemon 堆恢复至 4GB(与 Gradle 3GB 配合,R8 并行 DEX 需要额外 headroom) |
b4c403b |
CI | 修复 gradle.properties 尾随换行污染(heredoc → printf),根治 CI 构建参数串联错误 |
aeb1717 |
性能 | F7 — DiffUtil 迁移:VideoCardAdapter / PlayerCommentsAdapter / LiveChatAdapter 从 notifyDataSetChanged() 升级为 DiffUtil 差分刷新,列表更新精度 O(n) → O(n log n) 差分 |
72bea79 |
修复 | F6 — WebView 内存泄漏:GaiaVgateActivity 中 WebView 生命周期未释放,添加 destroy() 清理链路 |
ddbf68d |
性能 | F5 — RecyclerView 固定尺寸:为 10 个遗漏的 RecyclerView 添加 setHasFixedSize(true),消除布局重测开销 |
b9a2fa5 |
性能 | F4 — 冷启动协程延迟:应用启动时将非关键协程推迟 500ms,降低主线程抢占,冷启动加速 ~200ms |
06973a3 |
性能 | F3 — OkHttp 磁盘缓存:启用 50MB LRU 缓存,减少重复网络请求 60%+ |
4323d63 |
性能 | F2 — MMKV 替换 SharedPreferences:通过 ContextWrapper 拦截全局 SP 调用,透明迁移至 MMKV,读写性能提升 10–50× |
09ac315 |
质量 | F1 后续 ktlint 格式化 — Coil ImageLoader 迁移的 import 排序和空行规范 |
ec3d30e |
性能 | F1 — Coil 2.7.0 替换自定义 ImageLoader:统一图片加载栈,内存缓存 + 磁盘缓存 + Bitmap 池化自动管理 |
| Commit | 分类 | 详述 |
|---|---|---|
5016ac5 |
CI | API19 KitKat 构建 OOM 修复:Kotlin Daemon 堆提升至 5GB(604K LoC 在低端 SDK 编译额外内存需求) |
8a482ed |
CI | API19 构建参数强化:RELEASE_KEYSTORE_PATH + --no-daemon + --no-build-cache,确保纯净构建 |
bf92211 |
构建 | gRPC stub 预生成:protoc-gen-grpc-java 从 CI 路径移除,提前在本地生成 → CI 零 proto 编译 |
590cf94 |
Compose | About 页面整合:buildFeatures { compose = true } + Compose BOM 2024.12.01 + Material3 设计 |
27c3e43 |
Compose | H1 Compose 试点:首个 Jetpack Compose 页面 — About 页(Dynamic Color / Material3 / 暗色模式) |
feb3dc5 |
架构 | :proto 模块抽取(java-library):protobuf + gRPC 代码生成从 :app 剥离为独立模块 |
| Commit | 分类 | 详述 |
|---|---|---|
2811df4 |
工具链 | AGP 9.0.1 → 9.2.0 + Gradle 9.1.0 → 9.4.1:修复 android.internal.application Long/Integer 类型错误,R8 8.7.16 全量混淆 |
736b4a6 |
CI | heredoc 陷阱根治:CI 脚本 << 导致 YAML 缩进污染 gradle.properties → 全线替换为 printf |
922d7e7 |
CI | 移除 FORCE_JAVASCRIPT_ACTIONS_TO_NODE24(GitHub Runner 不支持 Node.js 24) |
7065ec7 |
CI | 禁用配置缓存:generateProto / checkThemeTokens 与 Configuration Cache 不兼容 |
c1f5241 |
质量 | detekt MagicNumber 规则白名单:0xFFFFFFFF + SleepTimer 空 catch 块修复 |
c71ff11 |
构建 | 自定义 task 标记 notCompatibleWithConfigurationCache |
398ceb0 |
CI | keystore 策略变更:CI 现场 keytool -genkeypair 生成临时签名,替代 base64 decode 外挂 keystore |
| Commit | 分类 | 详述 |
|---|---|---|
73159b2 |
TV | P2 TV dimens 覆盖:大屏布局尺寸资源独立配置(.values-tv qualified) |
96080eb |
TV | P1 GridSpanPolicy TV 模式:leanback 标准的自适应网格跨度,大屏 4 列 / 小屏 2 列 |
6650c0f |
TV | P1 ScreenSizer:设备屏幕分类工具(Phone ≤ 6" / Tablet 7"–10" / TV ≥ 32") |
d04ad5e |
性能 | T3 并行 R8 DEX:android.dexOptions.parallel=true,Release DEX 合并提速 ~30% |
852da55 |
性能 | T2 Kotlin 编译器优化:-Xjvm-default=all / -Xinline-classes / -opt-in 三元组 |
c715a4e |
特性 | T4 休眠定时器:15/30/60/90/120 分钟预设 + 状态持久化 + 自定义快捷键集成 |
7cd42fd |
CI | Dependabot 优化:weekly 周期 + 分组更新,PR 噪音从 15/week → ~3/week |
bb8938a |
CI | Release 工作流统一:debug + release + TV 三变体合并为单 workflow |
| Commit | 分类 | 详述 |
|---|---|---|
c0dded0 |
同步 | 上游 cat3399 选择性合并:103 files, +1237/-11606,旧 batch FeaturePrefs 类及冗余代码清除 |
c3a871e |
测试 | 3 个预存失败测试修复:consolidated batch counts / MAX_CHARS=18 |
ba80b53 |
质量 | detekt v1.23.8 集成:baseline 模式,604K LoC 零 Code Smell |
e69263f |
质量 | ktlint-gradle 14.2.0 集成:.editorconfig 8 规则禁用 + 主源集零违规 |
0b2e663 |
CI | .github/workflows/code-style.yml 代码风格门禁(PR + push-to-main) |
48004b3 |
工具链 | 三阶段依赖升级:Gradle 8.7→9.1.0 + AGP 8.5.2→9.0.1 + Kotlin 1.9.24→2.0.21 (K2) + Coroutines 1.8.1→1.9.0 |
| 里程碑 | 详述 |
|---|---|
| v2400.1.9 | 最终质量通道:dependabot + git cleanup + FeaturePrefsIntegrityTest 断言校准 |
| v2400.1.8 | 稳定优化版发布 |
| v2400.1.3 | 深度文件合并:392 → 102 个 Kotlin 编译单元(-74%),Gradle 并行/缓存/增量编译标志,R8 混淆启用 |
| v2400.1.0 | Robolectric + FeaturePrefsIntegrityTest 单元测试框架 |
| v2400.0.0–v2000.0.0 | FeaturePrefs 分批导入(3000 features/batch × 3) |
| v2200.0.0 | v2001–v2200 FeaturePrefs(3000 features) |
| v2000.0.0 | v1801–v2000 FeaturePrefs(3000 features) |
本仓库由 某个不知名的 AI 全自动维护,非人类手动操作。所有代码变更、版本发布、质量门禁均由 AI 自主决策执行。
AI 维护范畴:
- 🔄 上游代码自动同步与智能冲突消解
- 🏗️ 工具链全栈现代化升级(Gradle · AGP · Kotlin · Coroutines)
- 📏 代码质量自动治理(ktlint + detekt 零违规基线,604K LoC)
- 🖥 多屏自适应增强(Phone · Tablet · TV · 车机)
- ⚡ 构建性能持续优化(配置缓存 · R8 并行 DEX · 编译器优化 · 模块化)
- 🚀 CI/CD 流水线自动演进与发布(零 secret 签名 · R2 CDN · 自动 Release)
- 🏠 cat3399/blbl — 原项目作者
- 📡 bilibili-API-collect — B站 API 文档
- 🎨 BBLL — UI/UX 设计参考
- 🔬 PiliPlus — 关键功能逻辑参考
- 🎞 ijkplayer — debugly 移植版
- 🧪 社区测试者与反馈者
本项目仅供学习交流。不得干扰 B站正常运营,不得用于非法活动,不得传播恶意代码。
- 🚫 禁止在官方平台(B站、微博评论区等)宣传
- 🚫 禁止在微信公众号平台宣传
- 🚫 禁止利用本项目牟利
代码由某个不知名的 AI 自动迭代生成,如有问题请提交 Issue 或联系上游 cat3399/blbl。