远程软件
方案变更说明(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_* 符号导出正确 |
||
|---|---|---|
| .cargo | ||
| agent | ||
| agent-core | ||
| android-ffi | ||
| common | ||
| linux-agent | ||
| scripts | ||
| tools | ||
| vendor/nvenc | ||
| viewer | ||
| viewer-core | ||
| .gitattributes | ||
| .gitignore | ||
| B侧设计文档.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| Git协作规范.md | ||
| README.md | ||
| 借鉴映射与落地规范.md | ||
| 多平台架构设计.md | ||
| 打洞与信令设计.md | ||
| 打洞验证记录.md | ||
| 构建运行手册.md | ||
mvp-remote
自研远程桌面控制软件(办公场景),技术路线参考网易 UU 远程逆向分析结论。
架构
| Crate | 角色 | 说明 |
|---|---|---|
common |
协议库 | 控制消息 / 视频帧线格式,三端共享契约 |
agent |
被控端 | DXGI 屏幕采集 + openh264(H.264) 编码 + QUIC 服务 + SendInput 键鼠注入 |
viewer |
主控端 | QUIC 客户端 + openh264 解码 + minifb 渲染 + 键鼠采集 + 延迟 HUD |
构建
cargo build --release
产物:target/release/agent.exe(被控端)、viewer.exe(主控端),需附带 3 个 mingw 运行库 DLL(libstdc++-6 / libgcc_s_seh-1 / libwinpthread-1)。
运行
# 被控机
agent.exe --port 47800 --code 123456
# 主控机
viewer.exe --addr <被控机IP> --port 47800 --code 123456
详见《构建运行手册.md》、《Git协作规范.md》与《打洞与信令设计.md》。