最近一直在研究鸿蒙的投屏,之前研究了一番:https://testerhome.com/topics/41418。
后面发现 Hypium 时发现了一个好东西,具体如下:
1、推送一个 so 文件到手机目录/data/local/tmp/agent.so,名称类似:uitest_agent_v1.1.0.so,参考命令:
hdc file send uitest_agent_v1.1.0.so /data/local/tmp/agent.so
2、执行以下命令,加载 so,运行前先杀掉之前的进程(hdc shell kill -9 $(pidof uitest))
hdc shell uitest start-daemon singleness
此时会在手机内部开放一个 8012 端口的类似 jsonrpc(走 tcp socket)
3、使用端口转发到本地电脑:
hdc fport tcp:8012 tcp:8012
4、使用 socket 连接 8012
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('127.0.0.1', 8012))
5、先通过 jsonrpc 创建 driver 实例,参考以下代码:
request_id = datetime.now().strftime("%Y%m%d%H%M%S%f")
params = {
"api": 'Driver.create',
'this': 'Driver#0',
"args": [],
"message_type": "hypium"
}
msg = {
"module": "com.ohos.devicetest.hypiumApiHelper",
"method": "callHypiumApi",
"params": params,
"request_id": request_id
}
6、再发送开始截屏指令
request_id = datetime.now().strftime("%Y%m%d%H%M%S%f")
params = {
"api": 'startCaptureScreen',
"args": [
{
"scale": 0.5
}
]
}
msg = {
"module": "com.ohos.devicetest.hypiumApiHelper",
"method": "Captures",
"params": params,
"request_id": request_id
}
7、以上指令发送完后就会不断收到 JPEG 字节流,自己按照 JPEG 开始结束标志解析显示就可以了
start_flag = b'\xff\xd8'
end_flag = b'\xff\xd9'
8、以上可用于投屏、远程真机等场景,欢迎技术交流,可关注微信公众号:鼬测试