java.lang.SecurityException: отказ в разрешении: getIntentSender() при использовании UiAutomation в тесте

Всякий раз, когда я пытаюсь использовать UiAutomation в любом тесте через getInstrumentation().getUiAutomation() процесс завершается с этим исключением:

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)

Есть идеи почему? Я использую Gradle через Android Studio, пробовал разные версии, звоню прямо через adb, даже без какой-либо внешней зависимости (и, очевидно, по крайней мере с SDK 18)... Всегда сбой.

Это единственный официальный пример, который я нашел: https://www.youtube.com/watch?v=_SlBHUW0ybM

2 ответа

Решение

Это не ответ на вопрос, почему UIAutomator не улавливает ошибку, а скорее возможный обходной путь, который я нашел. Когда службы доступности включены, я не могу получить дамп UIAutomator, потому что я получаю сообщение об ошибке, которую вы описали. Когда я отключаю TalkBack и / или переключаю доступ в настройках специальных возможностей, я больше не получаю ошибку "Отказ в разрешении", и дамп UIAutomator работает успешно. Не уверен, поможет ли это вам, но я могу воспроизвести вашу проблему каждый раз с включенными службами доступности в Lollipop(Nexus 5).

Использование InstrumentationRegistry.getTargetContext() вместо InstrumentationRegistry.getContext()

Другие вопросы по тегам