adityachandak287/airmini-sync
GitHub: adityachandak287/airmini-sync
一款通过蓝牙直连 ResMed AirMini CPAP 设备并提取、解密睡眠遥测数据为标准 JSON 的独立 Android 应用。
Stars: 0 | Forks: 0
# AirMini Sync
一款独立的 Jetpack Compose Android 应用程序,通过 Bluetooth Classic (RFCOMM SPP) 直接连接到 ResMed AirMini CPAP 机器,获取解密后的遥测睡眠记录,并将其导出为标准的 JSON 格式。
这款完全独立的应用程序可在设备上直接处理经过身份验证的握手(DH Exchange)、通过 JNI C++ 库(`libfiglib.so`)进行加密流解密以及文件共享。
## 架构与项目结构
本项目已完全迁移至 `android-app/` 下的独立 Android 应用程序结构:
* **Jetpack Compose UI**:简洁、支持浅色/深色模式的 Material 布局,提供设备选择、PIN 输入、交互式终端日志记录和数据导出功能。
* **JNI 解密**:将解密包装器打包在 `/jniLibs/` 内,以便直接在 JVM runtime 中解析和解码二进制遥测数据包。
* **双构建配置**:支持开发者/调试构建与生产发布构建的并行安装。
## 本地开发与构建
本项目在 `android-app/` 目录下包含一个终端辅助脚本 `build.sh`,用于自动处理编译器目标和 Java 配置。
### 步骤 1:安装前置条件
确保您已安装 JDK 21 和 Android SDK 命令行工具:
```
brew install --cask temurin@21
brew install --cask android-commandlinetools
```
### 步骤 2:构建并运行 Debug APK(推荐用于测试)
Debug 版本会以包名 `com.airmini.sync.debug` 并行安装,其启动器标签为 **AirMini Sync Debug**:
```
cd android-app
./build.sh
adb install -r app/build/outputs/apk/debug/app-debug.apk
```
### 步骤 3:构建并运行已签名的 Release APK
要构建可用于生产环境的已签名 Release APK(该版本以干净的包名 `com.airmini.sync` 安装),您必须在 keystore 提示处提供密码:
```
cd android-app
./build.sh --release
# 在提示符处输入你的 Keystore 密码
adb install -r app/build/outputs/apk/release/app-release.apk
```
## 发布流水线与 CI/CD (GitHub Actions)
本仓库已在 `.github/workflows/build-apk.yml` 中配置了全自动发布流水线。
每当您向 GitHub 推送 Git tag 时,CI 流水线会自动:
1. 从 secrets 中解码您的发布 keystore。
2. 编译可用于生产环境的已签名 Release APK。
3. 自动根据自上一个 tag 以来的 commit 日志生成发布说明。
4. 如果 tag 包含修饰符(例如 `0.0.1-alpha1`),则将发布标记为 **预发布**;如果是干净的语义化版本(例如 `0.0.1`),则标记为 **正式发布**。
### 如何触发发布:
```
# 1. 提交并将你的更改 push 到 main
git push origin main
# 2. 为 release 打 tag
git tag 0.0.1-alpha1
# 3. Push tag 以触发 pipeline
git push origin 0.0.1-alpha1
```
标签:Jetpack Compose, JNI, 医疗数据, 安卓应用, 数据提取, 物联网, 蓝牙通信