原生、纯净、可扩展 —— 重新定义你的 B 站体验
最后更新:2026-02-16 · 文档已同步至 v6.0.0(以 CHANGELOG 与源码为准)
| 功能 | 描述 |
|---|---|
| 高清画质 | 支持 4K / 1080P60 / HDR / Dolby Vision (需登录/大会员) |
| DASH 流媒体 | 自适应码率选择,无缝切换画质,流畅播放体验 |
| 弹幕系统 | 透明度、字体大小、滚动速度可调,支持弹幕密度过滤 |
| 手势控制 | 左侧上下滑动调节亮度,右侧调节音量,左右滑动快进/快退 |
| 倍速播放 | 0.5x / 0.75x / 1.0x / 1.25x / 1.5x / 2.0x |
| 画中画 | 悬浮小窗播放,多任务无缝切换 |
| 听视频模式 | 🆕 专属音频播放界面,支持沉浸式/黑胶唱片模式,歌词显示与播放列表管理 |
| AI 总结 | 🆕 智能生成视频内容摘要,快速获取核心信息 |
| 原地播放 | 长按视频封面直接预览播放,点击即可全屏,无缝衔接 |
| 后台播放 | 锁屏/切后台继续听,支持通知栏控制 |
| 播放顺序 | 支持播完暂停 / 顺序播放 / 单个循环 / 列表循环 / 自动连播,横竖屏可快捷切换 |
| 播放完成体验 | 关闭“自动播放下一个”后,播完不再弹强干扰操作弹窗 |
| 评论体验 | 支持默认排序偏好(最热/最新),并修复特定排序下 UP 主/置顶评论缺失问题 |
| 横屏信息栏 | 全屏顶部新增时间显示,横屏交互信息更完整 |
| 播放记忆 | 自动记录观看进度,下次打开继续播放 |
| 高画质扫码登录 | 支持扫码登录,解锁大会员专属高画质 |
| 插件系统 | 内置空降助手、去广告、弹幕增强、夜间护眼、今日推荐单等插件,可扩展架构 |
| 插件 | 描述 |
|---|---|
| 空降助手 | 基于 BilibiliSponsorBlock 数据库,自动跳过广告/恰饭片段 |
| 去广告插件 | 智能过滤推荐流中的商业推广内容 |
| 弹幕增强 | 支持关键词 + 用户 UID/hash 过滤与高亮,规则变更支持播放内热更新 |
| 夜间护眼 | 定时护眼、三档预设可 DIY、实时预览、暖色滤镜、关怀提醒(支持稍后提醒) |
| 🆕 今日推荐单 | 本地分析观看历史与反馈,生成“今晚轻松看 / 深度学习看”队列,支持收起/展开、单独刷新、UP 主榜与推荐解释 |
| 插件中心 | 统一管理所有插件,支持独立配置 |
| 🆕 外部插件 | 支持通过 URL 动态加载 JSON 规则插件 |
今日推荐单:- 支持双模式切换(今晚轻松看 / 深度学习看)
- 支持 UP 主榜、视频队列、推荐理由标签
- 推荐队列展示 UP 主头像与昵称,优化观感
- 联动护眼状态:夜间自动偏向短时长、低刺激内容
- 支持本地负反馈学习(不感兴趣视频/UP/关键词)
- 支持冷启动首屏曝光策略,避免“已生成但看不到”
- 插件内可一键清空本地画像与反馈,重新学习
夜间护眼:- 三档预设(轻柔/平衡/专注)并支持用户 DIY
- 实时预览亮度与暖色滤镜强度
- 定时护眼 + 使用时长关怀提醒 + 稍后提醒
- 关怀文案与提醒策略支持人性化优化
画质切换:- 画质列表优先使用 DASH 实际可切换轨道
- 缓存切换改为目标画质精确匹配,缺失时回退 API
- 切换提示文案更明确(目标不可用时清晰反馈)
- 先看你最近看了谁:统计历史记录里你常看的 UP 主,并结合播放进度和“最近看过”的权重。
- 再给候选视频打分:每条视频会综合以下信号:
- 热度(播放量)
- 与你偏好 UP 主的匹配度
- 新鲜度(发布时间)
- 模式偏好(
今晚轻松看更偏短、轻松;深度学习看更偏知识、时长适中) - 夜间护眼状态(夜间会降低高刺激、超长视频权重)
- 负反馈(不感兴趣的视频/UP/关键词会被明显降权)
- 最后做“去同质化”排序:不是只按分数从高到低排,而是避免连续刷到同一个 UP 主,让列表更耐看。
一句话总结:今日推荐单 是一个完全本地、可解释的加权排序器,会根据你的观看行为持续微调结果。
对应实现:
app/src/main/java/com/android/purebilibili/feature/home/TodayWatchPolicy.kt
画像与反馈存储:app/src/main/java/com/android/purebilibili/core/store/TodayWatchProfileStore.kt、app/src/main/java/com/android/purebilibili/core/store/TodayWatchFeedbackStore.kt
- 输入数据
- 历史样本:
historyVideos(本地历史记录) - 候选集合:
candidateVideos(首页推荐流候选) - 模式:
RELAX(今晚轻松看)或LEARN(深度学习看) - 护眼信号:
eyeCareNightActive(夜间护眼是否激活) - 画像信号:
creatorSignals(本地累计的 UP 主偏好) - 负反馈信号:
penaltySignals(不感兴趣视频/UP/关键词)
- 历史预处理与 UP 主亲和度构建
- 仅保留有效历史项:
bvid非空且owner.mid > 0 - 按
view_at倒序,统计每位 UP 的聚合分:creator_score += 1.0 + completion * 1.2 + recencyBonus(view_at)completion:progress < 0->0.35duration <= 0->clamp(progress / 600, 0..1)- 其他 ->
clamp(progress / duration, 0..1)
recencyBonus(view_at):<=1天:1.0,<=3天:0.8,<=7天:0.6,<=30天:0.35,其余0.15
- 跨会话画像融合(Creator Signal)
- 从本地画像仓读取每位 UP 的长期偏好分:
engagementScore = ln(totalWatchSec + 1) * 0.92 + ln(engagementEvents + 1) * 0.66recencyScore:<=1天:1.15,<=3天:0.85,<=7天:0.55,<=30天:0.2,其余-0.1
signal.score = engagementScore + recencyScore
- 合并到当前会话亲和度:
creatorAffinity[mid] += signal.score
- 候选视频清洗
- 过滤无效候选:
bvid/title非空 - 按
bvid去重 - 标记是否已看过:
alreadySeen = bvid in historySet
- 单条候选打分(核心公式)
- 总分:
score = base + creator + freshness + seenPenalty + mode + night + feedback
- 基础分:
base = ln(view + 1) * 0.45creator = ln(creatorAffinity + 1) * 2.1freshness(pubdate):<=1天:0.8,<=3天:0.55,<=7天:0.3,<=30天:0.1,其余-0.05seenPenalty:已看过则-2.6
- 强度信号(弹幕密度近似刺激度):
intensity = danmaku / max(view,1)calmScore:<0.004:1.0,<0.01:0.3,其余-1.0
- 模式分:
RELAX:durationRelaxScore:<2:-0.2,<=12:1.4,<=20:0.6,<=35:-0.1,其余-0.9keywordBonus(title, RELAX_KEYWORDS, LEARN_KEYWORDS)+ calmScore
LEARN:durationLearnScore:<5:-0.6,<=12:0.5,<=35:1.5,<=55:0.8,其余-0.2keywordBonus(title, LEARN_KEYWORDS, RELAX_KEYWORDS)- 时长补偿:
duration>=10分钟 ? +0.6 : -0.2
- 夜间护眼调权(仅护眼激活时):
durationPenalty:<=15:+1.2,<=25:+0.2,>25按时长递减到最多-3.0intensityPenalty:<0.006:+0.6,<0.012:0.0,其余-1.1
- 负反馈惩罚:
- 命中不感兴趣视频:
-3.2 - 命中不感兴趣 UP:
-2.4 - 不感兴趣关键词:每个
-0.7,最低封顶-2.8
- 命中不感兴趣视频:
- 关键词加权与限幅
keywordBonus = positiveCount * 0.55 - negativeCount * 0.35- 限幅区间:
[-1.2, 1.8](防止关键词信号压过核心行为信号)
- UP 主榜与多样化队列
- UP 主榜:按聚合
creator_score取 TopN(默认 5,可配置) - 视频队列不是直接按总分排序,而是做“多样化贪心”:
adjusted = candidateScore - sameCreatorPenalty - repeatPenalty + noveltyBonus- 同 UP 连续惩罚:
1.15 - 重复出现惩罚:
usedCount * 0.75 - 首次出现奖励:
+0.35
- 作用:避免连续刷到同一个 UP,提高耐看度和探索感
- 可解释输出
- 每条推荐会附带解释标签(如:
学习向 · 中时长 · 夜间友好 · 偏好UP) 偏好UP触发阈值:creatorAffinity > 0.8
- 冷启动可见性策略
- 推荐单在冷启动窗口内采用一次性曝光策略:
- 若插件已启用、推荐单已生成、当前在推荐页且列表不在顶部,则自动回顶一次
- 避免“推荐单已生成但首屏看不到”
- 隐私与可控性
- 算法完全在本地运行,不上传历史记录用于个性化训练
- 支持一键清空本地画像与反馈,恢复冷启动推荐状态
📖 JSON 规则插件快速入门(点击展开)
JSON 规则插件是一种无需编程的轻量级插件格式,只需编写简单的 JSON 文件即可实现内容过滤功能。
{
"id": "my_plugin",
"name": "我的插件",
"description": "插件描述",
"version": "1.0.0",
"author": "你的名字",
"type": "feed",
"rules": [
{
"field": "title",
"op": "contains",
"value": "广告",
"action": "hide"
}
]
}| 类型 | 字段 | 说明 |
|---|---|---|
| Feed | title |
视频标题 |
| Feed | duration |
视频时长(秒) |
| Feed | owner.mid |
UP 主 UID |
| Feed | owner.name |
UP 主名称 |
| Feed | stat.view |
播放量 |
| Danmaku | content |
弹幕内容 |
| 操作符 | 说明 | 示例 |
|---|---|---|
contains |
包含 | "value": "广告" |
regex |
正则匹配 | "value": "震惊.*必看" |
lt / gt |
小于 / 大于 | "value": 60 |
eq / ne |
等于 / 不等于 | "value": 123456 |
startsWith |
以...开头 | "value": "【" |
{
"id": "short_video_filter",
"name": "短视频过滤",
"type": "feed",
"rules": [
{ "field": "duration", "op": "lt", "value": 60, "action": "hide" }
]
}- 将 JSON 文件上传到公开可访问的 URL(如 GitHub Gist)
- 在 BiliPai 中进入 设置 → 插件中心 → 导入外部插件
- 粘贴链接并安装
📚 完整文档: 插件开发指南
🧩 示例插件: plugins/samples/
| 功能 | 描述 |
|---|---|
| 番剧首页 | 热门推荐、新番时间表、分区浏览 |
| 选集面板 | 官方风格底部弹出面板,支持季度/版本切换 |
| 追番管理 | 追番列表、观看进度自动同步 |
| 弹幕支持 | 番剧同样支持完整弹幕功能 |
| 功能 | 描述 |
|---|---|
| 直播列表 | 热门直播、分区浏览、关注直播 |
| 高清直播流 | HLS 自适应码率播放 |
| 直播弹幕 | 实时弹幕显示 |
| 一键跳转 | 动态卡片直接进入直播间 |
| 功能 | 描述 |
|---|---|
| 动态流 | 关注 UP 主的视频/图文/转发动态 |
| 分类筛选 | 全部动态 / 仅视频动态 切换 |
| GIF 支持 | 完美渲染动态中的 GIF 图片 |
| 图片下载 | 长按预览,一键保存到相册 |
| 图片预览 | 全局 Overlay 预览层 + iOS 风格开关动画,返回统一固定退场更稳定 |
| @ 高亮 | 动态中 @用户 自动高亮显示 |
| 功能 | 描述 |
|---|---|
| 消息列表 | 支持查看历史消息,分页加载 |
| 富文本交互 | 支持表情包、@提醒、图片查看 |
| 链接预览 | 自动识别视频链接 (BV号) 并生成即时预览卡片 |
| 深色适配 | 聊天界面完美适配深色模式 |
| 功能 | 描述 |
|---|---|
| 视频下载 | 支持选择画质下载,音视频自动合并 |
| 断点续传 | 网络中断后自动恢复下载 |
| 下载管理 | 清晰的下载列表与进度显示 |
| 本地播放 | 离线视频管理与播放 |
| 功能 | 描述 |
|---|---|
| 实时建议 | 输入时实时搜索建议 (300ms 防抖优化) |
| 热门榜单 | 展示当前热门搜索词 |
| 历史记录 | 搜索历史自动保存,支持去重 |
| 分类搜索 | 视频 / UP主 / 番剧 分类检索 |
| 视频音乐查找 | 🆕 快速识别并查找视频中的背景音乐 (BGM) |
| 功能 | 描述 |
|---|---|
| Material You | 动态主题色,根据壁纸自动适配 |
| 深色模式 | 完美适配系统深色模式 |
| iOS 风格底栏 | 优雅的毛玻璃导航栏效果 |
| 卡片动画 | 波浪式进场动画 + 弹性缩放 + 共享元素过渡 |
| 骨架屏加载 | Shimmer 效果,优雅的加载占位 |
| Lottie 动画 | 点赞/投币/收藏 精美交互反馈 |
| 庆祝动画 | 三连成功烟花粒子特效 |
| 粒子消散 | "不感兴趣"操作触发灭霸响指式粒子消散动画 |
| 平板适配 | 侧边栏支持持久化切换,底部栏自动居中适配大屏体验 |
| 功能 | 描述 |
|---|---|
| 双登录方式 | 扫码登录 / 网页登录 |
| 个人信息 | 头像、昵称、等级、硬币数展示 |
| 观看历史 | 自动记录观看历史,支持云同步 |
| 收藏管理 | 收藏夹列表与视频管理 |
| 关注/粉丝 | 关注列表与粉丝列表浏览 |
- 🚫 无广告 - 纯净观看体验,无任何广告植入
- 🔐 权限最小化 - 仅申请必要权限 (无位置/通讯录/电话)
- 💾 数据本地存储 - 登录凭证仅存本地,不上传任何隐私数据
- 🔍 开源透明 - 完整源码公开,接受社区审查
| 项目 | 要求 |
|---|---|
| Android 版本 | Android 8.0+ (API 26) |
| 处理器架构 | 64 位 (arm64-v8a) |
| 推荐版本 | Android 12+ 获得完整 Material You 体验 |
| 安装包大小 | 因 ABI 与构建方式不同会有差异,请以 Releases 实际产物为准 |
- 在 Releases 页面下载最新 APK
- 在设备上点击安装 (可能需要允许"未知来源"应用)
- 打开应用,扫码或网页登录 Bilibili 账号
- 开始享受纯净的 B 站体验!
| 类别 | 技术 | 说明 |
|---|---|---|
| 语言 | Kotlin 1.9+ | 100% Kotlin 开发 |
| UI 框架 | Jetpack Compose | 声明式 UI,Material 3 设计语言 |
| 架构模式 | MVVM + Clean Architecture | 分层清晰,易于维护 |
| 类别 | 技术 | 说明 |
|---|---|---|
| 网络请求 | Retrofit + OkHttp | RESTful API 调用 |
| 序列化 | Kotlinx Serialization | JSON 解析 |
| 本地存储 | Room + DataStore | 数据库 + 偏好设置 |
| 图片加载 | Coil Compose | 支持 GIF 解码 |
| 类别 | 技术 | 说明 |
|---|---|---|
| 视频播放 | ExoPlayer (Media3) | DASH / HLS / MP4 支持 |
| 弹幕引擎 | DanmakuFlameMaster | B 站官方弹幕库 |
| 硬件解码 | MediaCodec | 高效硬件加速 |
| 类别 | 技术 | 说明 |
|---|---|---|
| 动画 | Lottie Compose | 高品质矢量动画 |
| 毛玻璃 | Haze | iOS 风格模糊效果 |
| Material You | Material 3 | 动态取色主题 |
app/src/main/java/com/android/purebilibili/
├── app/ # Application 初始化
├── core/ # 核心工具类
│ ├── network/ # 网络配置
│ ├── utils/ # 工具函数
│ └── ui/ # 通用 UI 组件
├── data/ # 数据层
│ ├── api/ # API 接口定义
│ ├── model/ # 数据模型
│ └── repository/ # 数据仓库
├── domain/ # 领域层
│ └── usecase/ # 用例
├── feature/ # 功能模块
│ ├── home/ # 首页
│ ├── video/ # 视频播放
│ ├── bangumi/ # 番剧
│ ├── live/ # 直播
│ ├── dynamic/ # 动态
│ ├── search/ # 搜索
│ ├── download/ # 下载
│ ├── profile/ # 个人中心
│ ├── settings/ # 设置
│ └── login/ # 登录
└── navigation/ # 导航
Tip
路线图最后同步于 2026-02-08(v5.1.4)。功能以最新 Release、CHANGELOG.md 与主分支代码为准。
- 首页推荐流 + 瀑布流布局
- 视频播放 + 弹幕 + 手势控制
- 番剧/影视播放 + 选集面板
- 直播播放 + 分区浏览
- 动态页面 + 图片下载 + GIF 支持
- 离线下载 + 本地播放
- 搜索 + 历史记录
- Material You + 深色模式
- 高画质扫码登录 (解锁高画质)
- 共享元素过渡动画
- 插件系统核心架构
- 内置插件 (空降助手 / 去广告 / 弹幕增强 / 夜间护眼 / 今日推荐单)
- Firebase Analytics + Crashlytics(支持用户行为统计与崩溃追踪)
- 弹幕发送功能
- 平板/折叠屏适配 (侧边栏+底栏优化)
- 应用内更新检测
- 观看历史云同步
- 收藏夹管理
- 多账户切换
- 英文/繁体中文支持
查看完整更新记录:CHANGELOG.md
- ✨ 平板深度适配:Home/Search/Settings/Video/Player 完成大屏分档布局与 UI 收口
- 🧭 仓库职责拆分:TV UI/遥控/Leanback 适配迁移到独立 TV 仓库,主仓仅维护移动端与平板端
- 🎬 动画策略统一:焦点抖动、回场过渡、共享元素后首页顶部标签显隐时序修复
- 🧪 自动化与基线:完善移动端/平板 androidTest 与 benchmark 采样脚本,提升回归稳定性
- v5.2.0 / v5.1.4 / v5.1.3 / v5.1.1 / v5.1.0 / v5.0.5 / v5.0.4 变更详情请查看 CHANGELOG.md
# 克隆仓库
git clone https://github.com/jay3-yy/BiliPai.git
cd BiliPai
# 使用 Android Studio 打开项目
# 或使用命令行构建
./gradlew assembleDebug- JDK 21+
- Android Studio 2024.1+ 或更高版本
- Android SDK 36(Compile SDK)
- Gradle 8.2+
- (可选)
google-services.json: 放置于app/目录下以启用 Firebase 功能。如无此文件,构建脚本将自动跳过相关插件,不影响编译运行。
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
| 项目 | 说明 |
|---|---|
| Jetpack Compose | 声明式 UI 框架 |
| ExoPlayer (Media3) | 媒体播放引擎 |
| DanmakuFlameMaster | B 站弹幕引擎 |
| DanmakuRenderEngine | 字节跳动高性能弹幕引擎 |
| bilibili-API-collect | B 站 API 文档 |
| Haze | 毛玻璃效果库 |
| Backdrop | 液态玻璃效果 |
| Lottie | Airbnb 动画库 |
| Coil | Kotlin 图片加载库 |
| Compose Shimmer | 骨架屏加载效果 |
| Compose Cupertino | iOS 风格 UI 组件 |
| ZXing | 二维码生成 |
| Room | 数据库持久化 |
| DataStore | 偏好设置存储 |
| Retrofit | HTTP 网络请求 |
| OkHttp | HTTP 客户端 |
| Kotlinx Serialization | Kotlin 序列化库 |
| Firebase Crashlytics | 崩溃追踪分析 |
| Orbital | 共享元素过渡动画 |
| AndroidX Palette | 动态取色引擎 |
| LeakCanary | 内存泄漏检测 |
| WorkManager | 后台任务管理 |
Caution
- 本项目仅供 学习交流,严禁用于商业用途
- 数据来源 Bilibili 官方 API,版权归上海幻电信息科技有限公司所有
- 登录信息仅保存本地,不会上传任何隐私数据
- 使用本应用观看内容时,请遵守相关法律法规
- 如涉及版权问题,请联系删除
本项目采用 GPL-3.0 License 开源协议
这意味着:
- ✅ 可以自由使用、修改和分发
- ✅ 修改后的代码必须同样开源
- ❌ 不得用于商业目的
- ❌ 不得移除原作者信息
如果这个项目对你有帮助,欢迎点个 Star ⭐
Made with ❤️ by YangY
( ゜- ゜)つロ 干杯~






