Files
tongxunruanjian/docs/acceptance/android-livekit-call.md
T
2026-08-20 07:59:02 +08:00

121 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# B-204 Android 语音通话迁移与构建验证
分支:`agent/agent/3a58b06e`
施工基线 HEAD`2a817e77d899d7af66ebfecef382b55d872c1285`
越界对比基线:`e26abad`
本卡只做 Android 一对一语音通话迁移与可构建验证,不改 PC 通话、不部署、不发布、不换标。
**结论:Android debug/release 构建通过,状态机替身测试通过。缺有效账号、ARM64 真机和 LiveKit 实测,不得写成通话运行验收通过。**
## 配置入口
| 项 | 位置 | 值 |
|---|---|---|
| 开关 | `mobile-next/lib/company/feature_flags.dart` `FeatureFlags.livekitCall` | 跟随 `LiveKitCallConfig.enabled` |
| 配置门 | `mobile-next/lib/company/rtc/livekit_call_config.dart` | `shipped && endpointsReady` |
| LiveKit | `AppEndpoints.livekitUrl` | `ws://192.168.200.11:17880` |
| 换票 | `POST {authApiBase}/api/rtc_token` | Bearer `imToken`body `{room, identity}` |
| 信令 | 官方 `customType` 200–204 仅在线自定义消息 | 未自建第二套信令,未改 SDK 核心 |
官方 `Apis.getTokenForRTC``/user/rtc/get_token` + `token` 头 + `serverUrl`)与账号服务不兼容。本卡用公司薄适配 `RtcTokenApi` 覆盖 `getRtcCertificate`,缺 `liveURL` 时回落到 `AppEndpoints.livekitUrl`。未改 `account-service/` 与现网端口。
`LiveKitCallConfig.shipped = true` 仅在本卡构建通过后保持开启。若关掉 `endpointsReady`(地址不是 `ws://` / `http`),入口自动隐藏。
## 提交主题(可逐项 `git revert`
从新到旧回退:先本验收记录,再 Token 映射,再通话适配。
| 主题 | SHA | 文件 |
|---|---|---|
| 本验收记录 | 本文件当次提交 | `docs/acceptance/android-livekit-call.md` |
| 通话页 Token 对齐 | `d7f7a6aed213ad7250e7e0da28608d0e312859fb` | `apply_official_styles.dart` |
| 语音通话薄适配与入口 | `3832e080c4cba2ec9a76e1cb5b988bc06f0fd4a3` | `company/rtc/*``im_controller.dart`、聊天/资料入口、`openim_live` 超时/销毁/重连、测试 |
回退示例(新到旧):
```
git revert <本验收提交>
git revert d7f7a6aed213ad7250e7e0da28608d0e312859fb
git revert 3832e080c4cba2ec9a76e1cb5b988bc06f0fd4a3
```
回退不影响 `mobile/``account-service/``config/``scripts/`、现网服务、PC 通话死代码与已发布安装包。
## 环境
- Flutter 3.24.5 / Dart 3.5.4`C:\flutter324`
- Temurin JDK 17.0.20+8`toolchain\jdk17`
- Android SDK:既有 B-95 工具链(build-tools 含 36.0.0compileSdk 34
- `org.gradle.jvmargs=-Xmx4096M`
## 检查与构建
### 状态机替身
```
cd mobile-next
flutter test test/company/rtc_token_mapper_test.dart test/company/call_session_guard_test.dart
```
11 项通过:换票解析(缺 liveURL 回落、`serverUrl`/`liveURL`、失败码)、占线、重复信令、超时取消、销毁释放计时器。
### Dart 定点
- `lib/company/rtc/**``feature_flags.dart``im_controller.dart`**0 error**
- 全量 `flutter analyze`**529 issues**。error 仍为存量(`local_plugin/flutter_download_manager/example` 等),本卡新增文件无 error。
### Android(真实构建)
```
flutter pub get
flutter build apk --debug
flutter build apk --release
```
| 构建 | 结果 | 大小 | SHA256 | 产物 |
|---|---|---|---|---|
| debug | 成功 | 109,405,761 B | `21487F23963DC60189C9181F3B985495ED6EFF7F74C619FCB114E5DB26B259F3` | `mobile-next/build/app/outputs/flutter-apk/app-debug.apk` |
| release | 成功 | 53,284,571 B | `AADFF25F62CC98D60D5EF0C94112C4388027107669A15743D2C1BB16F2245C78` | `mobile-next/build/app/outputs/flutter-apk/app-release.apk` |
元数据(aapt / apksignerrelease):包名 `io.openim.flutter.demo`versionName `3.8.3` / versionCode `180`minSdk 24 / targetSdk 33 / compileSdk 34,仅 `arm64-v8a`label `F-DEMO`。签名 CN=openim,证书 SHA-256 `1f38a82fb3c33be7951fb5d964ef5bd9c6c9bfc084ae1e2a8a40a0d1f44ae1fe`
构建期告警:Flutter Gradle apply-script 弃用;部分依赖 Kotlin metadata 1.8.0 vs 工程预期 1.6.0。均属上游,debug/release 均通过。APK 内嵌时间戳,哈希不可位级复现。
## 越界比对
相对 `2a817e77`:仅上表主题涉及的 `mobile-next/` 与本验收文档。
相对 `e26abad`
- `mobile/``account-service/``config/``scripts/`**零改动**
- `pc-client/src/store/``pc-client/src/layout/MainContentWrap.tsx`、发送/历史链路:**零改动**
- PC 未新增任何通话入口;RTC 死代码按 B-90 保留
## 已测 / 未测
已测(替身或构建):
- 换票响应映射与失败文案
- 占线拒绝第二路、重复信令去重、30s 超时、页面销毁取消计时器
- Android debug/release 可构建
- 入口:单聊顶栏/工具箱/资料页随开关显示;仅音频;语音要麦克风权限,不要摄像头
未测(缺外部条件,禁止写成通过):
- 测试账号:无有效工号+密码,未登录
- Android ARM64 真机:未安装、未点验呼叫/来电/接听/拒绝/取消/挂断
- LiveKit 进房、听筒/扬声器、静音、后台/锁屏返回、异常断开重连的真机表现
- 与旧 `mobile/` 或 PC 的互通(PC 本阶段不建设通话)
最小所需:管理员给两个测试工号;两台 ARM64 真机装 `app-release.apk`;确认 LiveKit `:17880` 与账号服务 `:10010/api/rtc_token` 可用后做一轮双向语音。
## 风险清单
- OpenIM 许可书面结论未落;未换标,label 仍 `F-DEMO`
- 官方 chat 换票协议与现网账号服务不兼容,依赖本卡薄适配;关掉开关即无入口
- LiveKit 使用官方 `livekit_client` 2.2.5 默认重连,真机未测
- APK 仍用上游 openim keystore
- 全量 analyze 存量错误仍在,不作为本卡运行通过依据
功能质检与视觉审核须另排。本卡不宣布语音通话实测通过。