【Android 修炼手册】Gradle 篇 -- Android Gradle Plugin 主要流程分析

预备知识

  1. 理解 gradle 的基本开发
  2. 了解 gradle task 和 plugin 使用及开发
  3. 了解 android gradle plugin 的使用

看完本文可以达到什么程度

  1. 了解 android gradle plugin 的构建流程
  2. 了解 android gradle plugin 的主要 task 的实现
  3. 学会 hook android 构建流程,添加自己想要的功能

阅读前准备工作

  1. 项目添加 android gradle plugin 依赖
compile 'com.android.tools.build:gradle:3.0.1'

通过这种方式,可以直接依赖 plugin 的源码,读起来比较方便。
2. 官方对照源码地址 android gradle plugin 源码地址

大家可以直接 clone EasyGradle 项目,把 android-gradle-plugin-source/build.gradle 里的 implementation ‘com.android.tools.build:gradle:3.0.1’ 注释打开就可以了。

com.android.application 主要有下面几个流程:
plugin流程

一、插件启动的准备工作

plugin1

在前面讲解自定义插件的时候说到过,要定义一个 xxx.properties 文件,里面声明插件的入口类,而 xxx 就是 apply plugin 时候使用的 id,这里要知道 android gradle plugin 的入口类,看 com.android.application.properties 文件就可以,内容如下:

implementation-class=com.android.build.gradle.AppPlugin

这里定义了入口是 AppPlugin,AppPlugin 继承自 BasePlugin。
AppPlugin 里没有做太多的操作,主要是重写了 createTaskManager 和 createExtension,剩下的大部分工作还是在 BasePlugin 里做的。
插件准备工作中主要做的事情:

  1. 检查插件版本
// method: BasePlugin.apply()
checkPluginVersion();
  1. 检查 module 是否重名
// method: BasePlugin.apply()
// 方法中会遍历所有子项目,判断是否有重复的 id
this.checkModulesForErrors();
  1. 初始化插件信息
// method: BasePlugin.apply()
PluginInitializer.initialize(project, this.projectOptions);
// 创建 Profiler 文件
ProfilerInitializer.init(project, this.projectOptions);
// profiler 信息中写入 plugin 版本
ProcessProfileWriter.getProject(project.getPath()).setAndroidPluginVersion(Version.ANDROID_GRADLE_PLUGIN_VERSION).setAndroidPlugin(this.getAnalyticsPluginType()).setPluginGeneration(PluginGeneration.FIRST);

二、配置项目

plugin2

配置项目这一阶段主要做的事情:

  1. 检查 gradle 版本是否匹配
// method: BasePlugin.configureProject()
this.checkGradleVersion();
  1. 创建 AndroidBuilder和 DataBindingBuilder
  2. 引入 java plugin 和 jacoco plugi
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值