方案变更说明(A2 落地修正):原裁决选 UniFFI,但实查 Maven Central 与 maven.mozilla.org 均无 uniffi Kotlin 运行时构件(404),自编译发布成本超过收益。 改为裸 JNI:阶段 0(真机)已验证该链路,接口刻意保持窄(连接/取帧/发输入/销毁), 将来若引入 UniFFI 只替换本层。 线程与锁纪律(决定接口形态): - nativeNextFrame 等帧期间不持会话锁(clone Arc<Session> 后即释放), 桌面静止 500ms 帧间隔不会卡住 UI 线程的输入调用 - destroy 前必须先停解码线程,Kotlin 侧顺序纪律保证(已登记风险清单) - 句柄 = Box 裸指针(永不为 0),destroy 后置 0 帧返回约定:byte[] = [keyframe 标志 1][seq 8][ts 8][w 4][h 4][Annex-B payload], 定长 25 字节头,Kotlin 切片零 JNI 往返。 viewer-core 适配:Session.frames 改 Arc<tokio Mutex>,next_frame 取 &self, 使解码线程与输入线程可并发借用同一 Session。 验证: - 桌面 cargo build -p android-ffi 零警告 - cargo ndk -t arm64-v8a --release:quinn/ring/rustls 交叉编译全部通过 (消除阶段 1 最大未知:QUIC 栈能否编到 Android) - libandroidffi.so 4.2MB,10 个 Java_com_verify_remote_RustBridge_* 符号导出正确 |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.toml | ||