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

时间:2016-03-29 20:57:21

标签: android gradle android-gradle

我正在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']
    }

我认为也许srcDirssrcFile内容可能会相对于setRoot()值进行解释,但它们似乎是相对于项目自己的根来解释的。

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

1 个答案:

答案 0 :(得分:5)

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

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