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.version7、chimpdevice还支持其他获取view的方法,例如getHierarchyViewer等,但是仅限于工程机及模拟器,产品机上该功能所依赖的ViewServer是关闭的,所以均不能用。