2023

Gradle插件的分类

许多Gradle功能都是通过添加插件(Plugin)来完成,例如插件可以添加新的任务(JavaCompile)、域对象(sourceSet)、约定(Java源码位于src/main/java文件下)等等功能。其实插件(Plugin)也可以分为两种常见的分类:脚本插件(Script Plugin)和二进制插件(Binary Plugin)。
二进制插件可以通过实现 Plugin 接口的方式编写,也可以通过 GroovyKotlin DSL 中的声明来编写。它们可以驻留在构建脚本、项目层次结构中,也可以驻留在外部的插件 jar 中。脚本插件是附加的构建脚本,可进一步配置构建,并且通常实现声明性方法来操作构建。它们通常在构建中使用,但可以外部化和远程访问。

AGP资源编译之MergeResources流程分析

自AGP3.0起,默认的资源打包工具从AAPT v1版本升级为v2。APPT2的可执行文件存放在Android SDK的build-tools/$version路径下。在AAPT1中通过package命令把原始的资源文件编译成各式的二进制文件,并且压缩到一个ZIP归档中,升级到AAPT2后,编译的过程交由compile命令处理,合并归档的操作交给了link命令处理。AGP7.x+的代码中,AAPT1的内容相关的代码都已被删除。本次分析的AGP源码版本7.2.

AGP与资源构建交互的相关API

Android构建的过程,其中很重要的部分就是资源的构建,AGP通过把项目中资源进行link、complie、merge…等这些操作,最终把需要的资源打包进入APK中。如果大家熟悉AGP流程它是把这些操作封装各种Task来完成,但除此之外AGP还提供很多方便的API帮助我们动态化的构建。