gradle 控制android工程结构
最基本的build.gradle文件期望配置一个默认的文件结构,gradle遵循使用配置的观念,所以它会提供好多很好的配置选项。
基本工程包括两个主要的文件夹:
- src/main/
- src/androidTest/
几乎最重要的东西都在这两个文件夹内(如果你认为test也重要的话),在java工程的main文件夹里包括:
- java/
- resources/
java中放置java代码文件,resources中放置资源文件,这两个文件能被java plugin识别,同时也能被android plugin识别,main下面android plugin还识别如下结构:
- AndroidManifest.xml
- res/
- assets/
- aidl/
- rs/
- jni/
其中AndroidManifest.xml不写的话会报错,也就是说main下面最少放一个manifest文件,其他看需要,而且这些目录也是见名知意的。Test目录下不需要manifest文件,他会自动生成。
配置这些结构
上面说了gradle期望的默认结构结构,就是说如果按照上面的结构构件工程,那就不需要配置了,他能自动识别。下面讲如何自由配置这些功能目录的路径。比如配置放置java文件和资源文件的路径,如下:
sourceSets{
main{
java{
srcDir 'src/java'
}
}
}
这里使用了srcDir这个配置项,它用来指定默认路径,据说这么写(或不写),gradle自动添加这些路径。像上面这么写,可读性很高,这就是gradle SDL的好处。
如果不想使用默认路径,就使用srcDirs这个配置项,使用一个数组赋值,下面的例子还可以看到上面“{....}”写法的另一种写法:
soruceSets{
main.java.srcDirs = ['src/java']
main.resources.srcDirs = ['src/resources']
}
这种写法会简练不少,其实上面的一个花括号就对应一个类。
上面都是说的java工程,android工程的配置类似,因为它有自己的文件结构,所以放在android对象里。下面是一个例子:
android{
sourceSets{
main{
manifest.srcFile 'AndroidManifeset.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
androidTest.setRoot('tests')
}
}
这个例子对应eclipse里的工程结构,可读性也很高,每一行指定一个路径。androidTest.setRoot()会把src/androidTest/*搬家到tests/*,这些在java工程不能用。
下一节,编译Tasks
写这个之前读了前面的两篇,发现根本不想看,略看也没发现什么重点信息。所以不能再像以前一样基本照搬原文翻译,需要在忠实原文的情况下,更多的可读性,和更多的有用信息。