【发布时间】: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