84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
ringa_lee
问题1gradle的解析顺序:rootproject 的setting.gradle,然后是rootproject的build.gradle,然后是各个subproject。所以project下的build.gradle会先于app下的build.gradle。问题2在build.gradle中,我们可以通过apply plugin: 引入插件,也可以通过 apply from .gradle引入其他gradle脚本中的函数定义或task等问题3你说的check,clean实际是task,一般hook我们指的是gradle的生命周期:
在解析setting.gradle之后,开始解析build.gradle之前,这里如果要干些事情(更改build.gradle校本内容),可以写在beforeEvaluate举个例子,我们将我们的一个subproject中的apply plugin改掉,原来是一个library工程,我们希望它被当作application处理:
beforeEvaluate
project.beforeEvaluate { // Change android plugin from `lib' to `application' dynamically // FIXME: Any better way without edit file? if (mBakBuildFile.exists()) { // With `tidyUp', should not reach here throw new Exception("Conflict buildFile, please delete file $mBakBuildFile or " + "${project.buildFile}") } def text = project.buildFile.text.replaceAll( 'com\\.android\\.library', 'com.android.application') project.buildFile.renameTo(mBakBuildFile) project.buildFile.write(text) }
在所有build.gradle解析完成后,开始执行task之前,此时所有的脚本已经解析完成,task,plugins等所有信息可以获取,task的依赖关系也已经生成,如果此时需要做一些事情,可以写在afterEvaluate
afterEvaluate
project.afterEvaluate { // Set application id def manifest = new XmlParser().parse(project.android.sourceSets.main.manifestFile) project.android.defaultConfig.applicationId = manifest.@package }
每个task都可以定义doFirst,doLast,用于定义在此task执行之前或之后执行的代码
project.assemble.doLast { println "assemble finish" } project.assemble.doFirst { println "assemble start" }
问题4gradle基于的语言是groovy,也是一个编程框架:官方文档:https://docs.gradle.org/current/dsl/Android插件文档:https://github.com/google/android-gradle...最后你应该从编程的角度来看gradle,通过查阅文档解决问题:http://m.blog.csdn.net/article/details?i...
我的观点是gradle的task有执行顺序,比如3个task,assemble,check,build。这3个task都有依赖项,按照gradle的执行顺序,先执行被依赖的,建议看gradle android plugin的官方文档以及gradle的文档
在AS看到的.gradle文件,其实应该算一种配置文件,所以并不能严格的说执行的顺序。其实我们只是在.gradle文件中配置了编译的流程(大部分常规流程如build、assemble等AS已经定义好了,这时候我们在.gradle配置其实就是这些流程task用到的参数,当然也可以自定义task,所有的gradle task都可以通过Gradle面板查看)。回过头来说,我们在写gradle文件的时候,包括在sync with gradle的时候,其实只是在声明我们的编译任务而已,所以这时候会把所有的任务都声明出来,但并不表示在编译时就都会执行这些任务,具体执行哪些任务,是看任务之间的调用的。
同意 @有明 所说,.gradle文件并不遵循什么特定顺序,.gradle属于配置文件,大工程、子工程,大环境、子环境。执行时会有顺序,先环境后任务,这是基本规则。
推荐去看看《gradle for android》,网上有电子版,我大概一天内看完,基本对android-plugin有个清楚的认识
分享一篇很不错的gradle学习文章:http://blog.csdn.net/u0108184...
问题1
gradle的解析顺序:rootproject 的setting.gradle,然后是rootproject的build.gradle,然后是各个subproject。所以project下的build.gradle会先于app下的build.gradle。
问题2
在build.gradle中,我们可以通过apply plugin: 引入插件,也可以通过 apply from .gradle引入其他gradle脚本中的函数定义或task等
问题3
你说的check,clean实际是task,一般hook我们指的是gradle的生命周期:
问题4
gradle基于的语言是groovy,也是一个编程框架:
官方文档:https://docs.gradle.org/current/dsl/
Android插件文档:https://github.com/google/android-gradle...
最后你应该从编程的角度来看gradle,通过查阅文档解决问题:http://m.blog.csdn.net/article/details?i...
我的观点是gradle的task有执行顺序,比如3个task,assemble,check,build。这3个task都有依赖项,按照gradle的执行顺序,先执行被依赖的,建议看gradle android plugin的官方文档以及gradle的文档
在AS看到的.gradle文件,其实应该算一种配置文件,所以并不能严格的说执行的顺序。其实我们只是在.gradle文件中配置了编译的流程(大部分常规流程如build、assemble等AS已经定义好了,这时候我们在.gradle配置其实就是这些流程task用到的参数,当然也可以自定义task,所有的gradle task都可以通过Gradle面板查看)。
回过头来说,我们在写gradle文件的时候,包括在sync with gradle的时候,其实只是在声明我们的编译任务而已,所以这时候会把所有的任务都声明出来,但并不表示在编译时就都会执行这些任务,具体执行哪些任务,是看任务之间的调用的。
同意 @有明 所说,.gradle文件并不遵循什么特定顺序,.gradle属于配置文件,大工程、子工程,大环境、子环境。执行时会有顺序,先环境后任务,这是基本规则。
推荐去看看《gradle for android》,网上有电子版,我大概一天内看完,基本对android-plugin有个清楚的认识
分享一篇很不错的gradle学习文章:http://blog.csdn.net/u0108184...