最近一直在研究鸿蒙的投屏,之前研究了一番: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、以上可用于投屏、远程真机等场景,欢迎技术交流,可关注微信公众号:鼬测试


↙↙↙阅读原文可查看相关链接,并与作者交流