Files
xsynergy-android/docs/dev-plan.md
chaoq 202ebef35d add docs folder.
Signed-off-by: chaoq <chaoq@gxtech.ltd>
2025-09-17 15:55:45 +08:00

285 lines
10 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.

## 实现步骤
阶段1基础架构和登录
**目标**:搭建项目基础架构,实现用户登录功能
**验收标准**
- [ ] 项目能正常编译运行,无构建错误
- [ ] MVVM架构清晰ViewModel与UI分离
- [ ] 网络请求能正常访问测试API
- [ ] Room数据库能正常读写用户数据
- [ ] 登录界面UI完整手机号输入和验证码功能正常
- [ ] 登录成功后可跳转至主界面,失败有明确提示
- [ ] 用户会话能在应用重启后保持
**测试**:单元测试通过,登录流程测试通过
阶段2实时通信基础
**目标**集成LiveKit实现基础音视频通话
**验收标准**
- [ ] LiveKit库集成成功无版本冲突
- [ ] 音视频权限申请流程完整,用户授权处理正确
- [ ] 本地摄像头预览正常显示,画面清晰无卡顿
- [ ] 能成功连接到LiveKit测试房间
- [ ] 基础通话功能正常,可正常开启/关闭音视频
- [ ] 网络状态变化时有一定容错处理
**测试**LiveKit连接测试通过音视频权限测试通过
阶段3协作会话
**目标**:实现完整的会议管理和控制功能
**验收标准**
- [ ] 会议发起界面完整,能输入会议主题和设置
- [ ] 加入会议功能正常,支持邀请码和链接加入
- [ ] 参会者列表实时显示,能显示在线状态
- [ ] 音视频控制按钮响应及时,状态显示正确
- [ ] 会议邀请码生成正确,可被其他用户成功使用
- [ ] 简单录制功能正常,能保存录制文件
- [ ] 会议结束处理完整,资源释放正确
**测试**:端到端会议测试通过,参会者管理测试通过
阶段4AR环境集成
**目标**集成ARCore实现基础AR功能
**验收标准**
- [ ] ARCore v1.50.0依赖配置正确,无版本冲突
- [ ] AR权限申请处理完整用户拒绝时有降级方案
- [ ] AR场景能正常初始化相机画面显示正常
- [ ] 平面检测功能正常,能识别水平和垂直平面
- [ ] 点击交互响应及时,能在检测到的平面上创建锚点
- [ ] 在低端设备上有适当的降级处理
- [ ] AR场景切换和退出时资源释放正确
**测试**ARCore兼容性测试通过平面检测测试通过
阶段5AR标注工具
**目标**实现完整的AR标注功能
**验收标准**
- [ ] 箭头标注能准确放置在AR空间中位置稳定
- [ ] 画笔涂鸦流畅,支持不同颜色和粗细
- [ ] 矩形框选工具能准确框选目标区域
- [ ] 激光笔指示实时响应,移动平滑
- [ ] 清除标注功能完整,能清除单个或全部标注
- [ ] 标注在不同设备间同步位置准确
- [ ] 标注能稳定跟随AR场景移动无明显漂移
**测试**AR标注同步测试通过标注稳定性测试通过
阶段6协作增强
**目标**:增强协作功能,支持白板、屏幕共享等
**验收标准**
- [ ] 白板模式切换流畅,界面响应及时
- [ ] 屏幕共享功能正常,能捕获和传输屏幕内容
- [ ] 文件发送/接收功能完整,支持常见格式
- [ ] 颜色选择器交互友好,支持多种颜色选择
- [ ] 撤销/重做功能正常,操作历史记录完整
- [ ] 白板内容能实时同步给所有参会者
- [ ] 文件传输过程有进度显示,支持断点续传
**测试**:白板协作功能测试通过,文件传输完整性测试通过
阶段7AI能力集成
**目标**集成AI服务提供智能化功能
**验收标准**
- [ ] 语音转文字API调用正常转换准确率>90%
- [ ] 实时字幕显示及时,延迟<3秒
- [ ] 会议纪要生成功能完整包含关键信息
- [ ] AI知识库查询响应及时结果相关度高
- [ ] AI服务异常时有适当的错误处理
- [ ] 用户可控制AI功能的开启/关闭
- [ ] AI处理过程有明确的进度和状态提示
**测试**AI服务集成测试通过语音识别准确率测试通过
阶段8优化和兼容性
**目标**优化性能提升用户体验
**验收标准**
- [ ] 应用启动时间<3秒界面切换流畅
- [ ] 音视频通话延迟<200ms画质清晰
- [ ] AR渲染帧率>30fps标注稳定无漂移
- [ ] 内存占用合理,无内存泄漏
- [ ] 电池消耗优化,正常使用下耗电合理
- [ ] 网络自适应良好弱网环境下功能降级graceful
- [ ] 支持多种设备,从低端到高端都有良好体验
- [ ] 崩溃率<0.1%异常处理完善
**测试**性能压力测试通过设备兼容性测试通过
## 技术挑战与解决方案
挑战1LiveKit连接和房间管理
- 问题房间连接失败网络适配断线重连
- 解决方案使用LiveKit 2.x的自动重连机制ConnectionQuality API监控网络状态
挑战2ARCore v1.50.0新特性适配
- 问题新版本ARCore API变化性能优化要求
- 解决方案使用ARCore 1.50.0的增强命中测试和光照估计功能
挑战3多端标注同步
- 问题不同设备看到的标注位置不一致
- 解决方案使用AR锚点和时间戳同步
挑战4性能优化
- 问题AR+视频通话耗电严重
- 解决方案动态调整帧率和码率
挑战5设备兼容性
- 问题低端设备不支持ARCore
- 解决方案功能降级仅使用2D标注
## 具体实现细节
Gradle依赖配置
dependencies {
// UI
implementation 'androidx.compose.ui:ui:1.5.4'
implementation 'androidx.compose.material3:material3:1.1.2'
// LiveKit
implementation 'io.livekit:livekit-android:2.20.2'
// AR
implementation 'com.google.ar:core:1.50.0'
// 网络
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
// 本地存储
implementation 'androidx.room:room-runtime:2.6.1'
// 权限
implementation 'pub.devrel:easypermissions:3.0.0'
}
核心组件示例
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
SynergyLensTheme {
MainNavigation()
}
}
}
}
@Composable
fun CallScreen(
room: Room,
onAnnotationClick: () -> Unit
) {
val room by rememberLiveKitRoom()
val remoteParticipants by room.remoteParticipants.collectAsState()
val currentParticipant = remoteParticipants.values.firstOrNull()
Box(modifier = Modifier.fillMaxSize()) {
// 视频渲染 - 使用最新的VideoRenderer组件
currentParticipant?.let { participant ->
VideoRenderer(
participant = participant,
modifier = Modifier.fillMaxSize()
)
}
// 控制按钮
CallControls(
room = room,
onAnnotationClick = onAnnotationClick
)
}
}
class LiveKitManager(applicationContext: Context) {
private val room = LiveKit.create(
appContext = applicationContext,
options = RoomOptions(
adaptiveStream = true,
dynacast = true,
// 新版本特性:端到端加密
e2eeOptions = E2EEOptions(
keyProvider = BaseKeyProvider("your-encryption-key")
)
)
)
suspend fun connectToRoom(url: String, token: String) {
try {
room.connect(url, token)
// 新版本API使用TrackPublication来管理音视频
room.localParticipant.setMicrophoneEnabled(true)
room.localParticipant.setCameraEnabled(true)
} catch (e: Exception) {
// 新版本错误处理
when (e) {
is ConnectException -> println("连接失败: ${e.message}")
is AuthenticationException -> println("认证失败")
else -> println("其他错误: ${e.message}")
}
}
}
fun disconnect() {
room.disconnect()
}
fun release() {
room.release()
}
}
class ARAnnotationManager(
private val arFragment: ArFragment
) {
fun placeArrow(x: Float, y: Float) {
// 使用ARCore v1.50.0增强的命中测试
val frame = arFragment.arSceneView.arFrame ?: return
val hitResults = frame.hitTest(x, y)
val hitResult = hitResults.firstOrNull {
it.trackable is Plane && (it.trackable as Plane).isPoseInPolygon(it.hitPose)
} ?: return
val anchor = hitResult.createAnchor()
val anchorNode = AnchorNode(anchor)
val arrowNode = createArrowNode()
anchorNode.addChild(arrowNode)
arFragment.arSceneView.scene.addChild(anchorNode)
}
fun createArrowNode(): Node {
// 使用ARCore 1.50.0的光照估计创建更真实的渲染
return Node().apply {
renderable = ShapeFactory.makeCylinder(
0.01f, 0.1f,
Vector3(0f, 0.05f, 0f),
MaterialFactory.makeOpaqueWithColor(
context,
Color(1.0f, 0.0f, 0.0f)
)
)
}
}
}
## 测试策略
单元测试:
- 登录流程测试
- LiveKit房间连接测试
- LiveKit TrackPublication管理测试
- AR标注创建测试
集成测试:
- 端到端通话测试
- AR标注同步测试
- 设备兼容性测试
UI测试
- 界面交互测试
- 控制按钮功能测试
## 部署要求
客户端要求:
- 最小SDK Android 8.0 (API 26)
- 目标SDK Android 16 (API 36)
- 权限: CAMERA, RECORD_AUDIO, INTERNET
- 可选: ARCore支持设备 (v1.50.0+)
服务端接口:
- 用户认证API
- LiveKit 2.x房间管理
- AI服务API (语音转文字等)
- 需要支持E2EE端到端加密