/Bangumi

:electron: An unofficial https://bgm.tv ui first app client for Android and iOS, built with React Native. 一个无广告、以爱好为驱动、不以盈利为目的、专门做 ACG 的类似豆瓣的追番记录,bgm.tv 第三方客户端。为移动端重新设计,内置大量加强的网页端难以实现的功能,且提供了相当的自定义选项。 目前已适配 iOS / Android / WSA、mobile / 简单 pad、light / dark theme、移动端网页。

Primary LanguageTypeScriptMIT LicenseMIT

header

release license stars forks issues codacy downloads

Bangumi

一个基于 react-nativeBangumi 第三方客户端

Bangumi 是一个用于管理追番进度(不限于动漫、音乐、日剧、游戏、AVG),发现和讨论番组的网站

iOS 和安卓都做了兼容,并最大限度保持一致

目前已开发不少于 100 个页面,基于移动端重新设计布局,几乎涵盖网站所有页面

本人并没有原生开发经验,用于练手 react-native,希望通过这个平台去学习更多

更多涉及到本项目的说明,可前往 语雀 查看

ENGLISH

下载

安卓 APK 下载 | AltStore 侧载 | iOS 上当前能使用的方法 | Expo 主页

  • Google Play 被举报下架,暂搁置

  • iOS 付费开发者账号已过期,期间没能过审,因涉及到社区、版权敏感、备案等问题,不考虑再送审了

功能

基本功能(网站原有功能)

带链接的支持网页预览(只能看不能操作)

扩展功能

版本

图文说明

8.15.0 - 2024/10/25

新增

  • [照片墙] 新增能一览用户收藏条目的封面墙(入口在我的、空间右上角,支持各种设置)

优化

  • [排行榜] 功能迭代,追加了网站最近的新内容(支持热度排序、不同类型各种维度的筛选)
  • [标签] 支持筛选公共标签
  • [帖子] 新楼层使用新的样式,使其更显眼,连续的缩略楼层不换行等
  • [帖子] 楼层菜单增加「复制楼层链接」
  • [搜索] 输入纯数字,下方出现直达条目的选项
  • [目录详情] 增加正序倒序按钮

修复

  • [条目、人物] 优化富文本样式
  • [条目] 修复了「音乐」曲目列表翻译异常的问题
  • [帖子] 帖子回复跳转到子楼层需要强制展开父楼层
  • [频道] 修复了因网页结构变动导致的数据失效的问题
  • [更多角色] 样式修复
  • [小圣杯] 修复 iOS 我的持仓页面点击问题

所有更新 CHANGELOG

在线

基于 @storybook/react-native 6.5 生成的 iframe.html,尽量少入侵原项目的基础上,补全了一个完整的单页面流程(当然这样是不考虑性能问题的,不可能与正常开发的,例如使用 Next.js 的相提并论)。

因现在 expo 在网页上面已经很成熟,若以后有空再考虑使用同一套方案补全网页端。

SPA 应用预览(网页收藏管理条目相关功能不定期开发中,已支持基本的信息展示,移动端最佳)

Storybook 组件面板预览

预览

以下为 2024 年 5 月份,一些 UI 相对不重复的页面截屏。图片无法正常加载也可以前往 语雀 查看。

00 10 20 30 40 50 60 70 80 90 100 110 120

开发心得

从 react-native@0.37 就开始持续开发,当年并没有今天如此多简单而且优秀的方案和第三方库,比如 react hooks、react-native-reanimated、expo libraries,甚至连 Pressable、color scheme 这些概念都没有。最近还涌现了很多一站式解决方案,比如 expo-router,ones 都能在客户端和网页端上直出高性能构建。现在代码上会存在大量老旧的又或者与你现在了解到的 react-native 很多雷同的实现,都已经很难通过使用新的方案迭代过来。

