Skip to content

Android 客户端

EdgeChat 当前以 capacitor/ 作为 Android 主要发行版:APK 直接内置 Vue Web UI,并只用少量 Kotlin 对接系统能力。android/ 原生 Compose 客户端已暂时弃用,不再作为默认发行版,但源码与独立 CI 暂时保留。

Web UI + Capacitor(主要发行版)

Capacitor 客户端位于 capacitor/,应用 ID 为 com.aozorae.edgechat.web。Vue 继续负责登录、会话、管理后台、实时消息和媒体界面;Kotlin 插件只实现 Android 文件选择、麦克风和通知权限、通知会话跳转,以及交给系统打开外部链接。

安装与连接

  1. 从 GitHub Releases 下载 edgechat-*.apk
  2. 使用 SHA256SUMS.txt 核对文件。
  3. 允许系统安装来自浏览器或文件管理器的应用。
  4. 在登录页输入 EdgeChat 服务器的 HTTPS 根地址、用户名和密码。
  5. 地址验证成功后,客户端会保存该实例,后续 HTTP、附件和 WebSocket 均连接它。

APK 内只打包本地 Web 资源,不绑定固定部署。退出登录后可以修改地址,切换实例时会清理旧实例令牌。前端资源和 Android Manifest 均内置在 APK 中,因此前端或权限相关改动必须重新构建并安装新版;只更新服务端不会更新客户端内置页面。

系统能力与限制

  • 文件通过 Storage Access Framework 选择,不申请整盘存储权限
  • Android 13 及以上在用户开启通知时申请系统通知权限
  • 首次录音时等待系统麦克风授权;授权等待可取消,切到后台会自动取消
  • 拒绝麦克风权限后,可在“设置 > 应用 > EdgeChat > 权限 > 麦克风”重新允许再重试
  • 复用浏览器会话与前端实时链路,不包含 Room 离线数据库、WorkManager Outbox 或 FCM
  • 应用停止接收消息时不保证后台即时通知

本地构建

使用 JDK 21 和 Android SDK 36:

bash
npm ci
npm run build:capacitor

Debug APK 位于 capacitor/android/app/build/outputs/apk/debug/app-debug.apk。GitHub Capacitor Android CI 会构建同一套通用 APK,并上传 edgechat-capacitor-debug artifact。

签名发布

推送 android-v* 标签或手动运行 GitHub Android Release。工作流读取四个 ANDROID_KEYSTORE_* Secrets,构建内置当前 Vue 前端的签名 APK 与 AAB,并生成 SHA256SUMS.txt。签名 keystore 决定后续覆盖安装能力,必须离线保留;禁止提交 signing.properties、keystore 或任何密码。

原生 Compose(暂时弃用)

原生客户端位于 android/,使用 Kotlin、Jetpack Compose、Material 3、Room、WorkManager、Hilt、Retrofit 和 OkHttp,应用 ID 为 com.aozorae.edgechat,因此仍可与 Capacitor 版并行安装。它与 Vue 网页完全分离,只共享 /api/v1、稳定错误码和品牌资源。

该实现当前只保留源码、API v1 契约和 .github/workflows/android-ci.yml 验证,不再由 Android Release 工作流发布。历史包仍可用于验证,但新安装和日常更新应选择 Capacitor 版。

bash
cd android
./gradlew testDebugUnitTest lintDebug assembleDebug

Debug APK 位于 android/app/build/outputs/apk/debug/app-debug.apk