monkey名字真难听,
这东西有两种用法,一种是网络命令行模式
这东西有两种用法,一种是网络命令行模式
term1:
adb forward tcp:4444 tcp:4444adb shell monkey --port 4444
nc localhost 4444
waketype hello
quit
See: README.NETWORK.txt
See: class MonkeySourceNetwork:
See: example_script.txt
还有一种用法是script file模式
monkey.txt:
start data >>DispatchString(hello)RotateScreen(1,0)UserWait(1000000)
adb push monkey.txt /data/local/tmp/monkey.txt
adb shell monkey -f /data/local/tmp/monkey.txt 1
这种用法里可以设定屏幕方向,内部是冻结方向感应器。
RotateScreen(1/*横向*/,0/*monkey退出后恢复自动旋转*/)
RotateScreen(1/*横向*/,1/*monkey推出后依然禁止自动旋转*/)
这两个方法都比较温柔,如果一个app明示自己只喜欢纵向,那么这个命令没有效果。
内部是调用了
奇怪的是,在网络命令模式下,不接受rotate命令,原因可能是因为fressRotation一旦被调用了,monkey退出时才能够自动解除方向冻结,因为ibinder没有提供disconnect方法。
这个monkey不靠谱,在网络命令模式下还能够wake 屏幕,但是script file模式下的DeviceWakeUp() 命令明明是允许的,但是timeout,是因为他内部试图调用一个不存在的内部Activity: com.google.android.powerutil.WakeUpScreen
if (s.indexOf("DeviceWakeUp") >= 0) {
String pkg_name = "com.google.android.powerutil";
String cl_name = "com.google.android.powerutil.WakeUpScreen";
long deviceSleepTime = this.mDeviceSleepTime;
ComponentName mApp = new ComponentName(pkg_name, cl_name);
this.mQ.addLast(new MonkeyActivityEvent(mApp, deviceSleepTime));
this.mQ.addLast(new MonkeyKeyEvent(0, 7)); //POWER key down
this.mQ.addLast(new MonkeyKeyEvent(1, 7)); //POWER key up
this.mQ.addLast(new MonkeyWaitEvent(deviceSleepTime + 3000L));
this.mQ.addLast(new MonkeyKeyEvent(0, 82)); //MENU key down
this.mQ.addLast(new MonkeyKeyEvent(1, 82)); //MENU key up
this.mQ.addLast(new MonkeyKeyEvent(0, 4)); //ESC key down
this.mQ.addLast(new MonkeyKeyEvent(1, 4)); //ESC key up
return;
}
没有评论:
发表评论