20 分钟掌握 Android-Gradle,android 程序基础教程
例如我们新建一个 Android 工程,在其根目录中输入:
gradle tasks -q
可以看到如下输出(你可能需要事先配置 gradle 的环境变量,或也可使用./gradlew
替代):
根据上图可以看到当前工程中的每条task
都已罗列出,并且有黄色的输出表示当前task
的描述。其中-q
表示忽略gradle
本身的log
信息,加上这个参数可以屏蔽很多无关的输出,不加也不会影响执行。
Task 声明格式
声明一个 task 只需要在任务名前面加上task
就可以了,例如下面声明了一个hello
的 Task。
task hello
通常我们会给 task 附带一些执行动作,称之为Action
,例如
hello.doFirst{println "hello first"}
hello.doLast{println "hello last"}
也可以附带一个闭包配置,称之为Configuration
,闭包中不仅可用做赋值操作,也可以执行一些自动执行的配置。
hello {println "hello"}
Task 依赖
单独声明一个task
在实际开发中几乎不会有任何的意义,更多的时候是让多个task
组合起来,一个依赖另一个,形成一连串的任务集。
task hello
hello.doFirst{println "hello "}
task world(dependsOn: "hello") << {println "world"}
上面这段代码定义了两个 task,当我们执行hello
任务的时候,会输出?hello
,而执行world
任务的时候,由于声明了dependsOn: "hello"
,表示world
依赖hello
,会先执行 hello,再执行 world。
task xxx << {}
这样的语法等价于
task xxxxxx.dolast {}
你可以在任意位置新建一个名为build.gradle
的文本,来练习
上面讲述的task
定义与依赖。
接着讲 Project
Android│├──app│ └──build.gradle│├──library│ └──build.gradle│├──*.properties│├──build.gradle│└──setting.gradle
一个 Android 工程,通常是由上述结构构成,其中有着许多不为人知的巧妙用法。
setting.gradle 文件
关于setting.gradle
中也可以写代码,是很多人不知道的。如下代码是我在上一篇文章【[企业级 Android 模块化平台设计建议](
)】中讲到的一个例子,在setting.gradle
文件中,可以指定一个project
位置,这里就可以将一个外部工程中的模块导入到 APP 工程中了。
getLocalProperties().entrySet().each { entry ->def moduleName = entry.keyif (Boolean.valueOf(entry.value)) {def file = new File(rootProject.projectDir.parent, "/{moduleName.toLowerCase()}")if (file.exists()) {include ":{moduleName.toLowerCase()}").projectDir = file}}}
build.gradle
一个项目的根 gradle 文件,用于描述这个项目的统一资源,其中包括各子资源的使用方式、插件的依赖环境等等。
subprojects{apply plugin: 'com.android.library'dependencies {compile 'com.xxx.xxx:xxx:1.0.0'}}
通常我们在每个模块都会引用的 aar 的时候,都会在每个模块里面都去手动的compile
一遍,例如support
包。 但实际上有一个非常简单的办法,写一遍就可以了,就是在项目的根gradle
文件中的subprojects
闭包中声明这个dependencies
。
通常在写compile
依赖的时候,我们都会写成这样:
compile 'com.android.support:appcompat-v7:25.0.0'
其实在gradle
中,这是一个方法调用,它的本质是compile()
方法传入了一个map
参数,因此完整的写法实际上是这样的:
compile group: 'com.android.support' name:'appcompat-v7' version:'25.0.0'
评论