这里写自定义目录标题
uiautomator 横向截屏异常解决
在使用uiautomator2 同时控制多台手机时,发现部分手机截图有问题。
横屏截图依旧是竖过来的。但群控工具上实时画面是正常的。
正常情况下,向ATX-agent 发送 rotation请求,minicap就会重启进行旋转截图。
看 uiautomator2 源码发现截图的原理是 向手机上的ATX-agent发送请求,拿到图片。
def screenshot_uri(self):
print(self._host, self._port)
#http://10.12.200.48:7912/screenshot/0?minicap=true
return 'http://%s:%d/screenshot/0' % (self._host, self._port)
之后又看了ATX-agent的源码
// android emulator use screencap
// then minicap when binary and .so exists
// then uiautomator when service(uiautomator) is running
// last screencap
method := "screencap"
if getCachedProperty("ro.product.cpu.abi") == "x86" {
// android emulator
method = "screencap"
} else if fileExists("/data/local/tmp/minicap") && fileExists("/data/local/tmp/minicap.so") && r.FormValue("minicap") != "false" && strings.ToLower(getCachedProperty("ro.product.manufacturer")) != "meizu" {
method = "minicap"
} else if service.Running("uiautomator") {
method = "uiautomator"
}
我猜大致的意思就是uiautomator2的截图接口有三张。并不一定是minicap的图片,
因为在abdshell 看进程 minicap进程是正常的,带有旋转角度90的。
但是截屏的宽高是异常的。所以决定要 根据角度决定宽高。
重写了uiautomator2 一个新的截图方法(按照里面xpath.py的代码写的),代码如下
def minicapscreenshot(self,