我有一个具有三种不同构建类型的项目:调试、测试版和发布。我的测试包始终是为调试版本创建的,但 QA 使用 beta 版本,我们希望 QA 在其大量设备上运行这些测试。
我正在尝试创建一个用于 QA 的测试 apk,该 apk 与 beta 版本使用相同的密钥进行签名。浏览 Android-Gradle 文档,我没有看到任何内容告诉我不能执行此操作,但我没有看到任何配置此操作的信息。无论如何,我可以配置在组装测试 apk 时使用哪个密钥库吗?或者有没有办法创建一个未签名的测试apk?
您现在可以将其指向不同的目标,我不知道这是什么时候发生的,但是来自文档:
目前仅测试了一种构建类型。默认是debug 构建类型,但这可以通过以下方式重新配置:
android { ... testBuildType "staging" }
这是对您的问题的不完整答案,因为它记录了您不能做什么,但是
connectedAndroidTest
任务(即在项目中运行androidTest
测试的任务)被硬编码为针对debug
构建运行类型,而且我没有找到将其指向不同构建类型的方法。
听取 Is there a way to list task dependency in Gradle? 的建议并检查任务依赖关系树,如果运行:
./gradlew tasks --all
你在输出中得到这个:
Verification tasks
------------------
app:check - Runs all checks. [app:lint]
app:connectedAndroidTest - Installs and runs the tests for Build 'debug' on connected devices. [app:assembleDebug, app:assembleDebugTest]
app:connectedCheck - Runs all device checks on currently connected devices. [app:connectedAndroidTest]
app:deviceCheck - Runs all device checks using Device Providers and Test Servers.
connectedAndroidTest
任务的文档声称它针对debug
运行测试,并且任务依赖项(您可以通过-all
标志看到)确认该任务依赖于assembleDebug
。
添加额外的构建类型和风格似乎不会影响对内置
debug
类型的依赖。
使用比我的更大的 Gradle-fu,您可以重新连接任务以使测试依赖于不同的构建类型,但这样做可能很脆弱,因为它必然依赖于 API 中不支持的东西Android Gradle 插件。
为了最直接地回答您的问题,如果您只想使用不同的证书对构建运行测试,您可以更改
debug
构建上的签名配置以使用 beta 证书:
android {
signingConfigs {
beta {
keyAlias 'key'
keyPassword 'password'
storeFile file('/path/to/beta_keystore.jks')
storePassword 'password'
}
}
buildTypes {
debug {
signingConfig signingConfigs.beta
}
beta {
signingConfig signingConfigs.beta
}
}
}
我对其进行了测试,并且能够针对以这种方式使用自定义密钥库的调试版本运行 androidTest 目标。但是,我怀疑这可以解决您的问题,因为我怀疑您想针对 beta build 运行测试,而不是使用 beta certificate 运行测试。
要为您的构建变体添加测试源集,请按照以下步骤操作:
现在您可以按照上述步骤添加新测试,将测试添加到这个新的源集中。当您到达“选择目标目录”对话框时,选择新的变体测试源集。
src/androidTest/
源集中的仪器测试由所有构建变体共享。为应用程序的“MyFlavor”变体构建测试 APK 时,Gradle
结合了 src/androidTest/
和 src/androidTestMyFlavor/
源集。
另一种方法是将以下行放入默认配置中。
目前仅测试了一种构建类型。默认情况下它是调试构建类型,但可以通过以下方式重新配置:
android {
...
testBuildType "staging"
}
如果您希望它依赖于选定的构建变体,您可以检查任务名称:
def isReleaseTestBuild = gradle.startParameter.taskRequests.toString().contains("ReleaseAndroidTest")
android {
if (isReleaseTestBuild) {
testBuildType "release"
}
...
}
现在您可以调用
./gradlew connectedDebugAndroidTest
、./gradlew connectedReleaseAndroidTest
或仅通过 Android Studio 使用选定的构建变体运行