Feat: Android client Phase 0-3 full implementation #3

Merged
yuanyuanxiang merged 1 commits from feature/android-remote-control into main 2026-06-21 21:02:46 +00:00

为 YAMA 新增完整的 Android 客户端,支持将 Android 设备作为受控主机接入现有服务端,实现屏幕实时查看与操作控制。


主要功能

屏幕捕获与推流

MediaProjection + MediaCodec 硬件 H.264 编码,VirtualDisplay Surface 直连编码器(零拷贝)
SPS/PPS 自动拼接到 IDR 帧前,保证服务端解码器可随时初始化
静止画面首帧黑屏修复:forceFirstFrame() 通过临时 resize VirtualDisplay 触发 SurfaceFlinger 强制合成
服务端新增 ComputeAdaptiveLayout() 自适应缩放和信箱黑边,适配竖屏设备

操作控制

AccessibilityService 注入触控手势:单击、拖拽、双击、长按、滚轮
边缘手势映射:左/右滑 → 返回,顶部滑 → 通知/快捷设置,底部滑 → Home/最近任务
键盘全局键:Backspace/ESC → 返回,Home → 主屏,PrtSc → 截图

连接与协议

复用 IOCPClient.cpp、ikcp.c、Buffer.cpp 等共用模块,NDK 直接编译,无需移植
完整实现登录握手、认证状态机、心跳(含 RTT 估算)、多子连接广播
活动窗口上报:通过 JNI 反向调用 getActiveWindow(),上报当前前台包名;锁屏时上报 "Locked"

耗电优化

Android 侧心跳间隔强制下限 30 秒(服务端下发 5 秒时自动截断)
服务端存活超时从 60 秒延长至 120 秒,与 30 秒间隔保持 4 倍余量
长期后台运行耗电与微信后台相当

构建与分发

build_apk.sh:支持 release/debug/clean,自动处理 WSL 路径、NDK 检测、local.properties 备份恢复
Release APK 使用 yama-release.jks 签名,密码通过 YAMA_PWD 环境变量传入,多机编译产物签名一致
R8 minify + shrink,Release APK 约 1.7 MB


服务端改动

commands.h:新增 Android 相关协议字段
2015RemoteDlg.cpp:心跳超时阈值 max(60→120, interval*3);Android 客户端识别与路由
ScreenSpyDlg.cpp:自适应布局,坐标映射修正
WebService.cpp:Web 端 Android 客户端支持
index.html:坐标映射使用 getBoundingClientRect() 动态适配

为 YAMA 新增完整的 Android 客户端,支持将 Android 设备作为受控主机接入现有服务端,实现屏幕实时查看与操作控制。 --- # 主要功能 ## 屏幕捕获与推流 MediaProjection + MediaCodec 硬件 H.264 编码,VirtualDisplay Surface 直连编码器(零拷贝) SPS/PPS 自动拼接到 IDR 帧前,保证服务端解码器可随时初始化 静止画面首帧黑屏修复:forceFirstFrame() 通过临时 resize VirtualDisplay 触发 SurfaceFlinger 强制合成 服务端新增 ComputeAdaptiveLayout() 自适应缩放和信箱黑边,适配竖屏设备 ## 操作控制 AccessibilityService 注入触控手势:单击、拖拽、双击、长按、滚轮 边缘手势映射:左/右滑 → 返回,顶部滑 → 通知/快捷设置,底部滑 → Home/最近任务 键盘全局键:Backspace/ESC → 返回,Home → 主屏,PrtSc → 截图 ## 连接与协议 复用 IOCPClient.cpp、ikcp.c、Buffer.cpp 等共用模块,NDK 直接编译,无需移植 完整实现登录握手、认证状态机、心跳(含 RTT 估算)、多子连接广播 活动窗口上报:通过 JNI 反向调用 getActiveWindow(),上报当前前台包名;锁屏时上报 "Locked" ## 耗电优化 Android 侧心跳间隔强制下限 30 秒(服务端下发 5 秒时自动截断) 服务端存活超时从 60 秒延长至 120 秒,与 30 秒间隔保持 4 倍余量 长期后台运行耗电与微信后台相当 ## 构建与分发 build_apk.sh:支持 release/debug/clean,自动处理 WSL 路径、NDK 检测、local.properties 备份恢复 Release APK 使用 yama-release.jks 签名,密码通过 YAMA_PWD 环境变量传入,多机编译产物签名一致 R8 minify + shrink,Release APK 约 1.7 MB --- # 服务端改动 commands.h:新增 Android 相关协议字段 2015RemoteDlg.cpp:心跳超时阈值 max(60→120, interval*3);Android 客户端识别与路由 ScreenSpyDlg.cpp:自适应布局,坐标映射修正 WebService.cpp:Web 端 Android 客户端支持 index.html:坐标映射使用 getBoundingClientRect() 动态适配
yuanyuanxiang added 1 commit 2026-06-21 21:01:48 +00:00
yuanyuanxiang force-pushed feature/android-remote-control from a8684753a9 to 45553ec5b6 2026-06-21 21:01:48 +00:00 Compare
yuanyuanxiang merged commit 45553ec5b6 into main 2026-06-21 21:02:46 +00:00
yuanyuanxiang deleted branch feature/android-remote-control 2026-06-21 21:02:53 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: yuanyuanxiang/SimpleRemoter#3