Android开发规范技巧Android进阶之路

【gradle】- Android Gradle配置源码分析

2019-11-26  本文已影响0人  拔萝卜占坑

简介

Android工程使用gradle来完成自动化构建,在创建Android工程时,IDE会在Android工程目录下生成gradle需要的相关配置文件。比如app module下面的build.gradle文件,我们可以根据我们需要添加我们的配置属性。但是对于不是很了解gradle的人来说,gradle文件每个节点对应了什么,我应该把自己想要的属性添加在哪里,属性节点下可以定义那些属性,是否可以自定义属性节点,执行自己的任务等等。很多人说可以,百度啊,但是有些时候,百度并不能满足你想要的,靠记忆总是那么不靠谱,所以,接下来我将通过gradle源码的方式带大家进行学习。

Gradle学习网站推荐

Android Plugin DSL Reference
Gradle Api
Groovy
user guide pdf
Gradle User Guide 中文版
更多资料

APK的构建过程

既然gradle配置文件作用于apk构建过程,那么就有必要对Android构建流程进行一番了解。来一张官方图:

最新的编译流程图参考:配置编译版本,旧更能够看出每个阶段使用到的工具。

VZOPCq.png
  1. AAPT(Android Asset Packaging Tool)打包res资源文件,比如AndroidManifest.xml、xml布局文件等,并将这些xml文件编译为二进制,其中assets和raw文件夹的文件不会被编译为二进制,最终会生成R.java和resources.arsc文件。
  2. AIDL将所有的aidl接口转化为对应的Java接口。
  3. 将所有的Java代码编译成.class文件。
  4. Dex工具将生成的.class文件、第三库和其他.class文件编译成.dex文件。
  5. 编译生成的.dex文件、资源、无需编译的资源(如图片等)将被ApkBuilder工具打包成APK文件。
  6. 签名。
  7. release版本,使用zipalign工具对APK进行对齐操作,对apk进行优化,提供运行时的效率。

Android gradle插件开发流程

app module下的build.gardle顶部有这样一行代码:

apply plugin: 'com.android.application'

可以看出,build.gardle文件使用了gradle插件来进行配置文件解析。那怎么确认gradle使用了那个插件来进行解析呢?那就得了解gradle插件开发的流程了。来一张简单的gradle插件工程图:


屏幕快照 2019-11-26 上午11.11.30.png

通过创建gradle插件工程,来查看gradle源码,是不错的方式,至于创建的完整流程,请自行百度。

上图“1”的地方,aspect.properties文件,.properties前面就是插件的id,就好比 “apply plugin: 'com.android.application'”中的“com.android.application”。标记“2”的地方,定义插件文件路径。

下面来看一下“com.android.application”插件


屏幕快照 2019-11-26 上午11.21.27.png

接下来就是分析AppPlugin文件了。

AppPlugin源码分析

这里只进行简单的配置相关的源码分析,apk构建过程很复杂,所以有兴趣的可以自己看看。

在build.gradle文件下面有个“android”节点,那么这个节点是怎么被解析出来的呢。在AppPlugin类下面有这样一个方法:


屏幕快照 2019-11-26 上午11.33.07.png

第一个参数“android”就是对于节点的名称,第二个参数,参数解析对应的类,那么我们看一下AppExtension里面又包含了那些。最终跟踪到BaseExtension类,里面定义了很多属性对象,有些是不是正是build.gradle里面的节点。那么我们可以跳转到对于的对象类中,查看相应的节点支持的属性,很多属性都有注释,还是比较好理解的。

AppExtension配置

如果不想看源码,可以参考:Android Plugin DSL Reference

其它就不介绍了,自己打开源码或者在上面推荐的网站自行查看

  1. resValue:添加资源
  2. resConfigs:添加资源配置过滤器
上一篇下一篇

猜你喜欢

热点阅读