adb-getevent使用

getevent

adb shell
getevent --help

获取触屏接收设备,操作界面,使用getevent -t,查看触屏输入设备 /dev/input/eventn
getevent -t

[  100917.991550] /dev/input/event4: 0000 0000 00000000

事件录制
adb shell getevent -t /dev/input/eventn > getevent.txt

[时间戳] 事件类型(16进制) 事件码(16进制) 事件值(16进制)
[    3929.717229] 0001 014a 00000001

sendevent

sendevent /dev/input/eventn 事件类型(10进制) 事件码(10进制) 事件值(10进制)
sendevent /dev/input/eventn 1 330 1

# getevent.txt 转send.sh
class Playback(object):
    touch_device = "/dev/input/eventn"

    def get_sendevent_sh(self, getevent_file):
        # 若两个sendevent时间差 < 0.1s 认为在同一个操作内
        mindiff = 0.1
        data = {}
        with open(getevent_file, mode="r", encoding="utf-8") as f:
            for line in f.readlines():
                matched = re.findall(r"[\d.a-f]+", line, re.I)
                if len(matched) == 4:
                    event_timestamp, event_type, event_code, event_value = matched
                    event_type = self.hex_to_dec(event_type)
                    event_code = self.hex_to_dec(event_code)
                    event_value = self.hex_to_dec(event_value)
                    item = [str(event_type), str(event_code), str(event_value)]
                    if event_timestamp not in data:
                        data[event_timestamp] = [item]
                    else:
                        data[event_timestamp].append(item)
        # 写sendevent文件
        out_file = os.path.join(os.path.dirname(getevent_file), "sendevent.sh")
        last_event_timestamp = None
        items = []

        def sendevent_line(event_list):
            line = "\n".join(["" + "sendevent " + f"{self.touch_device} " + " ".join(items) for items in event_list])
            return line

        if len(data) == 0:
            raise Exception("no event")
        with open(out_file, mode="w+", encoding="utf-8") as f:
            for event_timestamp, event_list in data.items():
                last_event_timestamp = last_event_timestamp or event_timestamp
                if last_event_timestamp != event_timestamp:
                    diff = float(event_timestamp) - float(last_event_timestamp)
                    if diff > mindiff:
                        line = sendevent_line(items)
                        f.write(f"{line}\n")
                        f.write(f"sleep {diff}; ")
                        items = event_list
                    else:
                        items.extend(event_list)
                else:
                    items.extend(event_list)
                last_event_timestamp = event_timestamp
            line = sendevent_line(items)
            f.write(f"{line}\n")
            f.write(f"exit 0\n")

将sendevent.sh push 到/data/local/tmp目录下执行

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值