最近开发了总有同事抱怨UiAutomator有些界面的空间无法识别,以至于部分功能自动化脚本开发被Block,对此我研究了腾讯之前发布的一个adbui库,这个库是python版的,其中有一个通过ocr的方式来解决UIA开发过程中控件不能识别的问题,于是就想把这个功能移植到UIA的公共库里面。
【注意事项】
1. 该接口需要发送http请求和腾讯的云服务器进行通信,因此,使用该接口时,需保证数据流量或者Wi-Fi连接。
2. 该接口容易受到网速等不可逆因素影响,导致响应速度变慢,所以不适合大规模使用。
3. 该接口如果使用数据流量,会产生一定程度上流量费用。
长话短说,上代码.
首先生成签名工具类:
public class TencentSign {
/**
* 生成 Authorization 签名字段
*
* @param appId
* @param secretId
* @param secretKey
* @param expired
* @return
* @throws Exception
*/
public static String appSign(long appId, String secretId, String secretKey,
long expired) throws Exception {
long now = System.currentTimeMillis() / 1000;
int rdm = Math.abs(new Random().nextInt());
String plainText = String.format("a=%d&k=%s&e=%d&t=%d&r=%d&u=%s&f=", appId,
secretId, expired, now, rdm, "xx");
byte[] hmacDigest = HmacSha1(plainText, secretKey);
byte[] signContent = new byte[hmacDigest.length + plainText.getBytes().length];
System.arraycopy(hmacDigest, 0, signContent, 0, hmacDigest.length);
System.arraycopy(plainText.getBytes(), 0, signContent, hmacDigest.length,
plainText.getBytes().length);
return Base64Encode(signContent);
}
/**
* 生成 base64 编码
*
* @param binaryData
* @return
*/
public static String Base64Encode(byte[] binaryData) {
return Base64.encodeToString(binaryData, Base64.NO_WRAP);
}
/**
* 生成 hmac