Bangumi
这是一个基于 react-native
的 Bangumi 第三方客户端
Bangumi 是一个用于管理追番进度(不限于动漫、音乐、日剧、游戏、AVG),发现和讨论番组的网站
iOS 和安卓版本都做了兼容,并尽最大努力保持一致性
目前已开发超过 100 个页面,基于移动端重新设计布局,几乎涵盖了网站的所有页面
我本人并没有原生开发经验,这个项目用于练习 react-native,希望通过这个平台学习更多
关于本项目的更多说明,可以前往 语雀 查看
目录
下载
AltStore 侧载 | iOS 上当前可用的方法 | Expo 主页
-
Google Play 版本因被恶意举报已暂停
-
苹果 100 美元开发者账号已过期,期间未能通过审核,因功能太多且涉及社区、版权敏感等问题,加上最近还有备案要求,不可能再提交审核了
功能
基本功能
- 番组进度管理
- 条目、角色详情
- 时间线(用户动态)
- 超展开(帖吧)
- 时光机(个人中心)、用户空间
- 不限于搜索、排行榜、索引、目录、每日放送、年鉴、标签
特色功能
- 其他站点同步到 bgm 功能(bilibili、豆瓣)
- 封面图片和大部分脱敏静态数据覆盖到自费 CDN 中间层,访问高速化(意味着即使网页版遇到很慢或者挂掉的情况,客户端也能正常获取数据)
- 番剧、游戏截图预览
当季番剧精准到单集网络播放源、漫画源查询,找番剧、文库、游戏、音乐- 小圣杯(角色交易空气游戏,客户端独立设计 UI 和交互)
版本
8.12.0 - 2024/07/20
优化
- [进度] 在设置里,选项卡允许自定义条目范围(若设置成只有一项,会只显示列表)
- [每日放送] 更新 2024S3 番剧放送时间
- [日志] 支持收藏
- [条目] 标题旁的发布日期,支持显示到月份,需在设置中打开
- [条目] 游戏条目有其他版本时,吐槽区支持只看当前版本
- [电波提醒] 优化了好友申请的按钮显示时机
- [UI] 缩小了 loading 提示,在超时后会显示关闭按钮
- [找条目] 更新部分类型数据
修复
- [帖子] 修复了编辑子楼层文本后,没有重新刷新显示的问题
- [日志] 修复了编辑楼层回复闪退的问题
- [安卓] 修复了不明原因导致整个客户端不响应点击冻结的问题(待验证)
- [安卓] 点击行为改善(待验证)
- 减少了图片相册大图不显示的频率(有部分依然不显示的无解,因为反盗链)
- 修复了若干问题不详
在线
基于 @storybook/react-native 生成的 iframe.html,在尽量少入侵原项目的基础上,开发了一个完整的单页面流程(当然这样是不考虑性能问题的,不可能与正常开发的,例如使用 Next.js 的相提并论)。
因现在 expo 在网页上面已经很成熟,若以后有空再考虑使用同一套方案补全网页端。
SPA 应用预览(网页收藏管理条目相关功能不定期开发中,已支持基本的信息展示,移动端最佳)
Storybook 组件面板预览
预览
以下为 2024 年 5 月份,一些 UI 相对不重复的页面截屏
开发心得
这个仓库已经持续开发多年,当初并没有现在这么多简单而优秀的方案和第三方库,比如 react hooks、react-native-fast-image、react-native-reanimated、expo libraries,甚至连 pressable、color scheme 的概念都没有。所以代码中会存在大量老旧的,或者与你现在了解的 react-native 很多类似的实现,这些都很难通过使用新方案来迭代了。
使用 react-native 开发一个应用,要做到流畅需要下很大功夫,但不要说 rn 不行了,被放弃了不如 Flutter,只要写法正确一样可以很流畅。其实跟开发 web 应用没多大区别,但经过几年开发,影响流畅度的关键点无非就几个:
- 不要渲染过大的图片(图片是所有因素中最影响流畅性的)
- 尽量减少同时请求数、慢请求(包括图片的请求)
- 对不可见区域延迟渲染
- 多写函数式编程,多写异步逻辑,少用 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
详细
不要使用淘宝源,可能会在跑环境时提示不允许代理。
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] 官方接口
赞助
开发迭代不易,如果觉得客户端好用且有能力的话,可以赞助一下,也可以给个星星