Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

OPPO Healthy

面向已配对 OPPO 手表的独立 Android 通知转发与健康数据查看应用。当前主要围绕 OPPO Watch X2 和官方健康 6.6.7 进行适配。

应用在官方健康运行时让出连接;确认官方退出后,再由独立通道接管。健康页面读取本地已有记录,并复用官方控件和图表显示。

这是独立适配项目,功能仍在逐步完善。各版本变更见 更新记录。

开发与修复须遵守 项目规则 和 工程规范。当前领域审查进度与遗留问题分别记录在 审查计划 和 问题台账。

主要功能

功能 说明
官方优先接管 监听官方应用状态,先确认状态再切换连接,支持独立通道鉴权和恢复。
手机通知转发 选择允许转发的应用,支持通知内容、来源、图标及相关通知设置。
防断连设置 自动恢复、隐藏最近任务卡片、系统后台设置入口、通知监听恢复。
可选接管提醒 用户可以关闭独立接管和让出给官方时的自动提醒,正常连接及通知转发继续工作。
手表设置 已适配的通知、睡眠及健康监测设置;以应用中实际提供的项目为准。
健康首页 健康趋势、心率、睡眠、血氧、手腕温度、身心状态、放松、日照、体重、血糖和睡眠呼吸暂停。
历史记录 已适配指标支持日、周、月、年切换、日历选择和记录查看;无记录时保持空状态。
睡眠呼吸监测 睡眠详情内提供手机录音与手表监测双开关;支持回放删除、资料同步及本机分析,数据不足时不生成结果,完整整晚有效结果仍待验证。
账号与本地历史 独立账号登录、加密会话保存及本机官方历史导入。
数据云同步 分类开关、手动与三种自动调度;当前以健康数据下载和部分睡眠偏好双向同步为主,实际范围见 实现记录。
原版界面控件 使用官方 COUI 控件、部分 Compose 卡片及原版图表渲染器,数据由独立应用适配。

运行条件

  • 已取得 Root 权限的 Android 手机,能够通过 su 执行必要的本地读取和状态监听。
  • 已由官方健康完成配对的手表,以及手机上的官方健康安装和本地数据。
  • 按应用引导授予蓝牙、通知使用权及通知权限;自动恢复还受手机系统后台策略影响。
  • APK 最低声明 Android 10;当前完整的数据读取和原生监听路径主要面向 Android 13 及以上、arm64 设备。其他系统和手表型号尚需单独验证。

本项目不实现全新手表配对。 首次使用前,先在官方健康中完成配对和连接,再在独立应用内读取已有配对信息。不要卸载官方健康或清除其数据来尝试“切换接管”。

安装与使用

  1. 在官方健康中完成手表配对,确认连接正常。
  2. 安装自行构建的 APK,按应用提示授予所需权限。
  3. 在设备管理中读取已有配对信息,并选择需要转发通知的应用。
  4. 在防断连设置中开启自动接管,根据需要调整自动恢复和接管提醒。
  5. 进入健康页面查看已有记录;需要时使用同步或日期选择入口。

使用同一签名构建的后续 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 提交。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages