type
status
date
slug
summary
tags
category
icon
password
comment
本文介绍了一个轻量的安卓自动测试输入工具。
droidbot
honeynet • Updated Dec 18, 2024
工具设计
- 首先需要一个安卓设备(模拟器或其他设备)通过adb(需要下载)与电脑连接。
- 我们采用了一个Adapter模块处理一些低级问题,例如兼容性,连接维持,屏幕大小,指令的发送,输出处理等等。
Adapter是我们测试环境和测试算法的一道桥梁,它能够监测设备的状态信息,并将其结构化用于测试算法,另一方面,它能将算法的测试输入转化成适用设备的指令。
- 其次,我们采用Brain模块接受设备信息并进行处理
具体实现
轻量的监测和输入模型
通过adb获取的数据可分为三类:
- GUI信息:记录屏幕的截图和UI的层次结构。
- 进程信息:利用ps指令监测系统级进程,利用dumpsys指令监测app级的相关进程。
- 日志:包括测试输入触发的method方法以及app日志,可通过logcat召回。
其中输入可以是触摸滚动,文件上传,传感器等…并提供了一系列方便的API用于信息获取和测试输入。
动态的模型构建
模型其实是一个有向图,基于运行监测的信息动态构建。其中,图的节点记录了一个UI的信息和运行的进程信息,边记录了测试输入触发状态转换的方法和详细日志;当两个UI内容不一致时视为不同节点。
量化测试输入的有效性
我们可以通过方法追踪统计每个输入使用的app和sys方法,还可以统计敏感行为的触发个数。
源码解读(结合AutoDroid)
- droidbot/device.py调用了adapter模块中的许多底层的方法,例如连接,信息的获取等等,其中调用的get_views()方法利用adapter/droidbot_app.py中实现的Accessibility去获取view的html信息(应该是这样?调试还没有验证出结果)
- droidbot/device_state.py下,有许多状态转换的方法,这里会对state进行解析,构建view树,并得到可能的输入(input,click等等)
- device会利用input_policy.py中的prompt和LLM接口,结合上下文去完成思考,做出行动
- droidbot/rl/action.py可以结合agent指令执行任务
滤去节点,合并
- Author:E1ainay
- URL:https://e1ainay.top/article/DroidBot
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts
Attacking Vision-Language Computer Agents via Pop-ups
Enabling Conversational Interaction with Mobile UI using Large Language Models
LlamaTouch: A Faithful and Scalable Testbed for Mobile UI Task Automation
PERSONAL LLM AGENTS: INSIGHTS AND SURVEY ABOUT THE CAPABILITY, EFFICIENCY AND SECURITY
AutoDroid: LLM-powered Task Automation in Android