# 00 — 项目概述与架构 > 对应主项目 Phase 5(v1.5 → v2.0)Android 客户端 > 主项目文档:`../../docs/dev-plan/04-voice-system-plan.md` --- ## 1. 项目定位 Cyrene for Android 是昔涟的官方 Android 客户端,定位为 **可替换系统自带语音助手的智能体 APP**(替代 Google Assistant / Bixby)。 核心差异点: - 不是传统 APP(以桌面图标为主要入口),而是**系统级语音助手** - 除常规全屏 Activity 外,通过 `VoiceInteractionSession` 提供悬浮式覆盖层交互 - 支持息屏热词唤醒、长按 Home / 电源键呼出 ## 2. 技术栈 | 层 | 技术 | 版本要求 | |----|------|---------| | 语言 | Kotlin | 2.0+ | | UI 框架 | Jetpack Compose + Material Design 3 | BOM 2025+ | | 构建 | Gradle (Kotlin DSL) | 8.7+ | | 架构模式 | MVVM + Repository | — | | 依赖注入 | Hilt / Koin (待定) | — | | 网络 | Retrofit + OkHttp | — | | 实时通信 | OkHttp WebSocket | — | | 本地存储 | Room (SQLite) + DataStore | — | | 推送 | FCM (Firebase Cloud Messaging) | — | | 系统语音 | VoiceInteractionService | API 23+ | | 热词唤醒 | Always-On Hotword Detection | API 23+ | | 语音识别 | 服务端 (Whisper API) + 本地兜底 | — | ## 3. 最低系统要求 | 项目 | 要求 | |------|------| | minSdk | 26 (Android 8.0) | | targetSdk | 35+ | | compileSdk | 35+ | | JDK | 17 | | Gradle | 8.7+ | 注:`VoiceInteractionService` 基础 API 要求 23,`AssistAction` 热词唤醒要求 23。minSdk 设为 26 以覆盖绝大多数活跃设备并简化兼容性。 ## 4. 项目结构 ``` android/ ├── app/ │ ├── src/main/ │ │ ├── java/com/cyrene/app/ │ │ │ ├── CyreneApplication.kt # Application 初始化 │ │ │ ├── MainActivity.kt # 全屏主界面 (桌面图标入口) │ │ │ ├── ui/ │ │ │ │ ├── theme/ # MD3 主题 (Color / Type / Shape) │ │ │ │ ├── screens/ # 全屏页面 (Compose) │ │ │ │ │ ├── chat/ # 对话页 │ │ │ │ │ ├── home/ # 首页 / IoT 面板 │ │ │ │ │ ├── settings/ # 设置页 │ │ │ │ │ └── login/ # 登录/注册 │ │ │ │ ├── overlay/ # 悬浮窗对话界面 (VoiceInteractionSession) │ │ │ │ └── components/ # 共享组件库 │ │ │ ├── viewmodel/ # ViewModel 层 │ │ │ ├── domain/ # 领域层 (UseCase / Repository 接口) │ │ │ ├── data/ │ │ │ │ ├── remote/ # API 接口定义 + DTO │ │ │ │ ├── local/ # Room DAO + DataStore │ │ │ │ └── repository/ # Repository 实现 │ │ │ ├── service/ │ │ │ │ ├── CyreneVoiceInteractionService.kt │ │ │ │ ├── CyreneVoiceInteractionSession.kt │ │ │ │ ├── CyreneAssistService.kt │ │ │ │ └── WebSocketService.kt │ │ │ ├── voice/ │ │ │ │ ├── hotword/ # 热词唤醒引擎 │ │ │ │ ├── stt/ # 语音识别客户端 │ │ │ │ └── tts/ # 语音合成客户端 │ │ │ ├── di/ # DI 模块定义 │ │ │ └── util/ # 工具类 │ │ ├── res/ # 资源文件 │ │ └── AndroidManifest.xml │ └── build.gradle.kts ├── gradle/ │ ├── libs.versions.toml # 版本目录 │ └── wrapper/ ├── build.gradle.kts # 根构建脚本 ├── settings.gradle.kts └── gradle.properties ``` ## 5. 架构分层 ``` ┌──────────────────────────────────────────────┐ │ UI Layer (Compose) │ │ ├─ Screens (全屏 Activity) │ │ └─ Overlay (VoiceInteractionSession 悬浮窗) │ ├──────────────────────────────────────────────┤ │ ViewModel Layer │ │ ├─ ChatViewModel │ │ ├─ HomeViewModel (IoT) │ │ ├─ SettingsViewModel │ │ └─ OverlayViewModel │ ├──────────────────────────────────────────────┤ │ Domain Layer │ │ ├─ UseCase (SendMessage, ControlIoT, ...) │ │ └─ Repository Interfaces │ ├──────────────────────────────────────────────┤ │ Data Layer │ │ ├─ Remote: Retrofit API + WebSocket │ │ ├─ Local: Room + DataStore │ │ └─ Repository Implementation │ ├──────────────────────────────────────────────┤ │ Service Layer │ │ ├─ VoiceInteractionService (系统助手) │ │ ├─ WebSocketService (长连接) │ │ └─ FCMMessagingService (推送) │ └──────────────────────────────────────────────┘ ``` UI 层和 Service 层通过 ViewModel 解耦——全屏 Activity 和悬浮窗 Overlay 复用同一组 ViewModel,只是 UI 布局不同。 ## 6. 与后端的关系 ``` Android Client │ ├─ HTTP REST ──────────► Gateway (:8080) # 登录、CRUD、配置 ├─ WebSocket ──────────► Gateway (:8080) # 实时对话、IoT 状态推送 ├─ STT Audio ──────────► Voice Service (:8093) # 语音识别 └─ TTS Stream ◄──────── Voice Service (:8093) # 语音合成 ``` WebSocket 长连接是核心通信通道:对话消息、通知、IoT 状态广播均通过同一连接。HTTP 仅用于一次性操作(登录、文件上传/下载)。 ## 7. 关键设计决策 | 决策 | 选择 | 理由 | |------|------|------| | UI 框架 | Jetpack Compose + MD3 | 声明式 UI,与悬浮窗的 ComposeView 集成简单 | | 架构 | MVVM + Repository | Google 官方推荐,ViewModel 可在 Activity 和 Session 间复用 | | 语音框架 | VoiceInteractionService(系统 API) | 原生支持替换系统助手,无需自定义悬浮窗权限 | | 热词方案 | 系统 Always-On Hotword API | 息屏低功耗监听,不用自建音频采集 | | 网络 | OkHttp WebSocket | 比 FCM 更实时,与主项目 Gateway 已有 WS Hub 对应 | | 最低 API | 26 | 覆盖 95%+ 活跃设备,VoiceInteractionService 兼容 | ## 8. 排期参考 对应主项目路线图: ``` 2026 Q4 ─ v1.3 多平台接入(前置依赖) 2027 Q1 ─ v1.8 语音模型训练完成(后端依赖) 2027 Q2 ─ v2.0 开始 Android 客户端开发 2027 Q3 ─ v2.3 语音助手 APP MVP 版本 2027 Q4 ─ v3.0 APP 上架(Google Play / 国内应用商店) ```