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




写这个之前读了前面的两篇,发现根本不想看,略看也没发现什么重点信息。所以不能再像以前一样基本照搬原文翻译,需要在忠实原文的情况下,更多的可读性,和更多的有用信息。