使用 react-native 开发客户端,想做到流畅是需要下很大的功夫的,写法没问题的话一样流畅够用。其实跟开发网页应用没多大区别,无非就是多了一些概念而且还需要转变思路。几年开发下来,关键影响到流畅度,无非就几个点:

  • 尽可能不要渲染过大的图片(是所有里面最影响流畅性的)
  • 尽量减少同时请求数、慢请求(包括图片的请求)
  • 尽量缓存计算过的结果
  • 对不可见区域延迟渲染(不像浏览器有现成的)
  • 多写函数式编程、异步逻辑,少用 this、循环
  • 如果可以,减少嵌套层数(网页影响更大)

本地开发

关于环境

详细

本人一直在 mac 环境下开发,iOS 使用 expo 客户端调试,安卓跑真机 usb 调试。

由于 4 年的迭代,不管是对于本项目,还是最初使用的 expo 来说,都已经大相径庭。iOS 目前只能跑在 expo 上,而安卓只能跑在 metro 上。

在 iOS 上想充分使用 expo 客户端简化调试流程,所以不会引入 expo 不支持的第三方库。而安卓上面想要最高的性能,所以后期已经从 expo 上面 eject 出来了,用上了很多第三方的性能优化库替代了原来的组件。

若你想在本地调试,不要在根目录安装包,而请先到 ./packages/[目标环境]/ 下使用 yarn 安装包,然后使用命令 yarn env [xxx] 来切换到目标开发环境,最后请参考这个时候根目录的 package.json 中的命令开发。通常预置的本地调试命令是 yarn dev。

遇到跑不起来,不要太过折腾,推荐在运行本项目之前,就应该使用官方提供的工作流预先把所有环境需要的库都安装好了。window 和 mac 的环境差异还是比较大的,可以查阅 Expo 官方文档。

关于 NPM

详细

不要使用 taobao 源头,可能会在跑环境时提示不允许代理。

npm config set registry https://registry.npmjs.org

国内环境,首次下载包有可能会异常地慢。因用了很多旧的依赖包,里面的包版本依赖混乱,为了不出错请使用 yarn 安装。

git clone https://github.com/czy0729/Bangumi
cd ./Bangumi
yarn

安卓真机 usb 调试遇到的问题

详细

不能安装请尝试在命令前添加 sudo。

安卓系统请打开开发者调试模式,需要至少进行一次打开 Android Studio 的同时连接 usb 允许添加调试。

调试请保证给应用安装权限,允许悬浮窗权限。

遇到 spawnSync adb ENOENT,参考 stackoverflow

第一次就遇到打包失败,看看是不是遇到 read timeout 等问题,表示需要科学上网。明明前一天还能打包成功,后一天就失败,也可能是依赖包无法获取的问题,因为 gradlew 依赖包只有 24 小时的缓存时间,尝试使用 --offline 命令。

常见错误,包括 mac M1

详细

已在 mac M1 上调试成功,最近购入了 M1,尝试实用新环境,iOS expo 运行一路顺风,但是打包 apk 遇到很多问题,总结如下:

  • 一定要使用正确的 JAVA jdk,不是 jre!

  • 打包前一定要安装 watchman,不然会遇到监听文件过多错误

  • 打包遇到失败,请进入 android 目录下执行 ./gradlew clean 后再重新打包

  • 打包失败,看见错误提示上面有 node_modules 包的名字,请尝试把这个包下载补全

  • 若出现各种无法预料的问题,请一定要尝试重启机器

免责

  • 本项目所有数据信息均来自各种网站,不提供任何形式的媒体下载、直接播放和修改功能

  • 本项目承诺不保存任何第三方用户信息

  • 本项目代码仅供学习交流,不得用于商业用途,若侵权请联系

致谢

[Bangumi-OnAir] ekibun 的单集播放数据源

[bangumi-mosaic-tile] weizhenye 的用户统计瓷砖库

[bangumi-data] 番组数据索引

[bangumi-api] 官方接口

投食

开发迭代不易,觉得客户端好用的,有能力的可以投喂一下,也可以给个星星

Star History Chart

Hits