Android Gradle在非调试版本上运行测试

时间:2014-05-28 22:58:35

标签: android gradle android-gradle

我有一个包含三种不同构建类型的项目:debug,beta和release。我的测试包总是为调试版本创建,但QA使用beta版本,我们希望QA在其大量设备上运行这些测试。

我正在尝试为QA创建一个测试版apk,它由与beta版本相同的密钥签名。通过Android-Gradle文档,我没有看到任何告诉我我不能这样做的东西,但我不认为无论如何配置它。无论如何我可以配置组装测试apk时使用哪个密钥库?或者有没有办法创建一个未签名的测试apk?

3 个答案:

答案 0 :(得分:44)

您现在可以将其指向其他目标,我不知道这种情况何时发生,但from the docs:

  

目前只测试了一种Build Type。默认情况下,它是调试   构建类型,但可以使用以下命令重新配置:

android {
    ...
    testBuildType "staging" 
}

答案 1 :(得分:14)

对于您的问题,这是一个不完整的答案,因为它记录了您可以执行的操作,但connectedAndroidTest任务(在您的项目中运行androidTest测试的任务)是硬编码的要针对debug构建类型运行,我也没有看到将其指向不同构建类型的方法。

Is there a way to list task dependencies 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标志看到)确认任务取决于{{1 }}

添加其他构建类型和风格似乎不会影响对内置assembleDebug类型的依赖。

有可能使用比我更大的Gradle-fu,你可以重新连接任务以使测试依赖于不同的构建类型,但这样做很可能是脆弱的,因为它必然会取决于Android Gradle插件中不支持的API。

要最直接地回答您的问题,但是,如果您只想对具有不同证书的版本运行测试,则可以更改debug版本上的签名配置以使用测试版证书:

debug

我测试了它,我能够以这种方式对使用自定义密钥库的调试版本运行androidTest目标。但是,我怀疑这可以解决您的问题,因为我怀疑您想要针对beta build 运行测试,而不是使用beta 证书进行调试构建。

答案 2 :(得分:2)

要为构建变体添加测试源集,请按照下列步骤操作:

  • 在左侧的“项目”窗口中,单击下拉菜单 选择项目视图。
  • 在相应的模块文件夹中, 右键单击src文件夹,然后单击New>目录。
  • 对于目录名称,输入" androidTestVariantName。"例如, 如果你有一个名为" MyFlavor"的构建变体然后是目录名称 承担" androidTestMyFlavor。"然后单击“确定”。
  • 右键单击新目录,然后单击“新建”>目录。输入 "的java"作为目录名称,然后单击“确定”。

现在,您可以按照上述步骤添加测试,以添加新测试。到达“选择目标目录”对话框时,选择新的变体测试源集。

src/androidTest/源集中的检测测试由所有构建变体共享。为" MyFlavor"构建测试APK时您应用的变体Gradle结合了src/androidTest/src/androidTestMyFlavor/来源集。

另一种方法是将以下行放在默认配置中。

目前只测试了一种Build Type。默认情况下,它是调试构建类型,但可以使用以下命令重新配置:

android {
    ...
    testBuildType "staging"
}