Whenever I try to use UiAutomation
in any test through getInstrumentation().getUiAutomation()
, the process crashes with this exception:
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)
Any idea why? I'm using Gradle through Android Studio, tried various versions, calling it directly through adb
, even without any external dependency (and obviously with at least SDK 18)... Always crashing.
This is the only official example I've found: https://www.youtube.com/watch?v=_SlBHUW0ybM
This isn't an answer for why UIAutomator isn't catching the error, but rather a possible workaround that I found. When accessibility services are on I am unable to get an UIAutomator dump because I receive the error you described. When I turn off TalkBack and/or Switch Access in the Accessibility settings I no longer get the Permission Denial error and UIAutomator dump works successfully. Not sure if this will help you, but I can reproduce your issue every time with accessibility services ON in Lollipop(Nexus 5).
Use
InstrumentationRegistry.getTargetContext()
instead ofInstrumentationRegistry.getContext()