Android 通过腾讯OCR来查找UiAutomator不能识别的控件

针对UiAutomator无法识别的部分Android界面控件,本文介绍了如何利用腾讯的adbui库中的OCR功能进行辅助识别。通过将该功能移植到UIA公共库,可以解决自动化脚本开发中的难题。但需要注意,此方法依赖网络且可能产生流量费用,不适合大规模应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开发了总有同事抱怨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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值