android scrcpy 源代码分析,Scrcpy投屏原理浅析-设备控制篇

本文详细分析了Scrcpy如何在无需额外权限的情况下,利用adb高权限快速获取安卓设备屏幕并进行控制。通过adb推送jar文件到设备并启动服务,借助adb端口转发实现设备与PC的连接。Scrcpy通过自定义协议发送控制指令,实现了对设备的点击、滑动等操作。文章还探讨了数据在socket中传输的位运算细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起初我真的想过自己单独写一套来着,后来发现

Scrcpy与vysor是都是投屏中比较优秀的项目了,非侵入性,不需要设备单独

scrcpy启动阶段

它到底是怎么做到执行scrcpy命令,在较短的时间内就立马获取到了安卓设备的屏幕的?并没有向设备申请任何的获取屏幕的权限,并且还能对设备进行较低延迟的控制。

有过使用a

adb

就能直接截取手机屏幕,去掉-p这个开关,更改成>,就可以直接截图并重定向到电脑本地,包括使用screenrecorder命令对手机进行录屏。

以上两个操作明明是会用到截取手机屏幕权限的,但是为什么没有向用户申请就能获取到屏幕?

在scrcpy的wiki中也其实提到了,原因就是adb shell的权限是非常高的,去设备的/system/app/shell也能看到shell.apk的u

所以在scrcpy启动时,将自身sdk中的一个jar上传到了安卓设备上,这个jar并不是

push jar到手机

adb push $sdk/scrcpy-server.jar /data/local/tmp

复制代码

再利用安卓的app_process,直接启动这个jar,不仅是app_process,dalvikvm理论也是能启动的

命令如下

CLASSPATH=/data/local/tmp/scrcpy-server.jar app_process ./ com.genymobile.scrcpy.Server 1.12.1 0 8000000 0 true - true true

复制代码

这样就会

后面的那堆

这个socket为什么能被pc端连接到?

由于adb提供了转发端口:

adb forward tcp:5005 localabstract:scrcpy

#PC上所有5005端口通信数据将被重定向到手机端UNIX类型localabst

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值