8

我们目前正在开发一个在我们的构建服务器上运行的仪器测试套件,但是当测试在使用普通 Android 模拟器的开发机器上通过时,构建服务器上的构建失败,因为我们只运行带有-no-window标志的无头模拟器。

尝试调用InstrumentationTestCase.sendKeys()方法以编程方式打开选项菜单时发生故障。错误是:

权限被拒绝:将关键事件从 pid 646 uid 10026 注入到 uid 1000 拥有的窗口 Window{43d55100 paused=false}

然后我们发现有一个INJECT_EVENTS权限,但是在清单中设置它没有效果。事实上,在日志中我们看到了这样的输出:

未授予 android.permission.INJECT_EVENTS 包 com.qype.radar 的权限(protectionLevel=2 flags=0x6644)

这是否意味着此权限无用?

我们还尝试让仪器测试应用程序和被测应用程序使用相同的 Linux 用户 IDandroid:sharedUserId并在同一进程中运行(android:process我们不确定是否已经如此),但仍然没有运气。

这是否意味着目前无法在无头模拟器上运行包含关键事件的工具,或者我们错过了什么?

4

2 回答 2

17

-no-window通过首先运行 Xvnc 实例(即假 X 服务器)然后在其中启动模拟器来在无头机器上运行模拟器DISPLAY

更准确地说,我得到了XvncAndroid Emulator Jenkins 插件来为我做这件事。

不幸的是,在注入 UI 事件之前解锁屏幕仍然是一个问题,但这(hackily)通过自动运行这样的命令来解决(类似于你见过的其他答案):
echo "event send EV_KEY:KEY_MENU:1 EV_KEY:KEY_MENU:0" | nc -q1 localhost 5554


编辑:
我发现这种方法更可靠:
adb shell input keyevent 82

关于键码 82 的一些信息。

于 2010-07-29T19:56:54.443 回答
1

我在 Hudson 服务器上的测试也遇到了类似的问题。就我而言,我通过 Android SDK 的建议解决了这个问题:http: //developer.android.com/guide/topics/testing/testing_android.html#UITestTroubleshooting

重要的是我也必须启用主应用程序的权限。

于 2010-07-22T07:29:13.193 回答