Android 格雷德尔:“我不知道;应用插件";在顶部还是底部

Android 格雷德尔:“我不知道;应用插件";在顶部还是底部,android,gradle,plugins,apply,Android,Gradle,Plugins,Apply,在Android Studio项目中,在build.gradle文件的开头或结尾添加“apply plugin”是否具有相同的效果 例如,要添加“com.google.gms.google服务”插件,Firebase官方文档建议在末尾添加,但我看到其他代码在开头添加 我知道这个问题似乎无关紧要,但我正在为androidstudio开发一个插件来管理依赖关系,我对此表示怀疑 提前感谢渐变脚本自上而下进行解释,因此顺序可能很重要。请记住,gradle有一个配置阶段和一个执行阶段,所以有时候顺序并不

在Android Studio项目中,在build.gradle文件的开头或结尾添加“apply plugin”是否具有相同的效果

例如,要添加“com.google.gms.google服务”插件,Firebase官方文档建议在末尾添加,但我看到其他代码在开头添加

我知道这个问题似乎无关紧要,但我正在为androidstudio开发一个插件来管理依赖关系,我对此表示怀疑


提前感谢

渐变脚本自上而下进行解释,因此顺序可能很重要。请记住,gradle有一个配置阶段和一个执行阶段,所以有时候顺序并不重要。在脚本的顶部应用插件是很常见的,因为插件通常会向gradle模型添加和任务,然后可以在构建脚本的下部配置

例如,无法执行以下操作,因为
test
任务是由
java
插件添加的:

test {
   include 'org/foo/**'
}
apply plugin: 'java'

你能链接到firebase文档中建议这一点吗?这就解释了为什么一些插件可能必须添加在顶部/附近。但这并没有真正解释为什么firebase建议在底部添加google服务。如果插件要使用
tasks.withType(…)
或类似功能,则可能需要在底部应用此功能(否则将不会返回任何结果)。为了避免这种情况,插件应该在
project.afterEvaluate{…}
块中执行这些类型的操作。Firebase团队的道格·史蒂文森(Doug Stevenson)在回答为什么谷歌服务插件必须放在底部时解释道:我在这个问题上添加了一条评论,如果他们更改了实现,将eventlistener添加到配置中,那么他们可以在解析配置之前截获配置。如果他们这样做了,那么您可以在Gradle脚本的顶部声明插件