不测试时,如何从Gradle构建中排除AndroidTest/资产?

不测试时,如何从Gradle构建中排除AndroidTest/资产?,android,unit-testing,android-studio,gradle,android-assets,Android,Unit Testing,Android Studio,Gradle,Android Assets,我的单元测试需要一些大型资产来测试复杂媒体文件的解析。我注意到Gradle在调试和发布版本中都包含了整个androidTest/assets文件夹。这会导致不必要的APK文件大小膨胀 我尝试在build.gradle中为媒体文件的扩展名设置android{aaptOptions{ignoreAssetsPattern“!*.ext”},但androidTest/assets文件夹似乎不支持这些资产排除选项。我设法使用android{packagingpoption{exclude'Android

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

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

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


我简直不敢相信默认行为是在所有构建中始终包含androidTest/资产。这应该被视为一个bug并报告吗?

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

这是令人不快的一句话:

instrumentTest.setRoot('tests')

谢谢你的帮助

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