java.lang.SecurityException:权限拒绝:在测试中使用UiAutomation时的getIntentSender()

时间:2014-11-25 17:16:44

标签: android android-testing uiautomator android-uiautomator

每当我尝试在getInstrumentation().getUiAutomation()的任何测试中使用UiAutomation时,进程都会因此异常而崩溃:

java.lang.SecurityException: Permission Denial: getIntentSender() from pid=30334, uid=2000, (need uid=1000) is not allowed to send as package android
        at android.os.Parcel.readException(Parcel.java:1540)
        at android.os.Parcel.readException(Parcel.java:1493)
        at android.app.IUiAutomationConnection$Stub$Proxy.disconnect(IUiAutomationConnection.java:225)
        at android.app.UiAutomation.disconnect(UiAutomation.java:240)
        at android.app.Instrumentation.finish(Instrumentation.java:197)
        at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:575)
        at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1837)

知道为什么吗?我通过Android Studio使用Gradle,尝试了各种版本,直接通过adb调用它,即使没有任何外部依赖(显然至少有SDK 18)......总是崩溃。

这是我发现的唯一官方示例:https://www.youtube.com/watch?v=_SlBHUW0ybM

2 个答案:

答案 0 :(得分:23)

这不是UIAutomator没有发现错误的答案,而是我找到的可能的解决方法。当辅助功能服务打开时,我无法获得UIAutomator转储,因为我收到您描述的错误。当我在辅助功能设置中关闭TalkBack和/或Switch Access时,我不再获得权限拒绝错误,并且UIAutomator转储成功运行。不确定这是否对您有所帮助,但每次在Lollipop(Nexus 5)中启用辅助功能服务时,我都可以重现您的问题。

答案 1 :(得分:2)

使用InstrumentationRegistry.getTargetContext()代替InstrumentationRegistry.getContext()