告别健身房的“大脑断片”:我用 VibeCoding 撸了个 Android 训练神器
去健身房锻炼,最怕的不是深蹲后的腿软,而是……“我刚才练的是第几组来着?”
戴着降噪耳机沉浸在音乐里,往往意味着你会错过休息结束的提醒;如果你常去的健身房像我的一样,一到晚上就“人满为患”,那么因为器械被占用而临时更换计划,往往会让你的训练进度瞬间化为泡影。纸质记录太麻烦,市面上的App又往往功能冗余且不够灵活。
作为一名工程师,解决这些“痛点”的最佳方式当然是——自己动手写一个。 于是,在一个阳光明媚的周日,我利用 VibeCoding 和 Codex,开发了一款 Android 健身应用:GymPlayer。

为什么要造这个“轮子”?
在开发之初,我并没有追求大而全的功能,而是试图解决那些在健身房现场真实发生的、让我抓狂的小细节:
- 音乐与计时器的“双重奏”: 绝大多数音乐App和计时器App在使用时互不相让。GymPlayer 的核心目标之一,就是让用户在享受音乐的同时,不错过每一组休息的结束提醒。
- 灵活的训练流程: 健身房不是实验室,由于器械占用情况,你经常需要调整训练顺序。GymPlayer 允许一次性选择多个器械,并在后续训练中动态管理每个器械的完成进度。
- 数据闭环: 从基础的重量、组数,到训练前的血圧、脉搏,再到训练后的体成分数据(体重、体脂率、肌肉量等),这些数据如果只留在脑子里,很快就会被忘记。GymPlayer 通过本地 Room 数据库和 Firebase 同步,将一切数字化。
工程师的“拆解”:GymPlayer 的内核
虽然这是一个“周末项目”,但在技术选型上,我保持了应有的极客追求,并没有在架构上打折扣。以下是它的核心技术栈:
- UI/UX 核心: 使用 Kotlin 和 Jetpack Compose 构建,保证了界面响应的流畅性与代码的现代性。
- 媒体控制: 借助 Media3/ExoPlayer 与 MediaSession,不仅实现了音乐播放,还完美支持蓝牙耳机的控制指令。更重要的是,它能在播放音乐时叠加休息倒计时提醒,彻底解决了“听不到铃声”的尴尬。
- 数据持久化与云同步: 采用 Room 进行本地存储,确保离线状态下的训练数据依然安全;通过 Firebase Authentication 进行鉴权,利用 Cloud Firestore 实现跨设备的训练记录同步。
- 状态管理: 使用 DataStore 处理配置数据,确保了轻量级、类型安全的存储方案。
开发者的视角:这是一场关于“秩序”的构建
开发这款 App 最让我兴奋的,不仅是功能的实现,更是那种“将混乱转化为秩序”的过程。
通过 GymPlayer 文档,你可以看到一个完整的开发逻辑闭环:从用户登录、同步器械画像、到训练过程中的实时交互,再到最后的身体指标记录。
未来,我还打算为它加入:
- 数据可视化: 利用 Firebase 上的海量数据,生成趋势图表,让你一眼看出重量与体成分的变化。
- 智能推荐: 基于混杂程度,提供器械的“最优替代方案”。
- 数据整合: 支持更便捷的 CSV 或电子表格导入导出功能。
对于工程师而言,工具的本质是延长能力的延伸。GymPlayer 不仅仅是一款记录应用,它是健身房里的一个“指挥中心”,让我能专注于动作本身,而不是被繁琐的记录和环境因素分心。
如果你也是一名被健身房“细节怪”困扰的 Android 开发者,或许可以尝试亲手写一个属于自己的训练助手。毕竟,没有什么比用自己写的代码优化自己的生活,更酷的事情了。

Github: https://github.com/perfact-tang/gymplayer/

