【问题标题】:How do I exclude AndroidTest/assets from Gradle builds when not testing?不测试时如何从 Gradle 构建中排除 AndroidTest/assets?
【发布时间】:2015-04-26 19:15:13
【问题描述】:

我的单元测试需要一些大型资源来测试解析复杂媒体文件。我注意到 Gradle 在调试和发布版本中都包含整个 androidTest/assets 文件夹。这会导致不必要的 APK 文件大小膨胀。

我尝试在 build.gradle 中为媒体文件的扩展名设置 android { aaptOptions {ignoreAssetsPattern "!*.ext"} },但 androidTest/assets 文件夹似乎不支持这些资产排除选项。我设法让构建使用 android { PackagingOption { exclude 'AndroidTest/assets/filename.ext' } } 来专门排除每个文件,其中 filename.ext 是不支持通配符的完整文件名。这会从所有构建中排除资产,即使在测试时也是如此。

我希望我能找到一些 Gradle 方法来在发布版本中排除该文件夹,但资产可能不应该出现在版本中,除非我打算专门将其用于运行仪器测试。这里有什么好的选择吗?

我简直不敢相信默认行为是始终在所有构建中包含 androidTest/assets。这是否应该被视为错误并被报告?

【问题讨论】:

  • 我无法重现您的问题。我刚刚将一个assets/ 文件夹放到了一个项目的androidTest/ 中,在其中放了一个1.3MB 的文件,在项目上运行gradle clean assembleDebug,结果...-debug.apk 不包含该文件.您是否有一个示例项目可以重现您的发现?
  • 我在 /src/androidTest/assets 中找到了我的测试资产。仅包含资产,同一 androidTest 目录中没有任何测试源文件。您的测试是否看到了您包含的资产?如果这些资产不可用于测试,那将不是一个有用的解决方案。
  • "您的测试是否看到您包含的资产?" - 我不知道,因为这对于我的评论而言并不重要。您编写了“所有构建”,恕我直言,其中包括 APK 的调试和发布版本,而不仅仅是测试。如果您对“所有构建”有不同的定义,您可能希望澄清您的问题。如果,OTOH,您的意思是调试和发布 APK 包含您的资产,因为我无法重现这种效果,那么“默认行为是始终在所有构建中包含 androidTest/assets 似乎不是这种情况"。
  • 这就是为什么我问您是否有一个示例项目来重现您的发现。如果其他人可以独立验证这种行为,那么可能是一个错误,我们可以报告它(工具团队对错误很擅长)。
  • 我需要一种方法来使用资产执行仪器测试,而不会最终发布。当资产放置在可用于测试的位置时,它们似乎也包含在所有 APK 中。我将不得不创建一个重现此内容的新项目,因为我不会发布客户端代码。完成此操作后,我会发表评论。 (顺便说一句,马克,很高兴在 AnDevCon 见到你。)

标签: android unit-testing android-studio gradle android-assets


【解决方案1】:

在我为我的库项目编写测试后,似乎另一位开发人员明确向我的 build.gradle 文件添加了指令。他更改了默认位置以查找仪器测试。因此,Gradle 工具将 androidTest/assets 文件夹视为普通资产文件夹,并将文件添加到每个 APK。

这是有问题的行:

instrumentTest.setRoot('tests')

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 2012-08-20
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多