复制静态文件以在gradle中构建输出文件夹

时间:2015-02-10 14:27:46

标签: android-studio gradle

我之前使用的是ANT(Android Project),我有"静态"与我的代码相同的包中的文件

这是一个例子

  

的src / COM /我的/应用/测试/ Parser.java

     

的src / COM /我的/应用/测试/ json_to_parse.json

执行单元测试时,json文件被复制到gen文件夹中,因此可以使用

访问测试中的json

getClass().getResourceAsStream(fileName)

我不得不将项目转换为gradle,但现在测试失败了。 检查" build"文件夹,我已经意识到,.json文件不存在,因此getResourceAsStream方法返回null。

任何想法如何包含这些"静态"文件(json,xml,...)进入构建文件夹?

3 个答案:

答案 0 :(得分:2)

将文件移动到资源文件夹在Android Studio中没有开箱即用(即使应该有)

这应该在Android Studio 1.2中修复。 但是,这就是我所做的:

将所有静态文件移动到资源文件夹中。

在我的单元测试模块中,我已将其添加到build.gradle文件

task copyTestResources(type: Copy) {
    from "${projectDir}/src/test/resources"
    into "${buildDir}/classes/test"
}
processTestResources.dependsOn copyTestResources

现在,位于src / test / resources中的所有文件将被复制到/ classes / test中,我可以使用

访问它们
getClass().getResourceAsStream(fileName)

如果我将资源文件夹中的包结构与java文件夹中的相同,我不需要调整任何代码。

更多地完成这个故事:

JUnit4跑步者需要

getClass().getResourceAsStream(name)

而Robolectric需要

getClass().getClassLoader().getResourceAsStream(name)

答案 1 :(得分:1)

您询问的文件称为"资源文件"在Maven / Gradle lingo。

Gradle假设您使用的是Maven Standard Directory Layout

因此,您要么将文件移动到src/test/resources(然后Gradle将自动选择它们),要么告诉Gradle它应该在其他地方寻找资源。

在后一种情况下,您需要modify the processTestResources task.但是,将资源文件保存在与源代码相同的目录中是一种不好的做法。所以我建议前一个选项。

答案 2 :(得分:0)

如果使用AndroidStudio创建apk时出现问题。

您可以使用jar.exe创建包含资源的jar文件

例如,我将a.txt放入资源目录 并在cmd中运行此代码:

"C:\Program Files\Java\jdk1.7.0_79\bin\jar" cvfe res.jar -c resources

之后创建了一个jar文件“res.jar” 然后将res.jar添加到项目的libs文件夹中 当你的apk创建资源被添加到你的最终apk,你可以使用此代码来执行a.txt:

someclass.class.getClassLoader().getResourceAsStream("resources/a.txt");

使用此作业无需更改Gradle设置。