Проблема связана с моим непониманием того, как работает задача connectedAndroidTest
gradle. Он создает и развертывает 2 приложения для Android — тестируемое (ваш проект) и тестер (приложение, которое имитирует пользователя, взаимодействующего с тестируемым приложением). Мое намерение состояло в том, чтобы добавить разрешение в тестируемое приложение. Однако добавление манифеста в src/androidTest
привело к добавлению разрешения в тестовое приложение. Вот как я это понял:
Если я выполню
adb shell pm list packages -f -3
(-3
означает перечисление только сторонних пакетов) Я вижу что-то вроде этого
package:/data/app/SmokeTestApp.apk=com.android.smoketest package:/data/app/GestureBuilder.apk=com.android.gesture.builder package:/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 package:/data/app/com.mycompany.myapp.test-1.apk=com.mycompany.myapp.test
Приложение с суффиксом test-1 — это приложение для тестирования, другое — мое приложение для тестирования. Проверка их разрешения дает:
root@generic_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
root@generic_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
, который будет объединен с манифестом основного приложения только при запуске как connectAndroidTest.
Надеюсь, это поможет кому-то.
person
Denis Kniazhev
schedule
09.01.2015