java.lang.SecurityException: com.app.debug.test из uid 10278 не разрешено выполнять MOCK_LOCATION - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь смоделировать серию местоположений из файла GPX в тесте инструментов Android для отслеживания местоположения Service, который прослушивает изменения местоположения с FusedLocationProviderClient.

Проблема в том, чтоЯ сталкивался с тем, что при вызове addTestProvider () для LocationManager, метод выдает SecurityException, потому что, очевидно, тестовое приложение не имеет разрешения MOCK_LOCATION.

val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
locationManager.addTestProvider(TEST_PROVIDER, false, false, false, false, false, false, false, POWER_MEDIUM, ACCURACY_FINE) // SecurityException

уже пытался установить разрешение через ADB:

adb shell appops set com.app.debug.test android:mock_location allow

Также, проверяя, было ли оно установлено соответствующим образом:

adb shell appops get com.app.debug.test android:mock_location
MOCK_LOCATION: allow

После установки разрешения через ADB, внутри Настройки -> Параметры разработчика -> Выберите приложение для определения местоположения, появится имя пакета тестового приложения.Таким образом, разрешение, по-видимому, разрешено системой, но тест все еще не выполняется из-за SecurityException.Я понятия не имею, почему и что может быть причиной этого.Я провел тест на Pixel 2, Android 9.0.

LE: Проверка AppOpsManager внутри тестового приложения показывает, что разрешение не было предоставлено:

val opsManager = context.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager
val mockLocationAllowed = opsManager.checkOpNoThrow(
      AppOpsManager.OPSTR_MOCK_LOCATION,
      android.os.Process.myUid(),
      context.packageName)
if (mockLocationAllowed == MODE_ERRORED)
      Log.e(TAG, "Permission not granted")

LE: Интересно, что при проверке, разрешено ли разрешение в отладочной сборке, после выполнения тех же шагов, как описано выше, AppOpsManager показывает, что разрешение предоставлено.Так что он работает на debug , но не на debugAndroidTest .

...