zhangzhao4444 / maxim Goto Github PK
View Code? Open in Web Editor NEW高速uiautomator控件解析算法的Android Monkey, 每秒10-15个Action Event。实现快速DFS算法的Android Monkey , 每秒 5个Action Event。
高速uiautomator控件解析算法的Android Monkey, 每秒10-15个Action Event。实现快速DFS算法的Android Monkey , 每秒 5个Action Event。
java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission
at android.os.Parcel.createException(Parcel.java:2074)
at android.os.Parcel.readException(Parcel.java:2042)
at android.os.Parcel.readException(Parcel.java:1990)
at android.hardware.input.IInputManager$Stub$Proxy.injectInputEvent(IInputManager.java:925)
at android.hardware.input.InputManager.injectInputEvent(InputManager.java:886)
at com.android.commands.monkey.p.a(SourceFile:132)
at com.android.commands.monkey.Monkey.f(SourceFile:1863)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:380)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.input.InputManagerService.injectInputEventInternal(InputManagerService.java:733)
at com.android.server.input.InputManagerService.injectInputEvent(InputManagerService.java:707)
at android.hardware.input.IInputManager$Stub.onTransact(IInputManager.java:422)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)
如题,网上看有两种方法:
当出现oom时 会自动抓取traces文件 存于 /sdcard/oom-traces.log
zhanghao您好,请问下maxim有开源的时刻表吗?谢谢~
在多个小米机型上测出android 运行时权限未申请的crash,但实际发生crash的位置在权限申请成功的回调中,测试录屏发现申请权限弹框未弹出。小米手机上权限申请的activity如下:
com.lbe.security.miui/com.android.packageinstaller.permission.ui.GrantPermissionsActivity
如题,请问monkey.jar和framework.jar会开源么?之前为了做快速自定义monkey的方案,也尝试过一些方法
如题,OOM的log应该出现在crash-dump.log文件中么
影响:出现该问题后,将不遵循黑白名单设计规则,随机乱点
测试记录:
测试手机:
三星s10 安卓9
完整日志:run.log
错误日志:
[2020-11-05 17:39:47,604]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] *** ERROR // : null root node returned by UiTestAutomationBridge(1 times), use default events generator.
[2020-11-05 17:39:47,604]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // debug, in pointer event: mBlackWidgets is {}
[2020-11-05 17:39:47,604]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] start fix 2020-11-05 17:37:20.816
[2020-11-05 17:39:47,604]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // PointF(947.0, 1723.0)
[2020-11-05 17:39:47,604]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] over fix event 2020-11-05 17:37:20.818
[2020-11-05 17:39:47,604]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] RANDOM NUMBER other= 0.035478413
[2020-11-05 17:39:47,604]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] random hit touch
[2020-11-05 17:39:47,604]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // debug, in pointer event: mBlackWidgets is {}
[2020-11-05 17:39:47,604]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] start fix 2020-11-05 17:37:20.831
[2020-11-05 17:39:47,604]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // PointF(71.0, 627.0)
[2020-11-05 17:39:47,605]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] over fix event 2020-11-05 17:37:20.832
[2020-11-05 17:39:47,605]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event664, 2020-11-05 17:37:20.835
[2020-11-05 17:39:47,605]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] :Sending Touch (ACTION_DOWN): 0:(947.0,1723.0)
[2020-11-05 17:39:47,605]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event665, 2020-11-05 17:37:20.909
[2020-11-05 17:39:47,605]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] :Sending Touch (ACTION_MOVE): 0:(947.86975,1715.9478)
[2020-11-05 17:39:47,605]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event666, 2020-11-05 17:37:20.975
[2020-11-05 17:39:47,605]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] :Sending Touch (ACTION_MOVE): 0:(951.8904,1713.0941)
[2020-11-05 17:39:47,605]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event667, 2020-11-05 17:37:21.043
[2020-11-05 17:39:47,606]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] :Sending Touch (ACTION_MOVE): 0:(952.4642,1710.8387)
[2020-11-05 17:39:47,606]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event668, 2020-11-05 17:37:21.112
[2020-11-05 17:39:47,606]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] :Sending Touch (ACTION_MOVE): 0:(953.97925,1707.7256)
[2020-11-05 17:39:47,606]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event669, 2020-11-05 17:37:21.201
[2020-11-05 17:39:47,606]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] :Sending Touch (ACTION_MOVE): 0:(958.44904,1702.0471)
[2020-11-05 17:39:47,609]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event670, 2020-11-05 17:37:21.263
[2020-11-05 17:39:47,609]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] :Sending Touch (ACTION_MOVE): 0:(958.73315,1695.6404)
[2020-11-05 17:39:47,610]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event671, 2020-11-05 17:37:21.333
[2020-11-05 17:39:47,610]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] :Sending Touch (ACTION_MOVE): 0:(960.30225,1691.1112)
[2020-11-05 17:39:47,610]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event672, 2020-11-05 17:37:21.405
[2020-11-05 17:39:47,613]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] :Sending Touch (ACTION_MOVE): 0:(961.75134,1680.4895)
[2020-11-05 17:39:47,614]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event673, 2020-11-05 17:37:21.492
[2020-11-05 17:39:47,614]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] :Sending Touch (ACTION_MOVE): 0:(964.0585,1673.2206)
[2020-11-05 17:39:47,614]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event674, 2020-11-05 17:37:21.549
[2020-11-05 17:39:47,614]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] :Sending Touch (ACTION_UP): 0:(965.5239,1661.756)
[2020-11-05 17:39:47,614]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event675, 2020-11-05 17:37:21.625
[2020-11-05 17:39:47,614]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // Sleeping for 200 milliseconds
[2020-11-05 17:39:47,614]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event675, 2020-11-05 17:37:21.912
[2020-11-05 17:39:47,615]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // Sleeping for 1000 milliseconds
[2020-11-05 17:39:47,615]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event675, 2020-11-05 17:37:22.977
[2020-11-05 17:39:47,615]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // Sleeping for 200 milliseconds
[2020-11-05 17:39:47,615]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event675, 2020-11-05 17:37:23.244
[2020-11-05 17:39:47,616]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] :Sending Touch (ACTION_DOWN): 0:(71.0,627.0)
[2020-11-05 17:39:47,616]-[INFO]-[case.py]-[adb_shell:314]: [Maxim] // event676, 2020-11-05 17:37:23.314
adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.autonavi.minimap --uiautomatormix --running-minutes 5 -v -v 后面如何加参数进行log输出
试过:adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.autonavi.minimap --uiautomatormix --running-minutes 5 -v -v 2>CLASSPAT=/sdcard/error.txt 1>CLASSPATH=/sdcard/info.txt 没报错,但也没 log 输出
将monkey log、logcat 重定向保存
adb shell xxx >log.txt 2>err.txt & logcat -v time -d >logcat.txt
当app 崩溃或oom 时
monkey会自动抓取推栈并保存到 /sdcard/crash-dump.log
在小米6上尝试运行 Maxim,总是闪退,不知道如何解决,求帮助~
机型信息:
【设备名称】: MI6
【设备厂商】: Xiaomi
【系统版本】: 8.0.0
【SDK版本】: 26
【CPU版本】: arm64-v8a
【分辨率】: 1080 x 1920
楼主你好,想请问一下,使用楼主这种方式启动monkey只能连接数据线进行操作,一旦拔掉数据线之后monkey就停止了,试过不用楼主这种方式是不会停止的,请问这种怎么解决呢?
java.lang.IllegalStateException: UiAutomationService android.accessibilityservice.IAccessibilityServiceClient$Stub$Proxy@d5b7316already registered!
这种情况怎么解决呢?
使用 -v 参数
-v 1级log
-v -v 2级log
例如:
adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.panda.videoliveplatform --uiautomatormix --running-minutes 60 -v -v
看作者放出了src/MonkeySourceUiAutomatorDFS.kt,请问一下依赖的ape代码在哪里获得
sh-wangsf:~ wangshufeng$ adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.snda.wifilocating --uiautomatormix --running-minutes 3
sh-wangsf:~ wangshufeng$
两个jar包已经push到手机的sdcard文件夹中
荣耀4a 5.1 adbkeyboard挂在IActivityManager里的问题
当运行monkey命令 几秒后monkey退出运行。
log如下:
......
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.shiyin/.Splash_MainActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.shiyin/.Splash_MainActivity } in package com.shiyin
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.shiyin/.Splash_MainActivity } in package com.shiyin
Sleeping for 300 milliseconds
:Sending Touch (ACTION_DOWN): 0:(292.0,224.0)
:Sending rotation degree=0, persist=false
请尝试 开启 “开发者选项” -> "USB调试(安全设置) 允许通过usb调试修改权限或模拟点击"
如题。非常感谢!
系统:Android Go(8.1)
MTK平台
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1348)
at android.graphics.Bitmap.recycle(Bitmap.java:346)
at android.app.UiAutomation.takeScreenshot(UiAutomation.java:748)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.takeScreenshot(MonkeySourceRandomUiAutomatorMix.kt:1079)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.executeScreenshotTask(MonkeySourceRandomUiAutomatorMix.kt:1059)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.generateEvents(MonkeySourceRandomUiAutomatorMix.kt:483)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.getNextEvent(MonkeySourceRandomUiAutomatorMix.kt:76)
at tv.panda.test.monkey.Monkey.runMonkeyCycles(Monkey.kt:1078)
at tv.panda.test.monkey.Monkey.run(Monkey.kt:580)
at tv.panda.test.monkey.Monkey$Companion.main(Monkey.kt:1299)
at tv.panda.test.monkey.Monkey.main(Unknown Source:7)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:285)
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1348)
at android.graphics.Bitmap.recycle(Bitmap.java:346)
at android.app.UiAutomation.takeScreenshot(UiAutomation.java:748)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.takeScreenshot(MonkeySourceRandomUiAutomatorMix.kt:1079)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.executeScreenshotTask(MonkeySourceRandomUiAutomatorMix.kt:1059)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.generateEvents(MonkeySourceRandomUiAutomatorMix.kt:509)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.getNextEvent(MonkeySourceRandomUiAutomatorMix.kt:76)
at tv.panda.test.monkey.Monkey.runMonkeyCycles(Monkey.kt:1078)
at tv.panda.test.monkey.Monkey.run(Monkey.kt:580)
at tv.panda.test.monkey.Monkey$Companion.main(Monkey.kt:1299)
at tv.panda.test.monkey.Monkey.main(Unknown Source:7)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:285)
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1348)
at android.graphics.Bitmap.recycle(Bitmap.java:346)
at android.app.UiAutomation.takeScreenshot(UiAutomation.java:748)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.takeScreenshot(MonkeySourceRandomUiAutomatorMix.kt:1079)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.executeScreenshotTask(MonkeySourceRandomUiAutomatorMix.kt:1059)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.generateEvents(MonkeySourceRandomUiAutomatorMix.kt:509)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.getNextEvent(MonkeySourceRandomUiAutomatorMix.kt:76)
at tv.panda.test.monkey.Monkey.runMonkeyCycles(Monkey.kt:1078)
at tv.panda.test.monkey.Monkey.run(Monkey.kt:580)
at tv.panda.test.monkey.Monkey$Companion.main(Monkey.kt:1299)
at tv.panda.test.monkey.Monkey.main(Unknown Source:7)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:285)
maxim 在Android R 上测试,出现无法进入被测试包里面,如果开始界面是屏幕,只会在屏幕上点击,无法进入被测试包进行点击
通过白名单或者黑名单控制无效
另外:QQ群貌似申请后无反应
跑的过程中长时间处于一个页面无法返回到其他的页面 导致效率低...
1、原生Monkey支持
from:https://blog.csdn.net/lemon_linaa/article/details/97777852
2、Maxim支持
期望Maxim支持:
1、pctrotation(优先级较高)
2、pctsyskeys
调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)
调整横竖屏切换事件的比例
3、pctmotion
调整滑动事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一 个up事件组成)
感谢大佬
troy模式的max运行结束后,只打印遍历过的activity。希望可以打印那些未遍历过的activity
adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.android.dazhihui --throttle 200 --imagepolling --pct-touch 40 --pct-motion 20 --pct-pinchzoom 5 --pct-nav 5 --pct-majornav 5 --pct-rotation 1 --uiautomatormix --running-minutes 120 -v -v -v -v --output-directory /sdcard/maximlog
---------------------------------log---------------------------------------------------------------------------
.....
[Maxim] // Find ADBKeybaord.
[Maxim] // Device Info: Google-Pixel 4, Android Version: 11
[Maxim] strategy : uiautomator-Mix.
Cannot resolve m0: getPermissionInfo
[Maxim] // Rejecting start of Intent { act=android.content.pm.action.REQUEST_PERMISSIONS pkg=com.google.android.packageinstaller cmp=com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity } in package com.google.android.packageinstaller
如何能点到权限框?
adb install -r x:\ADBKeyBoard.apk
adb shell ime enable com.android.adbkeyboard/.AdbIME
adb shell ime set com.android.adbkeyboard/.AdbIME
安装+设置一条龙
已将加了配置的:max.takeScreenShot = true配置文件max.config推送到sdcard,并且在命令行执行成功,在指定的文件夹下未生成对应的单步截图。
有的应用是没有launch activity的,是否提供指定main activity的参数配置啊?
这个需求还是很大的。
1、主界面有多个底部Tab,每个底部Tab界面有多个头部Tab,怎么编写max.xpath.selector让maxim底部Tab界面从左到右遍历,并且底部Tab界面里的头部Tab界面也从左到右遍历,头部Tab界面里的元素就从上到下遍历;
2、如何控制遍历的深度;
3、编写多个firstList、selectList、lastList的xpath,同个界面同时存在符合的多个元素,遍历的优先级是怎样的呢
[
{
"firstList": [
{
"xpath": "//[contains(@text,'发现')]"
},
{
"xpath": "//[contains(@text,'X友')]"
},
{
"xpath": "//[contains(@text,'小X')]"
},
{
"xpath": "//[contains(@text,'服务')]"
},
{
"xpath": "//[contains(@text,'我')]"
}
],
"selectList": [
{
"xpath": "//[@enabled='true']"
},
{
"xpath": "//[@enabled='true']//[contains(name(),'Text')]"
},
{
"xpath": "//[@enabled='true']//[contains(name(),'Button')]"
},
{
"xpath": "//[@enabled='true']//[contains(name(),'Image')]"
}
],
"lastList": [
{
"xpath": "//[../[@enabled='true']]"
},
{
"xpath": "//[../..//[@enabled='true']]"
},
{
"xpath": "//[../..//[@enabled='true'] and contains(@resource-id,'tab_')]"
},
{
"xpath": "//[../..//[@enabled='true'] and contains(@resource-id,'iv_tab_')]"
},
{
"xpath": "//[contains(@resource-id,'HorizontalScrollView')]"
},
{
"xpath": "//[@enabled='true']//[contains(name(),'Image')]"
}
],
"blackList": [
{
"xpath": "//[contains(@resource-id,'wrapper_in_custom_title_bar')]//[contains(@resource-id,'right_button')]"
},
{
"xpath": "//[contains(@resource-id,'share')]"
},
{
"xpath": "//[@resource-id='com.XXX.XXXX:id/fly_progress']"
}
]
}
]
Framework.jar 和 Monkey.jar 里面的代码会开源么?
可能运行的APP不是插桩包或者APP运行在Android<4.4上却没有SD读写权限Error: ENOENT, no such file or directory '/sdcard/io.appetizer/com.example.geeguarddemo.log'
已经将io.dcloud.feature.sdk.DCUniMPActivity添加到黑名单
跑Monkey时,出现报错信息:
Permissions error starting schema #Intent;component=com.xxxx.xxx/io.dcloud.feature.sdk.DCUniMPActivity;end
[Maxim] *** ERROR // WATCHDOG: Blocked in monitor com.android.server.input.InputManagerServiceBridge on foreground thread (android.fg)
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at tv.panda.test.monkey.ape.utils.APIAdapter.j0(APIAdapter.java:121)
at tv.panda.test.monkey.ape.utils.APIAdapter.getTasks(APIAdapter.java:175)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.getTopActivityComponentName(MonkeySourceRandomUiAutomatorMix.kt:1254)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.checkActivity(MonkeySourceRandomUiAutomatorMix.kt:1326)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.getNextEvent(MonkeySourceRandomUiAutomatorMix.kt:90)
at tv.panda.test.monkey.Monkey.runMonkeyCycles(Monkey.kt:1173)
at tv.panda.test.monkey.Monkey.run(Monkey.kt:623)
at tv.panda.test.monkey.Monkey$Companion.main(Monkey.kt:1440)
at tv.panda.test.monkey.Monkey.main(Unknown Source:2)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:359)
Caused by: android.os.DeadObjectException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(BinderProxy.java:532)
at android.app.IActivityManager$Stub$Proxy.getTasks(IActivityManager.java:4989)
... 12 more
android.os.DeadObjectException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(BinderProxy.java:532)
at com.android.internal.view.IInputMethodManager$Stub$Proxy.getInputMethodWindowVisibleHeight(IInputMethodManager.java:827)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.checkVirtualKeyboard(MonkeySourceRandomUiAutomatorMix.kt:1430)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.generateEvents(MonkeySourceRandomUiAutomatorMix.kt:843)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.getNextEvent(MonkeySourceRandomUiAutomatorMix.kt:92)
at tv.panda.test.monkey.Monkey.runMonkeyCycles(Monkey.kt:1173)
at tv.panda.test.monkey.Monkey.run(Monkey.kt:623)
at tv.panda.test.monkey.Monkey$Companion.main(Monkey.kt:1440)
at tv.panda.test.monkey.Monkey.main(Unknown Source:2)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:359)
[Maxim] *** ERROR // Fail to getInputMethodWindowVisibleHeight
java.lang.RuntimeException: android.os.DeadSystemException
at android.hardware.display.DisplayManagerGlobal.getDisplayInfo(DisplayManagerGlobal.java:163)
at android.hardware.display.DisplayManagerGlobal.getCompatibleDisplay(DisplayManagerGlobal.java:220)
at android.hardware.display.DisplayManagerGlobal.getRealDisplay(DisplayManagerGlobal.java:253)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.generatePointerEvent(MonkeySourceRandomUiAutomatorMix.kt:451)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.generateEvents(MonkeySourceRandomUiAutomatorMix.kt:860)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.getNextEvent(MonkeySourceRandomUiAutomatorMix.kt:92)
at tv.panda.test.monkey.Monkey.runMonkeyCycles(Monkey.kt:1173)
at tv.panda.test.monkey.Monkey.run(Monkey.kt:623)
at tv.panda.test.monkey.Monkey$Companion.main(Monkey.kt:1440)
at tv.panda.test.monkey.Monkey.main(Unknown Source:2)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:359)
Caused by: android.os.DeadSystemException
... 12 more
java.util.NoSuchElementException
at java.util.LinkedList.getFirst(LinkedList.java:254)
at tv.panda.test.monkey.MonkeySourceRandomUiAutomatorMix.getNextEvent(MonkeySourceRandomUiAutomatorMix.kt:95)
at tv.panda.test.monkey.Monkey.runMonkeyCycles(Monkey.kt:1173)
at tv.panda.test.monkey.Monkey.run(Monkey.kt:623)
at tv.panda.test.monkey.Monkey$Companion.main(Monkey.kt:1440)
at tv.panda.test.monkey.Monkey.main(Unknown Source:2)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:359)
使用acitivity白名单可做更细粒度场景控制。如仅想monkey部分页面场景
白名单:
参数 --act-whitelist-file /sdcard/awl.strings
awl.strings 格式如:
tv.panda.xxx.anchor.LiveRecorderActivity
tv.panda.xxx.list.view.activity.HistoryActivity
黑名单:
--act-blacklist-file xxx
实现原理:
hook startActivityLocked() api,非白则拒绝start
Maxim何时可以支持安卓11(Android R)版本???
希望能提供关闭生成max.activity.statistics.log文件的开关
执行的设备有pixel 3a 安卓10、三星s8 安卓8、小米8 安卓9、华为Mate9 安卓9
命令如下
adb -s 设备id shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p 被测试应用--uiautomatormix --running-minutes 10 --imagepolling --throttle 680 -v -v -v -v -v -v --output-directory /sdcard/max-output
报错的logcat如下
12-18 11:14:11.356 32460 32622 E NetworkScheduler: Invalid component specified.
12-18 11:14:11.411 32460 32486 E NetworkScheduler: Invalid component specified.
12-18 11:14:12.523 32460 32622 E GCM : Missing checkin config file
12-18 11:14:12.525 32689 32725 E FirebaseInstanceId: Token retrieval failed: AUTHENTICATION_FAILED
12-18 11:14:19.388 628 652 E DnsProxyListener: block dns query from uid = 10221
12-18 11:14:19.404 32460 32486 E NetworkScheduler: Invalid component specified.
12-18 11:14:19.627 755 2427 E AudioFlinger: open /proc/32689/cmdline error
12-18 11:14:22.806 682 682 E soundtrigger: audio_extn_sound_trigger_update_stream_status: invalid input device 0x0, for event 2
12-18 11:14:39.584 755 29035 E AudioFlinger: open /proc/32689/cmdline error
12-18 11:14:42.655 682 682 E soundtrigger: audio_extn_sound_trigger_update_stream_status: invalid input device 0x0, for event 2
12-18 11:14:45.386 959 1058 E storaged: getDiskStats failed with result NOT_SUPPORTED and size 0
当monkey运行过程中出现卡停时(卡停表现为无后续注入事件),需分情况考虑:
1 卡停时如果monkey命令没退出说明 系统资源打满了,app或系统即将可能会崩溃。 所以Monkey卡住也是正常的。这种情况多等会儿会有结果.
2 如果卡停时 monkey命令退出了 才是monkey自身有问题。这种情况请qq上联系我
在三星手机上出现了这种情况,即应用界面没有变化了,然后等了段时间,monkey也自动停止了C:\Users\panxr33970>adb shell ps | findstr tv.panda.test.monkey
shell 30226 23413 1802800 105564 hrtimer_na b6d39b1c S tv.panda.test.monkey
MI NOTE LTE
4.4.4
看不出log
sanbo [~]$ adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.mixpanel.example.hello --uiautomatormix --running-minutes 60
sanbo [~]$
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.