【发布时间】:2010-07-09 16:15:55
【问题描述】:
我们目前正在开发在我们的构建服务器上运行的仪器测试套件,但是当测试在使用普通 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)
这是否意味着这个权限没用?
我们还尝试让仪器测试应用和被测应用使用android:sharedUserId 共享相同的 Linux 用户 ID 并在同一进程中运行(android:process - 我们不确定是否已经如此),但仍然没有运气。
这是否意味着目前无法在无头模拟器上运行包含关键事件的工具,还是我们遗漏了什么?
【问题讨论】:
-
INJECT_EVENTS是一个完全有效的权限,但只能由固件持有,而不能由 SDK 应用程序持有。 -
无赖。那么我们最好的选择是什么? Google 没有考虑过在构建服务器上运行测试吗?
-
我刚刚使用 -wipe-data 标志重新启动了模拟器,然后构建通过了一次,然后模拟器崩溃了,再次重新启动它,现在构建再次失败......这一切都太不稳定了:-(
标签: android testing build-automation emulation instrumentation