我正在NetCipher帮助监护项目。由于遗留原因,他们希望保留现有的基于Eclipse的项目结构。但是,它们不是在库的tests/
子目录中进行测试,而是使用对等项目模型。因此,在repo根目录下,libnetcipher/
是库,netciphertest/
是检测测试。
与libnetcipher/
本身不同,从未为Gradle构建设置了测试测试。所以,我正在向libnetcipher/build.gradle
文件中添加内容,让它将androidTest
源集指向netciphertest/
目录,而不是正常位置。
这有效:
androidTest {
manifest.srcFile '../netciphertest/AndroidManifest.xml'
java.srcDirs = ['../netciphertest/src']
resources.srcDirs = ['../netciphertest/src']
aidl.srcDirs = ['../netciphertest/src']
renderscript.srcDirs = ['../netciphertest/src']
res.srcDirs = ['../netciphertest/res']
assets.srcDirs = ['../netciphertest/assets']
}
然而,重复的../netciphertest
位是icky。当然,我可以将其定义为最小化重复的常量。我想弄清楚是否有更好的方法解决整个问题。
例如,这不起作用:
androidTest.setRoot('../netciphertest')
androidTest {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
我认为也许srcDirs
和srcFile
内容可能会相对于setRoot()
值进行解释,但它们似乎是相对于项目自己的根来解释的。
是否有比我工作更优雅的解决方案?
答案 0 :(得分:5)
阅读Gradle文档,我找不到关于srcDirs
的相对路径与绝对路径的任何内容,但似乎如果您只是给src
它将假设./src
无论设置的根目录如何。也许这可能是Gradle功能请求,或者可能在Gradle的更高版本中按预期工作?不确定,没看过。
话虽如此,假设您不需要aidl
,renderscripts
或resources
(因为它们似乎没有出现在项目中),那么这不是“icky” “?
androidTest {
setRoot '../netciphertest'
java.srcDirs = ['../netciphertest/src']
}
如果您不覆盖它们并仅设置根目录,则会自动设置所有其他所有其他设置。
androidTest.manifest.srcFile = /NetCipher/netciphertest/AndroidManifest.xml
androidTest.res.srcDirs = [/NetCipher/netciphertest/res]
androidTest.assets.srcDirs = [/NetCipher/netciphertest/assets]
// Override these, if you wish
androidTest.resources.srcDirs = [/NetCipher/netciphertest/resources]
androidTest.aidl.srcDirs = [/NetCipher/netciphertest/aidl]
androidTest.renderscript.srcDirs = [/NetCipher/netciphertest/rs]
您可以打印Gradle中的路径,如果您愿意,可以在sourceSets
块中包含此部分,以便更多地使用它。
println "androidTest.manifest.srcFile = ${androidTest.manifest.srcFile}"
println "androidTest.java.srcDirs = ${androidTest.java.srcDirs}"
println "androidTest.resources.srcDirs = ${androidTest.resources.srcDirs}"
println "androidTest.aidl.srcDirs = ${androidTest.aidl.srcDirs}"
println "androidTest.renderscript.srcDirs = ${androidTest.renderscript.srcDirs}"
println "androidTest.res.srcDirs = ${androidTest.res.srcDirs}"
println "androidTest.assets.srcDirs = ${androidTest.assets.srcDirs}"