我们如何将androidTest指向同类Eclipse风格的项目?

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)

我认为也许这些srcDirssrcFile东西可能是相对于setRoot()价值来解释的,但它们似乎是相对于项目自己的根来解释的.

有没有比我工作更优雅的解决方案?

cri*_*007 5

阅读Gradle文档,我找不到关于相对vs绝对路径的任何内容srcDirs,但似乎如果你只是给src它,它将假设./src不管设置的根.也许这可能是Gradle功能请求,或者可能在Gradle的更高版本中按预期工作?不确定,没看过.

话虽如此,假设您不需要aidl,renderscriptsresources(因为它们似乎没有出现在项目中),那么这不是"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)