java.lang.SecurityException: Permission Denial: 在测试中使用UiAutomation时调用getIntentSender()

15
每当我尝试通过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个回答

24

这不是关于为什么UIAutomator没有捕获错误的答案,而是我发现的一个可能的解决方法。当开启辅助功能时,我无法获取UIAutomator转储,因为我收到了你描述的错误。当我在辅助功能设置中关闭TalkBack和/或Switch Access时,我不再收到权限拒绝错误,并且UIAutomator转储成功工作。不确定这是否对您有帮助,但我可以在Lollipop(Nexus 5)的辅助功能开启状态下每次重现您的问题。


6
对我来说是LastPass。 - Jake Wharton
天啊!又有一个第三方应用程序正在使用辅助功能服务,禁用它,问题解决了! - Jukka Raanamo
1
同样的问题,禁用所有辅助功能服务后,异常就消失了。 - biddster
1
我不得不在我的Galaxy S6上关闭'Nova Launcher'(设置>辅助功能>服务)。 - Daniel Wilson
很奇怪,希望有人能给我们一个解释。 - ospider
显示剩余3条评论

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

1
谢谢,对我有用。在 Kotlin 中与 androidx 一起是:InstrumentationRegistry.getInstrumentation().targetContext - hannojg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接