Skip to content

jay3-yy/BiliPai

Repository files navigation

BiliPai

English | 简体中文

原生、纯净、可扩展 —— 重新定义你的 B 站体验

最后更新:2026-02-16 · 文档已同步至 v6.0.0(以 CHANGELOG 与源码为准)

Version Stars Forks Last Commit

Platform Size License Plugins

Telegram X

📸 应用预览

预览图 1 预览图 2 预览图 3 预览图 4 预览图 5

✨ 功能亮点

🎬 视频播放

功能 描述
高清画质 支持 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.ktapp/src/main/java/com/android/purebilibili/core/store/TodayWatchFeedbackStore.kt

  1. 输入数据
  • 历史样本:historyVideos(本地历史记录)
  • 候选集合:candidateVideos(首页推荐流候选)
  • 模式:RELAX(今晚轻松看)或 LEARN(深度学习看)
  • 护眼信号:eyeCareNightActive(夜间护眼是否激活)
  • 画像信号:creatorSignals(本地累计的 UP 主偏好)
  • 负反馈信号:penaltySignals(不感兴趣视频/UP/关键词)
  1. 历史预处理与 UP 主亲和度构建
  • 仅保留有效历史项:bvid 非空且 owner.mid > 0
  • view_at 倒序,统计每位 UP 的聚合分:
    • creator_score += 1.0 + completion * 1.2 + recencyBonus(view_at)
    • completion
      • progress < 0 -> 0.35
      • duration <= 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
  1. 跨会话画像融合(Creator Signal)
  • 从本地画像仓读取每位 UP 的长期偏好分:
    • engagementScore = ln(totalWatchSec + 1) * 0.92 + ln(engagementEvents + 1) * 0.66
    • recencyScore
      • <=1天:1.15<=3天:0.85<=7天:0.55<=30天:0.2,其余 -0.1
    • signal.score = engagementScore + recencyScore
  • 合并到当前会话亲和度:creatorAffinity[mid] += signal.score
  1. 候选视频清洗
  • 过滤无效候选:bvid/title 非空
  • bvid 去重
  • 标记是否已看过:alreadySeen = bvid in historySet
  1. 单条候选打分(核心公式)
  • 总分:
    • score = base + creator + freshness + seenPenalty + mode + night + feedback
  • 基础分:
    • base = ln(view + 1) * 0.45
    • creator = ln(creatorAffinity + 1) * 2.1
    • freshness(pubdate)<=1天:0.8<=3天:0.55<=7天:0.3<=30天:0.1,其余 -0.05
    • seenPenalty:已看过则 -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.9
      • keywordBonus(title, RELAX_KEYWORDS, LEARN_KEYWORDS)
      • + calmScore
    • LEARN
      • durationLearnScore<5:-0.6<=12:0.5<=35:1.5<=55:0.8,其余 -0.2
      • keywordBonus(title, LEARN_KEYWORDS, RELAX_KEYWORDS)
      • 时长补偿:duration>=10分钟 ? +0.6 : -0.2
  • 夜间护眼调权(仅护眼激活时):
    • durationPenalty<=15:+1.2<=25:+0.2>25 按时长递减到最多 -3.0
    • intensityPenalty<0.006:+0.6<0.012:0.0,其余 -1.1
  • 负反馈惩罚:
    • 命中不感兴趣视频:-3.2
    • 命中不感兴趣 UP:-2.4
    • 不感兴趣关键词:每个 -0.7,最低封顶 -2.8
  1. 关键词加权与限幅
  • keywordBonus = positiveCount * 0.55 - negativeCount * 0.35
  • 限幅区间:[-1.2, 1.8](防止关键词信号压过核心行为信号)
  1. UP 主榜与多样化队列
  • UP 主榜:按聚合 creator_score 取 TopN(默认 5,可配置)
  • 视频队列不是直接按总分排序,而是做“多样化贪心”:
    • adjusted = candidateScore - sameCreatorPenalty - repeatPenalty + noveltyBonus
    • 同 UP 连续惩罚:1.15
    • 重复出现惩罚:usedCount * 0.75
    • 首次出现奖励:+0.35
  • 作用:避免连续刷到同一个 UP,提高耐看度和探索感
  1. 可解释输出
  • 每条推荐会附带解释标签(如:学习向 · 中时长 · 夜间友好 · 偏好UP
  • 偏好UP 触发阈值:creatorAffinity > 0.8
  1. 冷启动可见性策略
  • 推荐单在冷启动窗口内采用一次性曝光策略:
    • 若插件已启用、推荐单已生成、当前在推荐页且列表不在顶部,则自动回顶一次
    • 避免“推荐单已生成但首屏看不到”
  1. 隐私与可控性
  • 算法完全在本地运行,不上传历史记录用于个性化训练
  • 支持一键清空本地画像与反馈,恢复冷启动推荐状态
📖 JSON 规则插件快速入门(点击展开)

什么是 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" }
    ]
}

