起初我真的想过自己单独写一套来着,后来发现
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