我们正试图使用gradle将使用ant构建的Eclipse项目迁移到Android Studio中。到目前为止,除了使用外部json文件的JUnit测试之外,一切都很好。我们有很多这样的文件,其中外部文件和java文件位于同一目录中。有没有一种方法可以将java代码和json文件保持在同一位置,只需在gradle中修改构建脚本?
当前构建目录类似于compackkrf
,包含MyFileTest.java
和data.json
。加载json的源代码如下:
getClass().getResourceAsStream("data.json");
我不想更改300多个具有相同结构的java文件。另外,我不想分组到gradle中的资源目录中,因为其中一些文件将具有相同的名称。
这是我的一个队友提出的解决方案。在android声明之后,将其添加到您的build.gradle文件中。打印路径用于调试。
task alterResourcePath << {
sourceSets.testDebug.resources.srcDir('src/test/java')
sourceSets.testDebug.resources.srcDirs.each {
File f->
if(f.exists()){
println f.path
}
}
}
test.dependsOn alterResourcePath
默认情况下,gradle(如Maven)将资源放在src/main/resources
下,因此您必须告诉gradle在src/<something>/java
中查找它们:
android {
sourceSets {
instrumentTest {
resources {
srcDirs = ['src/instrumentTest/java']
}
}
}
}
如果你正在运行roboelectric测试,你也可以这样做,但roboelectrical插件使用标准的java源代码集。所以你不会在Android扩展中这样做:
sourceSets {
test {
resources {
srcDirs = ['src/test/java']
}
}
}
如果使用其他源集(按风格或按构建类型),则也需要更新这些源集。