Den*_*hev 13 android gradle android-testing android-gradle-plugin
我跑了./gradlew connectedAndroidTest,我需要我的测试APK有一个权限,不应该在任何非测试APK(调试,发布).我已经创建了一个允许的清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mypackage">
<uses-permission android:name="android.permission.SET_ANIMATION_SCALE"/>
</manifest>
Run Code Online (Sandbox Code Playgroud)
然后我将此清单复制到src/androidTest目录,因为gradle android插件的发布说明提示:
0.13.0(2014/09/18)需要Gradle 2.1现在可以为测试应用程序提供清单(src/androidTest/AndroidManifest.xml)
但是,在我的连接测试期间不会应用权限.
如果我创建一个src/debug目录并在那里移动该清单 - 在连接测试期间正确应用权限(但在常规调试版本中也是如此,这是不可取的).
我做错了什么或有错误吗?
Den*_*hev 11
问题源于我对connectedAndroidTestgradle任务的工作方式的误解.它创建并部署了2个Android应用程序 - 一个可测试的(您的项目)和一个测试程序(一个模拟与可测试应用程序交互的用户的应用程序).我的意图是将权限添加到testable应用程序.但是,添加清单会src/androidTest导致向测试人员应用添加权限.这是我如何计算出来的:
如果我执行
adb shell pm list packages -f -3
Run Code Online (Sandbox Code Playgroud)
(-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 包:/ 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
Run Code Online (Sandbox Code Playgroud)
因此SET_ANIMATION_SCALE,我打算将我的可测试应用程序中的权限放入测试人员应用程序中.难怪将清单移动src/androidTest到src/debug将把权限放入可测试的应用程序中(正确但过于宽泛).
以下是我解决原始问题的方法 - 仅在应用程序在connectedAndroidTest任务内部运行时才将权限放入应用程序.
我创建了一个用于集成测试的空构建风格:
productFlavors {
/**
* This flavor is to be run only using connectedAndroidTestAnimcontrol
*/
animcontrol {}
regular {}
}
Run Code Online (Sandbox Code Playgroud)移动src/androidTest/AndroidManifest.xml到单一权限进入src/animcontrol/AndroidManifest.xml
执行连接测试为
./gradlew connectedAnimcontrolDebugAndroidTest
Run Code Online (Sandbox Code Playgroud)这就是诀窍,现在我AndroidManifest.xml只有在作为connectedAndroidTest运行时才会与主应用程序的清单合并.
希望这有助于某人.
| 归档时间: |
|
| 查看次数: |
3128 次 |
| 最近记录: |