openGym Android独立App构建教程:免服务器、免账号,3步打包健身记录APK
【免费下载链接】openGymhttps://github.com/DuarteSantos8/openGym项目地址: https://gitcode.com/gh_mirrors/ope/openGym
openGym 是一款自托管的健身房与体重追踪工具,计划每周训练、跟练引导式训练、记录每一组次数与体重变化。它的同一套代码还能打包成Android 独立 App(APK):不需要服务器、不需要注册账号,所有训练数据只存在你自己的手机上。本教程面向新手,手把手带你从零构建并签名出可安装的 APK,全程不到 10 分钟。
为什么选择独立 App 版本?
openGym 有「两种形态」,来自同一份代码,区别一目了然:
| 维度 | 自托管版(默认) | 独立 App 版(VITE_MOBILE=1) |
|---|---|---|
| 运行位置 | 浏览器 + 你的服务器 | 原生跑在 Android 上(Capacitor 壳) |
| 账号 | 通行密钥(Passkey)登录 | 无账号——手机即账号 |
| 数据 | 同步到你的服务器 | 只留在本机(App 私有存储里的 JSON 文件) |
| 训练提醒 | 服务器 Web Push | 系统本地通知,无需服务器 |
| 动作演示媒体 | 服务器提供 | 从内置 CDN 加载 |
💡 核心理念:独立 App 从不与任何后端通信——没有登录页、没有同步、没有遥测。数据写在本机文件
opengym-state.json,每次改动都会自动落地一次,是真正「装完即用」的口味。
对比详情可参考 README.md 与 docs/MOBILE.md。
构建前准备:环境清单
在开始之前,请确认你的电脑已具备:
- Node 20+(用于前端构建)
- Android Studio(自带 Android SDK)
- Java 21(Gradle 需要)
这三样是官方列出的最小依赖,安装完成后即可开工。完整环境说明见 docs/MOBILE.md。
三步构建:从源码到可运行 App
第 1 步:获取源码并安装依赖
git clone https://gitcode.com/gh_mirrors/ope/openGym cd openGym/frontend npm install第 2 步:执行移动端构建
npm run build:mobile这一条命令会注入VITE_MOBILE=1环境变量,把 CDN 媒体地址烘焙进包体,并把 Web 构建产物同步(cap sync)到android/与ios/两个原生工程。脚本定义在 frontend/package.json,请留意:每次改动 Web 代码后都要重跑它,再原生编译。
第 3 步:打开 Android Studio 并运行
npx cap open android打开后点击运行按钮,即可在模拟器或真机上看到 App。App 的应用标识(applicationId)为ch.duartesantos.opengym,在 frontend/capacitor.config.json 中定义,版本号维护在 frontend/android/app/build.gradle。
进阶:打包 Release 版并签名
要分发给别人,需要构建并签名一个Release APK:
cd frontend && npm run build:mobile cd android && ./gradlew assembleRelease # 产物:app/build/outputs/apk/release/app-release-unsigned.apk然后做一次性的密钥库创建(务必妥善保存,后续更新必须用同一把签名密钥,否则 Android 会拒绝覆盖安装):
keytool -genkeypair -keystore my.keystore -alias opengym -keyalg RSA -validity 10950 zipalign -f -p 4 app-release-unsigned.apk aligned.apk apksigner sign --ks my.keystore --ks-key-alias opengym --out openGym.apk aligned.apk最终得到openGym.apk,把它传到手机安装即可(首次会提示允许来自该来源的安装,属正常行为)。签名流程参考 docs/MOBILE.md。
数据如何保存在本地?
这是独立 App 最让人安心的部分。每次保存,应用都会把当前状态镜像写到 App 私有目录下的opengym-state.json,启动时再从该文件恢复。这套逻辑位于 frontend/src/lib/mobile.js:
- 为什么不只依赖本地存储?因为部分移动平台在存储吃紧时会清空 Web 视图的本地缓存,而这份 JSON 文件才是真正的持久副本。
- 备份怎么做?打开「设置」中的Export backup (JSON),会通过系统分享面板(文件、邮件等)导出
opengym-backup-日期.json,无需浏览器下载。备份与导入逻辑见 frontend/src/views/Settings.jsx。
数据持久化在主状态文件 frontend/src/store/useStore.js 中触发——每次persist()都会同时写入文件。
原生训练日提醒
独立 App 的提醒是系统级本地通知,完全不需要服务器:按你每周计划里「有排练的那一天」,逐日调度一条重复通知,精确到分钟。在「设置 → Workout day reminder」里开关即可,首次开启时会请求通知权限。调度实现同样在 frontend/src/lib/mobile.js。
常见问题速查
build:mobile之后能直接部署 Web 版吗?不能。此时frontend/dist是移动包,部署到服务器前需再跑一次普通npm run build。- 能上架应用商店吗?作者刻意不上架,走侧载(sideload)路线,绕开商店规则与费用。
- 想改 App 图标 / 启动图?源图是 1024×1024 的
frontend/resources/icon.svg,用官方资产生成命令一键产出各尺寸(见 docs/MOBILE.md)。
小结
openGym 独立 App 证明了:不建服务器、不注册账号,也能拥有一个完整的健身记录工具。核心就是三条命令——npm install→npm run build:mobile→npx cap open android。数据只属于你,装在 App 的私有存储里,随时可通过分享面板导出备份。快去动手打包一个属于自己的 APK 吧!
更多背景可查阅 README.md、docs/MOBILE.md 与 CONTRIBUTING.md。
【免费下载链接】openGymhttps://github.com/DuarteSantos8/openGym项目地址: https://gitcode.com/gh_mirrors/ope/openGym
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考