Android 具有 gradle 的仅测试权限
Android test-only permissions with gradle
我运行 ./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>
然后我将此清单复制到 src/androidTest
目录,作为 release notes 来自 gradle android 插件建议:
0.13.0 (2014/09/18)
Requires Gradle 2.1
It is now possible to provide a manifest for test apps (src/androidTest/AndroidManifest.xml)
但是,在我的连接测试期间没有应用权限。
如果我创建一个 src/debug
目录并将此清单移动到那里——在连接测试期间正确应用权限(但在常规调试构建期间也是如此,这是不可取的)。
是我做错了什么还是有错误?
问题源于我对 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的app是tester app,另外一个是我的testable app。检查他们的权限给出:
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
,只有当 运行 作为 connectedAndroidTest 时,它才会与主应用程序的清单合并。
希望这对某人有所帮助。
我运行 ./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>
然后我将此清单复制到 src/androidTest
目录,作为 release notes 来自 gradle android 插件建议:
0.13.0 (2014/09/18) Requires Gradle 2.1 It is now possible to provide a manifest for test apps (src/androidTest/AndroidManifest.xml)
但是,在我的连接测试期间没有应用权限。
如果我创建一个 src/debug
目录并将此清单移动到那里——在连接测试期间正确应用权限(但在常规调试构建期间也是如此,这是不可取的)。
是我做错了什么还是有错误?
问题源于我对 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的app是tester app,另外一个是我的testable app。检查他们的权限给出:
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
,只有当 运行 作为 connectedAndroidTest 时,它才会与主应用程序的清单合并。
希望这对某人有所帮助。