关于Android Studio中使用基本Gradle请参考:http://ask.android-studio.org/?/article/66 这里面有视频讲解android studio中的项目结构和gradle在其中的作用。
我在这里主要讲解一下gradle的一些常用语法。
Gradle Build Language Reference
其实学习这些常用的语法,也就是如何看懂上面的官方参考文档。
打开上面的网页,我们看到了Gradle的语言介绍。
由上图可以看到,gradle的语法中主要的分类:构建的脚本Project
初始话的脚本Gradle 设置的脚本Settings. 那么我们点击进入Settings里面。
这个Settings里面出现一个突然让你敏感的词语–Multi-Project Build。 这个Multi-Project Build主要涉及了我们android studio中的settings.gradle的设置。我们在android studio为了同时可以构建多个模块的project,我们就必须在settings.gradle中的include标签中加入多个模块的projectname.如下:
所以这里的Settings文档应该是说明我们可以怎么去设置project属性和build属性的。
继续往下拉,你会发现,这个Settings中还定义了其他的属性和方法。
我们上面用的include标签其实是一个方法。
include(projectPaths)
这个方法中需要传入一个projcetPaths,那么projectPaths参数又是什么类型呢?一个String还是一个List还是其他object呢?
那么就再点击进去include里面去。
点进去之后,我们看到了这个方法用法说明。而且上面提及到的projectPaths参数其实是用String[]类型。但注意红框中的冒号分离标示的说明,每个模块名称名称前面需要有:作为分割符。
从上面一连串的参考之后,你就会明白,为何settings.gradle可以写上这个方面了。前面也说明了,这个settings.gradle中还定义其他的方法和属性,因此我们根据上面的参考方法,自己可以试验一下。
我们可以打印一下这个apppath。
根据上面的方法,我在lib中build.gradle中加入一个type。
//所有的type相关参考https://docs.gradle.org/current/dsl/
//-------------------------复制--------------------
//参考https://docs.gradle.org/current/javadoc/org/gradle/api/file/CopySpec.html
def myCopySpec = project.copySpec {//定义过滤规则
//除去。。。不复制
exclude('**/*.txt')
from('src/main/java'){ //from 是一个闭包 "定义在一个函数内部的函数"。
include '**/*.java'
}
}
//使用外部属性定义
def copypath = 'build/outputs/mycopy'
task mycopy(type:Copy ){
println("task mycopy---park")
//复制到00....
delete(copypath)
into(copypath)
//CopySpec with(CopySpec... sourceSpecs)
//Adds the given specs as a child of this spec.
includeEmptyDirs = true //是否包含空的文件夹
with myCopySpec
}
在你们工程文件夹build/outputs/中可以看到我们复制到outputs中的文件夹新建了一个mycopy.