Ответ 1
Проблема связана с моим непониманием работы connectedAndroidTest
gradle. Он создает и развертывает 2 приложения для Android - тестируемый (ваш проект) и тестер (приложение, которое имитирует пользователя, который взаимодействует с тестируемым приложением). Мое намерение заключалось в том, чтобы добавить разрешение на тестируемое приложение. Однако добавление манифеста в src/androidTest
привело к добавлению разрешения на приложение тестера. Вот как я понял это:
Если я выполняю
adb shell pm list packages -f -3
(-3
означает перечислить только сторонние пакеты) Я вижу что-то вроде этого
пакет:/data/app/SmokeTestApp.apk=com.android.smoketest пакет:/data/app/GestureBuilder.apk=com.android.gesture.builder пакет:/data/app/com.mycompany.myapp-2.apk=com.mycompany.myapp пакет:/data/app/SoftKeyboard.apk=com.example.android.softkeyboard пакет:/data/app/org.libsdl.app-2.apk=org.libsdl.app пакет:/data/app/SmokeTest.apk=com.android.smoketest.tests пакет:/data/app/com.mycompany.myapp.test-1.apk=com.mycompany.myapp.test
Приложение с суффиксом test-1 - это приложение тестера, другое - мое тестовое приложение. Проверка их разрешения дает:
[email protected]_x86:/ # aapt d permissions /data/app/com.mycompany.myapp-2.apk
package: com.spredfast.android
uses-permission: android.permission.INTERNET
uses-permission: android.permission.WRITE_EXTERNAL_STORAGE
[email protected]_x86:/ # aapt d permissions /data/app/com.mycompany.myapp.test-1.apk
package: com.spredfast.android
uses-permission: android.permission.SET_ANIMATION_SCALE
Итак, разрешение, SET_ANIMATION_SCALE
, которое я собирался поместить в мое тестовое приложение, помещается в приложение-тестер. Неудивительно, что перемещение манифеста с src/androidTest
до src/debug
приведет к разрешению в тестируемое приложение (правильное, но слишком широкое).
Вот как я решил исходную проблему - добавив разрешение в приложение только в случае запуска приложения внутри задачи connectedAndroidTest
.
-
Я создал пустую конструкцию, которая будет использоваться с интеграционными тестами:
productFlavors { /** * This flavor is to be run only using connectedAndroidTestAnimcontrol */ animcontrol {} regular {} }
-
Перемещено
src/androidTest/AndroidManifest.xml
с единственным разрешением вsrc/animcontrol/AndroidManifest.xml
-
Выполненные связанные тесты как
./gradlew connectedAnimcontrolDebugAndroidTest
Это сделал трюк, теперь у меня есть AndroidManifest.xml
, который будет объединен с основным манифестом приложения только при запуске как connectedAndroidTest.
Надеюсь, это поможет кому-то.