Feat: Android client Phase 0-3 full implementation #3
Reference in New Issue
Block a user
Delete Branch "feature/android-remote-control"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
为 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() 动态适配
a8684753a9to45553ec5b6