其他分享
首页 > 其他分享> > Android Gradle相关

Android Gradle相关

作者:互联网

Gradle

它是一个通用的构建工具,运行在JVM上,其内部核心模型是由各个TASK组成的有向无环图

通俗一些:我就是一个框架,你们大家可以借助创建Plugin来告诉我具体的编译任务。Android Gradle Plugin就是其中一个典型的例子

1. Android Gradle Plugin

简称AGP,由Android Google团队开发和维护,借助实现一个Gradle-Plugin的方式,来完成将Android项目的源码编译成APK

2. Gradle的生命周期

可以分为三个阶段,初始化,配置,任务执行

也可以分为五个阶段,具体见源码Stage

private enum Stage {
    LoadSettings, Configure, TaskGraph, RunTasks, Finished;
}

关于各个阶段干了什么事情,

3. Gradle Wrapper

这个是每个Gradle项目都包涵的,我理解它是一个包装器。

我们在运行Gradle的时候是需要下载对应的Gradle压缩包的,体积较大约100M+。

借助wrapper,我们只需要告知version和url等信息,就可以在第一次运行的时候自信下载对应版本的gradle包

4. 关于Gradle Properties

定义参数用的。

相关Properties文件:

5. 依赖库的版本号

gradle项目中支持依赖第三方库,很容易出现不同的组件依赖了一个组件的不同版本号

它在编译过程中,获取调整依赖的版本号。选择的策略是版本号最大的优先,除非项目中添加了一些force的策略

默认情况下,it will select the highest one

一些小技巧

1. 如何禁用Transform

Transform,是AGP提供的一种可以修改编译数据(class文件、Jar包)的方式,它会被转化成对应的TASK。

而每个TASK都会有独立的输入目录和输出目录,即使你不做任何修改,也会导致编译数据拷贝一份。

在编译速度优化中这个是重要的优化点。

在无法避免apply的情况下,如何禁用呢? 具体策略是通过反射修改BaseExtension内部变量_transforms,

_transforms,它是一个集合,其内部保存了当前Project在初始化过程中加载的所有Transform。将目标从集合中移除即可

代码示例 实践可用

2. 动态修改Properties参数

这个值,已经在project/gradle.properties中存在了,但是你想要在某种变体中修改它。

关键的地方是在什么时机修改它和如何修改它

// 根目录下的build.gradle中添加
allprojects {
    ext["Resources222"] = true
}

这其中涉及到的具体原因的话,其实是需要梳理一下properties文件是在什么时候加载的?加载之后如何获取到?

我这边之前是在跟踪android.precompileDependenciesResources参数来逐步跟进的,踩了很多坑

 

标签:Plugin,版本号,gradle,相关,Android,Gradle,加载
来源: https://www.cnblogs.com/zhou-guobao/p/android-gradle-note.html