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')