Jetpack Compose 如何帮助构建灵活的媒体应用:EasyBangumi 案例研究
有没有过这种感觉:想看自己喜欢的剧集或动漫,却要在五个不同的网站之间来回切换,关闭无穷无尽的横幅广告,还要和那些坏掉的播放器搏斗?开源社区的开发者们通常会从根本上解决这些问题——他们自己写一个聚合器。
EasyBangumi 项目(或者像作者们称呼的那样"纯净动漫观看")不仅仅是一个播放器。它是一个功能完整的 Android 客户端,基于现代技术栈构建,将不同内容源的混乱整合成一个整洁的库。有趣的是,这个项目最初是作为测试 Jetpack Compose 和音视频技术的试验场。

这个一体化应用里面有什么
EasyBangumi 采用模块化原则运行。应用本身只是一个空壳,包含播放器和目录逻辑。所有内容都通过插件系统导入。这让作者们免于版权问题,也给了用户完全的自由。
该应用已经实现了一系列相当不错的功能:
- 完整搜索和首页推荐。
- "收藏"系统用于追踪新剧集。
- 高级播放器,支持主题切换、播放速度控制和观看历史。
- 投屏支持,可流式传输到电视。
- 剧集下载以供离线观看。
- 实时录制视频片段为 GIF——这是移动播放器中很少见的有趣功能。
技术栈和架构
如果你查看源代码,会立刻发现作者们坚定地站在 Kotlin 这边。这个项目是现代 Android 开发在摆脱旧 XML 视图遗产后的绝佳范例。
Jetpack Compose 作为核心
整个界面都是用 Compose 编写的。这使得实现动态主题和非常流畅的过渡成为可能。如果你正在过渡到声明式 UI,EasyBangumi 的代码展示了如何在一个相当大的应用中组织导航和状态管理。
插件系统
对开发者最有价值的部分是"来源"机制。该应用有一个内置的插件市场。这是通过动态加载实现的,允许在不更新应用本身的情况下添加新的来源网站。
|
|
|
|
|:---------------------------------:|:----------------------------------:|:----------------------------------:|
|
|
|
|
为什么要研究这个
即使你不是动漫迷,EasyBangumi 作为架构案例研究也很有趣。教程项目通常只局限于一个简单的待办事项列表或天气客户端。在这里我们看到的是与重型内容的真实工作:
- 数据缓存:如何存储历史记录和视频进度而不拖慢界面。
- 视频处理:基于 ExoPlayer(或 Media3)实现自定义播放器,并带有自定义 UI 叠加层。
- 网络处理:解析第三方资源和绕过限制。
顺便说一下,开发者们计划推出 PC 版本和云数据同步。鉴于该项目在 GitHub 上已获得近 4,000 颗星,社区正在积极推动作者们进行扩展。
谁将从这个项目中受益
首先是中级 Android 开发者。从 Google 教程学习 Compose 是一回事,但看到如何在它上面构建一个拥有大量屏幕、插件和复杂播放器的真实应用,则是完全不同的体验。
其次——那些想要"按自己喜好"构建自己的媒体中心的开发者。代码在 Apache 2.0 许可证下开源,所以没有人禁止 fork 并根据自己的需求进行改编(例如,用于电影在线影院或教育课程)。
有一点需要注意:README 和部分界面最初是中文的,但代码结构透明,任何写过解析器的人都能理解插件逻辑。
如果你想看现代 Kotlin 如何在实际任务中与 Compose 配合——请查看 EasyBangumi 仓库。
相关项目