news 2026/10/10 11:32:21

openGym Android独立App构建教程:免服务器、免账号,3步打包健身记录APK

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
openGym Android独立App构建教程:免服务器、免账号,3步打包健身记录APK

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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/10 11:27:37

Pipeline 塞入百万命令会怎样?CI/CD 容量边界压测与架构替代方案

前阵子公司内部讨论一个挺有意思的问题:有人想在 CI 流水线里一次性塞进去上百万条命令,用于模拟极端负载下的批量任务回放。他们问我的第一句话就是“打包 100 万条命令进 Pipeline 会怎样?”我当时第一反应是劝退,但后来想想&am…

作者头像 李华
网站建设 2026/10/10 11:25:16

CleanCode AI编程标准代码生成器:从源头治理技术债的工程实践

1. 为什么“生成即规范”是个值得死磕的方向写代码这件事,很多人有个误区:觉得功能跑通了就万事大吉。但真正在项目里摸爬滚打过几年的人都知道,代码写出来只是开始,后面还有无数次的修改、调试、交接、扩展。一个功能今天能跑&am…

作者头像 李华