我之前使用的是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,...)进入构建文件夹?
答案 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设置。