Com*_*are 7 android gradle android-gradle-plugin
我正在帮助NetCipher上的Guardian项目.由于遗留原因,他们希望保留现有的基于Eclipse的项目结构.但是,不是将测试放在tests/库的子目录中,而是使用对等项目模型.因此,从repo根开始,libnetcipher/是库,并且netciphertest/是仪器测试.
与其libnetcipher/自身不同,从未为Gradle构建设置了测试测试.所以,我正在向libnetcipher/build.gradle文件添加内容,让它将androidTestsourceset指向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']
}
Run Code Online (Sandbox Code Playgroud)
但是,重复../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']
}
Run Code Online (Sandbox Code Playgroud)
我认为也许这些srcDirs和srcFile东西可能是相对于setRoot()价值来解释的,但它们似乎是相对于项目自己的根来解释的.
有没有比我工作更优雅的解决方案?
阅读Gradle文档,我找不到关于相对vs绝对路径的任何内容srcDirs,但似乎如果你只是给src它,它将假设./src不管设置的根.也许这可能是Gradle功能请求,或者可能在Gradle的更高版本中按预期工作?不确定,没看过.
话虽如此,假设您不需要aidl,renderscripts或resources(因为它们似乎没有出现在项目中),那么这不是"icky"吗?
androidTest {
setRoot '../netciphertest'
java.srcDirs = ['../netciphertest/src']
}
Run Code Online (Sandbox Code Playgroud)
如果你不覆盖它们并只设置root,那么所有其他的将自动设置为这样.
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]
Run Code Online (Sandbox Code Playgroud)
您可以打印出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}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |