Skip to content

About

一个可扩展的 Android 状态上报客户端

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

AliveClient

AliveClient 是一个面向 Android 的可扩展状态上报客户端。它在系统状态发生变化时,将设备、音乐、视频和身体状态发送到用户自己配置的服务器,尽量使用系统事件而不是高频轮询。

应用 ID:github.univers629.aliveclient

主要功能

  • 设备状态:通过无障碍事件识别前台应用,默认结构化上报当前应用、电量、充电状态、Wi‑Fi/移动数据和 Android 版本。
  • 应用图标:只提取当前前台应用的图标,首次遇到时上传到 Alive 并缓存 URL;不会批量上传应用列表。
  • 音乐状态:通过通知监听和 MediaSession 上报 歌名 - 歌手,支持限制监听指定应用;可选择本地音乐目录,在当前曲目匹配成功时查重并按需流式上传音源。
  • 视频状态:独立配置设备 ID 与显示名称,支持限制监听指定应用。
  • 身体状态:可分别选择 BLE / Health Connect 心率与手机 / Health Connect 步数;BLE 订阅由用户手动开关,不会在失败后持续轮询重订阅。
  • 身体状态直接使用 POST {server}/api/health/set 写入 Alive 首页的心率和今日步数卡片,只需配置全局服务器地址和密钥,不需要设备 ID 或显示名称。
  • Health Connect:使用 Changes Token 每 15 秒做一次轻量变化检查,变化后自动读取当天心率/步数并接入 Alive 身体状态上报。
  • 存活状态:打开应用或切换开关时,以低频、带认证请求头的 POST 上报存活标记。
  • 全局服务器配置:所有服务共用服务器地址和密钥,各服务保留独立设备 ID。
  • Miuix 与 Material 两套界面,支持系统深浅色及动态配色。
  • 会话日志只保存在应用运行期间,可手动导出;应用结束后不会长期保存日志。
  • 配置支持导入和导出。

除存活状态外,所有服务和总开关默认关闭。源码中不包含服务器地址、密钥或签名文件。

系统要求

  • 最低 SDK:API 26(Android 8.0)
  • 目标 SDK:API 37
  • 编译 SDK:API 37
  • Gradle:9.3.1(已包含 Wrapper)
  • Android Gradle Plugin:9.1.1
  • Kotlin:2.4.0
  • JDK:17 或更高版本,推荐使用 Android Studio 自带的 JDK

项目未设置 maxSdkVersion,不会主动阻止在高于 API 37 的系统上安装,但新系统仍需要单独进行兼容性测试。

从源码构建

使用 Android Studio

  1. 克隆或下载本仓库。
  2. 用 Android Studio 打开仓库根目录。
  3. 在 SDK Manager 中安装 Android SDK Platform 37。
  4. 等待 Gradle Sync 完成。local.properties 会由 Android Studio 按本机 SDK 路径生成,不应提交到 Git。
  5. 选择 app 配置并运行,或使用 Build > Build APK(s) 生成调试包。

使用命令行

Windows:

gradlew.bat assembleDebug

Linux 或 macOS:

chmod +x gradlew
./gradlew assembleDebug

调试 APK 位于:

app/build/outputs/apk/debug/app-debug.apk

首次构建需要联网下载 Gradle 与 Maven 依赖。

构建正式版本

仓库不包含任何签名密钥,Release 构建也不会使用公共调试密钥签名。请在 Android Studio 中选择 Build > Generate Signed App Bundle or APK,创建或选择自己的 keystore 后生成正式 APK。

请妥善备份 keystore、别名和密码。以后发布相同应用 ID 的升级包必须继续使用同一签名;不要把 keystore 或密码提交到仓库。

首次使用

  1. 在介绍页填写统一的服务器地址和密钥,也可以跳过后在设置页填写。
  2. 按需要授予后台运行、应用列表、通知监听和无障碍权限。
  3. 进入设置页打开总开关。
  4. 进入需要使用的上报服务,填写独立设备 ID、显示名称并启用服务。
  5. 在日志页检查读取结果、HTTP 请求与响应。

身体状态按所选来源申请附近设备、身体活动或 Health Connect 权限。BLE 心率要求设备支持标准 Heart Rate Service 并开启广播;后台 Health Connect 同步还需要设备支持并授权后台健康数据读取。

上报协议

普通状态使用 Alive FastAPI 的 JSON POST。密钥仅放在请求头,不出现在 URL 或 JSON 正文:

POST {server}/api/device/set
Content-Type: application/json
Authorization: Bearer {secret}
{
  "id": "device-id",
  "show_name": "设备名称",
  "using": true,
  "status": "当前应用名称",
  "fields": {
    "battery": 82,
    "charging": false,
    "network_type": "Wi‑Fi",
    "platform": "Android 16",
    "app_package": "com.example.app",
    "app_icon_url": "/app-icons/example.png"
  }
}

屏幕关闭或服务停止时使用相同接口,并发送 using: false 与空状态。

当前应用图标按需发送到 POST {server}/api/device/app-icon,同样使用 Authorization 请求头。服务端以 SHA-256 去重保存。

存活状态使用:

POST {server}/api/status/set
Authorization: Bearer {secret}
Content-Type: application/json

正文为 {"status": 0}(活着)或 {"status": 1}(似了)。旧 v4 的 /device/set、/set?secret=...、正文 secret 和 app_name 协议不再使用。

权限与隐私

  • 无障碍服务仅使用活动窗口所属应用的包名,不读取或上报窗口文字内容。
  • 通知监听权限允许系统向应用提供通知,但代码只处理媒体通知与 MediaSession 信息,忽略普通通知内容。
  • 应用列表权限用于把包名解析为用户可识别的应用名称,并提供监听应用选择列表。
  • 当前应用图标会上传到用户自己配置的 Alive 服务器;只在该应用第一次成为前台时上传。
  • 蓝牙权限用于扫描并连接标准心率广播设备。
  • 身体活动权限用于读取手机本地步数传感器。
  • Health Connect 权限仅在用户主动授权后读取心率和步数。
  • 本地音乐目录通过 Android 系统目录选择器授权;只匹配当前播放歌曲,支持 FLAC、MP3、M4A、WAV、OGG、OPUS,不会批量上传整个目录。
  • 网络请求只发送到用户填写的服务器;项目不包含统计、广告或第三方分析 SDK。
  • 配置保存在 Android 应用私有存储中。导出配置可能包含服务器密钥,请勿公开分享导出的配置文件。

项目结构

AliveClient/
├─ app/
│  ├─ build.gradle
│  └─ src/main/
│     ├─ AndroidManifest.xml
│     ├─ java/github/univers629/aliveclient/
│     └─ res/
├─ gradle/wrapper/
├─ build.gradle
├─ settings.gradle
├─ gradle.properties
├─ gradlew
├─ gradlew.bat
├─ LICENSE
├─ NOTICE
└─ README.md

致谢

  • compose-miuix-ui/miuix — Miuix Compose 界面组件。
  • AndroidX、Jetpack Compose、Health Connect 与 Kotlin 项目贡献者。

许可证

本项目采用 Apache License 2.0 开源。第三方组件仍分别受其自身许可证约束,详见 NOTICE。

About

一个可扩展的 Android 状态上报客户端

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages