面向已配对 OPPO 手表的独立 Android 通知转发与健康数据查看应用。当前主要围绕 OPPO Watch X2 和官方健康 6.6.7 进行适配。
应用在官方健康运行时让出连接;确认官方退出后,再由独立通道接管。健康页面读取本地已有记录,并复用官方控件和图表显示。
这是独立适配项目,功能仍在逐步完善。各版本变更见 更新记录。
开发与修复须遵守 项目规则 和 工程规范。当前领域审查进度与遗留问题分别记录在 审查计划 和 问题台账。
| 功能 | 说明 |
|---|---|
| 官方优先接管 | 监听官方应用状态,先确认状态再切换连接,支持独立通道鉴权和恢复。 |
| 手机通知转发 | 选择允许转发的应用,支持通知内容、来源、图标及相关通知设置。 |
| 防断连设置 | 自动恢复、隐藏最近任务卡片、系统后台设置入口、通知监听恢复。 |
| 可选接管提醒 | 用户可以关闭独立接管和让出给官方时的自动提醒,正常连接及通知转发继续工作。 |
| 手表设置 | 已适配的通知、睡眠及健康监测设置;以应用中实际提供的项目为准。 |
| 健康首页 | 健康趋势、心率、睡眠、血氧、手腕温度、身心状态、放松、日照、体重、血糖和睡眠呼吸暂停。 |
| 历史记录 | 已适配指标支持日、周、月、年切换、日历选择和记录查看;无记录时保持空状态。 |
| 睡眠呼吸监测 | 睡眠详情内提供手机录音与手表监测双开关;支持回放删除、资料同步及本机分析,数据不足时不生成结果,完整整晚有效结果仍待验证。 |
| 账号与本地历史 | 独立账号登录、加密会话保存及本机官方历史导入。 |
| 数据云同步 | 分类开关、手动与三种自动调度;当前以健康数据下载和部分睡眠偏好双向同步为主,实际范围见 实现记录。 |
| 原版界面控件 | 使用官方 COUI 控件、部分 Compose 卡片及原版图表渲染器,数据由独立应用适配。 |
- 已取得 Root 权限的 Android 手机,能够通过
su执行必要的本地读取和状态监听。 - 已由官方健康完成配对的手表,以及手机上的官方健康安装和本地数据。
- 按应用引导授予蓝牙、通知使用权及通知权限;自动恢复还受手机系统后台策略影响。
- APK 最低声明 Android 10;当前完整的数据读取和原生监听路径主要面向 Android 13 及以上、arm64 设备。其他系统和手表型号尚需单独验证。
本项目不实现全新手表配对。 首次使用前,先在官方健康中完成配对和连接,再在独立应用内读取已有配对信息。不要卸载官方健康或清除其数据来尝试“切换接管”。
- 在官方健康中完成手表配对,确认连接正常。
- 安装自行构建的 APK,按应用提示授予所需权限。
- 在设备管理中读取已有配对信息,并选择需要转发通知的应用。
- 在防断连设置中开启自动接管,根据需要调整自动恢复和接管提醒。
- 进入健康页面查看已有记录;需要时使用同步或日期选择入口。
使用同一签名构建的后续 APK 可以覆盖升级并保留设置。首次自行构建会生成本机调试签名;与其他人的签名不同的 APK 无法直接覆盖安装。
目前使用 Windows PowerShell 构建脚本,尚未提供 Gradle 工程。所需工具:
- JDK 17。
- Python 3.11 或更新版本。
- Android SDK Platform 35、Build Tools 36.0.0。
- Android NDK 29.0.14206865;也可通过
ANDROID_NDK_HOME指定兼容的 NDK 路径。 - 本地
jadx-1.5.6-all.jar,用于依赖准备工具需要的 DEX/ASM 库。 - 与适配版本一致的官方健康 APK,版本为
6.6.7_097c6ef_260803。
官方 APK 的固定 SHA-256:
d8163ec849de6ee121171d1d1312b05f1500c8d4ec225c19f949042ae185aeaf
在仓库根目录执行以下命令,按自己的安装位置修改路径:
$env:JAVA_HOME = 'C:\Program Files\Java\jdk-17'
$env:ANDROID_HOME = 'D:\Android\Sdk'
$env:ANDROID_NDK_HOME = 'D:\Android\Sdk\ndk\29.0.14206865'
python '.\standalone-relay\tools\prepare_official_ui.py' `
--apk 'D:\Inputs\health-6.6.7.apk' `
--jadx-jar 'D:\Tools\jadx\lib\jadx-1.5.6-all.jar'
python '.\standalone-relay\tests\run_tests.py'
& '.\standalone-relay\build.ps1'依赖准备脚本校验输入 APK,生成编译期接口、原始 UI 类依赖集合、资源包及 Compose 所需的服务描述文件。输出位于 standalone-relay/official-ui/,不需要从手机导出账号、配对凭据或健康数据库。
睡眠呼吸监测还需准备同一固定版本中的原生算法依赖(28 个新增 JNI/数据类和两套 arm64 库)。使用与上面相同的 APK、JADX 和 JDK 路径运行:
python '.\standalone-relay\tools\prepare_official_osa.py' `
--apk '本机官方APK路径' `
--jadx-jar '本机jadx-1.5.6-all.jar路径' `
--java-home '本机JDK目录'输出保存在 standalone-relay/official-osa/;构建时核对原始 DEX 和原生库哈希,编译签名桩不进入 APK。
构建结果为仓库根目录的 oppo-notification-relay-v<版本>-debug.apk。standalone-relay/version.txt 表示下一次构建版本;成功构建后补丁版本自动加一。
standalone-relay/
app/src/main/java/ 独立应用、通知协议、状态监听、数据适配及界面
app/src/main/res/ 应用资源
native/ C++ 原生状态监听器及构建脚本
tests/ 可在电脑运行的 Java 功能测试
tools/ 官方 UI 依赖准备工具与固定来源信息
build.ps1 APK 构建及调试签名
version.txt 下次构建版本
official-app/ 官方应用静态拆解文件,按旧输出及 6.6.7 分目录
CHANGELOG.md 近期改动说明
独立应用主要使用 Java,原生状态监听器使用 C++。原版 Compose 控件以提取的运行时依赖参与构建。官方资源包由一个进程级 ResourcesLoader 共用,避免每张卡片重复解析资源表。
- 电脑侧测试覆盖通知协议、连接状态、设置策略、健康数据日历计算和血氧分组等逻辑。
- 血氧新增测试覆盖小时边界、缺测时段、跨日过滤、日/月范围聚合、无效数据和历史空状态。
- 原版控件的布局、触摸和系统窗口行为需要实机验证,电脑侧测试不能代替这些检查。
- 当前健康详情页属于独立数据适配页面,并非官方应用全部业务的完整移植。
- 暂不支持官方云端业务、家庭成员完整管理、全新配对,以及未适配的设备和健康功能。
- 体重、血糖以查看已有记录为主;未提供手动录入和第三方 CGM 绑定流程。当前显示单位为公斤、mmol/L。
- 部分历史数据按年份载入;跨年查询需切换到相应年份。源数据缺失时不会补造测量结果。
- 自动恢复受系统限制影响,强制停止、后台限制或权限被收回后可能需要用户重新打开应用。
仓库提供源码、测试和依赖生成说明。官方应用的静态拆解代码、DEX 和已提取资源单独放在 official-app。个人配对信息、健康记录、运行日志、截图、签名密钥及完整应用安装包不纳入 Git 提交。