安装方式

  1. 将 JSON 文件上传到公开可访问的 URL(如 GitHub Gist)
  2. 在 BiliPai 中进入 设置 → 插件中心 → 导入外部插件
  3. 粘贴链接并安装

📚 完整文档: 插件开发指南

🧩 示例插件: plugins/samples/

📺 番剧追番

功能 描述
番剧首页 热门推荐、新番时间表、分区浏览
选集面板 官方风格底部弹出面板,支持季度/版本切换
追番管理 追番列表、观看进度自动同步
弹幕支持 番剧同样支持完整弹幕功能

📡 直播功能

功能 描述
直播列表 热门直播、分区浏览、关注直播
高清直播流 HLS 自适应码率播放
直播弹幕 实时弹幕显示
一键跳转 动态卡片直接进入直播间

📱 动态页面

功能 描述
动态流 关注 UP 主的视频/图文/转发动态
分类筛选 全部动态 / 仅视频动态 切换
GIF 支持 完美渲染动态中的 GIF 图片
图片下载 长按预览,一键保存到相册
图片预览 全局 Overlay 预览层 + iOS 风格开关动画,返回统一固定退场更稳定
@ 高亮 动态中 @用户 自动高亮显示

💬 私信聊天

功能 描述
消息列表 支持查看历史消息,分页加载
富文本交互 支持表情包、@提醒、图片查看
链接预览 自动识别视频链接 (BV号) 并生成即时预览卡片
深色适配 聊天界面完美适配深色模式

📥 离线缓存

功能 描述
视频下载 支持选择画质下载,音视频自动合并
断点续传 网络中断后自动恢复下载
下载管理 清晰的下载列表与进度显示
本地播放 离线视频管理与播放

🔍 智能搜索

功能 描述
实时建议 输入时实时搜索建议 (300ms 防抖优化)
热门榜单 展示当前热门搜索词
历史记录 搜索历史自动保存,支持去重
分类搜索 视频 / UP主 / 番剧 分类检索
视频音乐查找 🆕 快速识别并查找视频中的背景音乐 (BGM)

🎨 现代 UI 设计

功能 描述
Material You 动态主题色,根据壁纸自动适配
深色模式 完美适配系统深色模式
iOS 风格底栏 优雅的毛玻璃导航栏效果
卡片动画 波浪式进场动画 + 弹性缩放 + 共享元素过渡
骨架屏加载 Shimmer 效果,优雅的加载占位
Lottie 动画 点赞/投币/收藏 精美交互反馈
庆祝动画 三连成功烟花粒子特效
粒子消散 "不感兴趣"操作触发灭霸响指式粒子消散动画
平板适配 侧边栏支持持久化切换,底部栏自动居中适配大屏体验

👤 个人中心

功能 描述
双登录方式 扫码登录 / 网页登录
个人信息 头像、昵称、等级、硬币数展示
观看历史 自动记录观看历史,支持云同步
收藏管理 收藏夹列表与视频管理
关注/粉丝 关注列表与粉丝列表浏览

🔒 隐私友好

  • 🚫 无广告 - 纯净观看体验,无任何广告植入
  • 🔐 权限最小化 - 仅申请必要权限 (无位置/通讯录/电话)
  • 💾 数据本地存储 - 登录凭证仅存本地,不上传任何隐私数据
  • 🔍 开源透明 - 完整源码公开,接受社区审查

📦 下载安装

Download

系统要求

项目 要求
Android 版本 Android 8.0+ (API 26)
处理器架构 64 位 (arm64-v8a)
推荐版本 Android 12+ 获得完整 Material You 体验
安装包大小 因 ABI 与构建方式不同会有差异,请以 Releases 实际产物为准

安装步骤

  1. Releases 页面下载最新 APK
  2. 在设备上点击安装 (可能需要允许"未知来源"应用)
  3. 打开应用,扫码或网页登录 Bilibili 账号
  4. 开始享受纯净的 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 高效硬件加速

UI 增强

类别 技术 说明
动画 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

最近更新 (v6.0.0 · 2026-02-16)

  • 平板深度适配: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!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交 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

  1. 本项目仅供 学习交流,严禁用于商业用途
  2. 数据来源 Bilibili 官方 API,版权归上海幻电信息科技有限公司所有
  3. 登录信息仅保存本地,不会上传任何隐私数据
  4. 使用本应用观看内容时,请遵守相关法律法规
  5. 如涉及版权问题,请联系删除

📄 许可证

本项目采用 GPL-3.0 License 开源协议

这意味着:

  • ✅ 可以自由使用、修改和分发
  • ✅ 修改后的代码必须同样开源
  • ❌ 不得用于商业目的
  • ❌ 不得移除原作者信息

⭐ Star History

如果这个项目对你有帮助,欢迎点个 Star ⭐

Star History Chart


Made with ❤️ by YangY
( ゜- ゜)つロ 干杯~

About

原生、纯净、可扩展 —— 重新定义你的 B 站体验

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages