Android Gradle 插件中文指南

3.2.1 配置结构

当默认的工程结构不适用的时候,你可能需要配置它。根据 Gradle 文档说明,可以通过如下方式重新配置Java工程的 sourceSets:

sourceSets {
    main {
        java {
            srcDir 'src/java'
        }
        resources {
            srcDir 'src/resources'
        }
    }
}

注意: srcDir 会添加指定的文件夹到现有的源文件夹列表中( Gradle 文档没有提到这个,但是的确是这样)。

要替换默认的源文件夹的话,可以给 srcDirs 指定一个路径数组 。下面使用对象调用另一种方式配置:

sourceSets {
    main.java.srcDirs = ['src/java']
    main.resources.srcDirs = ['src/resources']
}

想要了解更多的信息,请参考Gradle文档的Java插件部分。

Android插件也使用相似的语法,但是它有它自己的 sourceSets ,这些已经内置在 android 对象中了。

这儿有个示例,它使用了旧工程结构的源代码,并且重新映射了 androidTest sourceSet 到测试文件夹:

android {
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        androidTest.setRoot('tests')
    }
}

注意: 因为旧结构中把所有的源文件( java, aidl, renderscript, and java resources )都放在同一文件夹下,所以我们需要重新映射这些 sourceSet 的新组件到同一src目录.

注意: setRoot()方法会移动整个 sourceSet (包括其下的子文件夹)到一个新文件夹。这里是移动src/androidTest/*到tests/*。

这些都是 Android 特有的,并不适用于 Java sourceSets

这是一个迁移的例子(译者注:比如从旧工程结构迁移过来)。