AndroidSDK下的monkeyrunner可以通过python脚本调用api的方式控制设备,实在不想各种语言横插一杠,所以想着用java还写monkeyrunner脚本,不折腾不知道,其实也比较简单。
MonkeyRunner源码分析已经有同学做过了,可以参考:http://blog.csdn.net/zhubaitian/article/category/2598287
Java方式来写类似MonkeyRunner的脚本,主要依赖chimpchat,源码参见:https://code.google.com/p/aster/source/browse/src/com/android/chimpchat/?r=967f7f8cd6249c69e00c6de7ff1b55bd0f51d311。同时我们还是用ddmlib,主要是用于adb连接。
1、对于maven工程,首先我们需要写入这两个库的依赖:
<dependency>
<groupId>net.sf.sociaal</groupId>
<artifactId>chimpchat</artifactId>
<version>22.6.3</version>
</dependency>
<dependency>
<groupId>com.android.tools.ddms</groupId>
<artifactId>ddmlib</artifactId>
<version>24.1.3</version>
</dependency>
2、获取adb连接并添加android设备变更监听器
AndroidDebugBridge.addDeviceChangeListener(new DeviceChangeListener());
AdbBackend adbBackend = new AdbBackend(adbPath,false);
3、 DeviceChangeListener类实现IDeviceChangeListener接口,并在设备连接状态变化时添加自己的处理函数,例如设备连接的时候
@Override
public void deviceConnected(IDevice device) {
logger.info("{} 设备连接",device.getSerialNumber());
logger.info("当前状态:{}",device.getState().name());
IChimpDevice devices = adbBackend.waitForConnection(30000, device.getSerialNumber());
String SerialNumber = device.getSerialNumber();
MonkeyThread monkeythread = new MonkeyThread(devices,device,SerialNumber);
monkeythread.setName(SerialNumber);
threadpool.add(monkeythread);
showAllDevices();
monkeythread.setApkPath(apkPath);
monkeythread.start();
}
4、MonkeyThread中实现具体的操作函数,例如单击操作
public void actionSingleClick(int x, int y) {
logger.info("{} SingleClick Action X:{} Y:{}", threadName, x, y);
chimpDevice.touch(x, y, TouchPressType.DOWN_AND_UP);
}
5、MonkeyThread继承自Thread,在run函数中实现各种操作的控制。
6、我们可以通过IChimpDevice的getProperty获取很多当前设备信息,例如手机品牌,型号,android版本等,当然还有一个最重要的属性调用方法:chimpDevice.getProperty("am.current.comp.class"),可以获取当前的activity。
其他属性有:
am.current.action
am.current.categories
am.current.comp.class
am.current.comp.package
am.current.data
am.current.package
build.board
build.brand
build.cpu_abi
build.device
build.display
build.fingerprint
build.host
build.id
build.manufacturer
build.model
build.product
build.tags
build.type
build.user
build.version.codename
build.version.incremental
build.version.release
build.version.sdk
clock.millis
clock.realtime
clock.uptime
display.density
display.height
display.width
monkey.version
7、chimpdevice还支持其他获取view的方法,例如getHierarchyViewer等,但是仅限于工程机及模拟器,产品机上该功能所依赖的ViewServer是关闭的,所以均不能用。