您的位置:首页 > 其它

Gradle生命周期

2016-05-24 15:28 176 查看

Gradle生命周期

Gradle构建系统有自己的生命周期,初始化、配置和运行三个阶段。

1.初始化阶段,会去读取根工程中setting.gradle中的include信息,决定有哪几个工程加入构建,
创建project实例,比如下面有三个工程: include ':app', ':lib1', ':lib2

2.配置阶段,会去执行所有工程的build.gradle脚本,配置project对象,一个对象由多个任务组成,
此阶段也会去创建、配置task及相关信息。

3.运行阶段,根据gradle命令传递过来的task名称,执行相关依赖任务


Gradle 构建任务

1.是在gradle的运行阶段打印出来的

task hello {
doLast {
println "hello"
}
}


2.是在gradle的配置阶段打印出来的

task hello {
println "hello"
}


根据不同的需求选择不同的加载方式;

另外task中有一个action list,task运行时会顺序执行action list中的action,doLast或者doFirst后面跟的闭包就是一个action,doLast是把action插入到list的最后面,而doFirst是把action插入到list的最前面。

脚本写多了,都挤在一个build.gradle里也不好,人长大了总要自己出去住,那可以把部分脚本抽出去吗?

当然可以,新建一个other.gradle把脚本抽离,然后在build.gradle中

添加apply from ‘other.gradle’即可

抽出去以后你会发现本来可以直接import的asm包找不到了,怎么回事?

根工程中配置的buildscript会传递到所有工程,但只会传到build.gradle脚本中,

其他脚本可不管,所以你要在other.gradle中重新配置buildscript,

并且other.gradle中的repositories不再包含m2repository目录,

自己配置jcenter()又会导致依赖重新下载到~/.gradle/caches目录。如果不想额外下载,也可以在other.gradle中这么搞:

buildscript {
repositories {
maven {
url rootProject.buildscript.repositories[0].getUrl()
}
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
}
}


获取AndroidManifest文件:

ApplicationId versus PackageName提到,gradle中的applicationid用来区分应用,manifest中packageName用来指定R文件包名,
并且各个productFlavor的manifest中的packageName应该一致。

applicationid只是gradle脚本中的定义,其实最后生成的apk中的manifest文件的packageName还是会被applicationid替换掉。

那获取R文件的包名怎么搞?要获取AndroidManifest中package属性,并且这个manifest要是起始的文件,
因为最终文件中的package属性会被applicationid冲掉,由于各个manifest中的package属性一样,
并且非主manifest可以没有package属性,所以只有获取主manifest的package属性才是最准确的。

def manifestFile = android.sourceSets.main.manifest.srcFile
def packageName = new XmlParser().parse(manifestFile).attribute('package')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: