Gradle GradleW 与 AGP

本文浅谈一下这三个工具的关联与区别

Gradle: 基于JVM的通用构建工具

AGP: Android Gradle Plugin 专用于 Gradle 构建 Android 应用的插件

Gradlew: Gradle Wrapper

看上去 gradlew 不太需要更新

Gradle与Wrapper

Wrapper 是 Gradle 的 Wrapper

Wrapper的实质是一个脚本(sh/bat) 主要作用就是获取指定版本的gradle并在项目构建中绑定使用(便于统一构建环境)

gradle 存储在 ~/.gradle/wrapper/dists 也是个脚本(sh/bat)

gradlew 的 gradle 相关配置文件为 gradle/wrapper/gradle-wrapper.properties

目前小版本(7.4.2 vs 7.3.3)之间的 gradle 脚本基本一致

$ diff ~/.gradle/wrapper/dists/gradle-7.4.2-bin/48ivgl02cpt2ed3fh9dbalvx8/gradle-7.4.2/bin/gradle ~/.gradle/wrapper/dists/gradle-7.3.3-bin/6a41zxkdtcxs8rphpq6y0069z/gradle-7.3.3/bin/gradle
117c117
< CLASSPATH=$APP_HOME/lib/gradle-launcher-7.4.2.jar
---
> CLASSPATH=$APP_HOME/lib/gradle-launcher-7.3.3.jar
1
2
3
4
5

早期版本间 也较为一致(4.10.1 vs 5.2.1)

$ diff ~/.gradle/wrapper/dists/gradle-4.10.1-all/455itskqi2qtf0v2sja68alqd/gradle-4.10.1/bin/gradle ~/.gradle/wrapper/dists/gradle-5.2.1-bin/9lc4nzslqh3ep7ml2tp68fk8s/gradle-5.2.1/bin/gradle
31c31
< DEFAULT_JVM_OPTS=""
---
> DEFAULT_JVM_OPTS='"-Xmx64m"'
67c67
< CLASSPATH=$APP_HOME/lib/gradle-launcher-4.10.1.jar
---
> CLASSPATH=$APP_HOME/lib/gradle-launcher-5.2.1.jar
1
2
3
4
5
6
7
8
9

gradle版本设置配置

distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
1

gradlew 脚本的最后一行: 运行gradlew 开始工作流

exec "$JAVACMD" "$@"
# $JAVACMD 是 Java 命令
# 不同版本稍有不同
1
2
3

下图为 gradlew 的工作流程图 gradlew

Gradle 与 Daemon

Gradle 默认使用 Daemon 为C/S架构 减少JVM启动的开销并提供缓存等功能

--no-daemon 设置后不开启 daemon (与Maven相同)

AGP

AGP通常会与 Android Studio 的更新步调保持一致open in new window

目前插件版本基本跟随 Gradle 更新 AGP 版本需要与 Gradle 版本匹配以减少兼容性问题

AGPGradle
7.07.0+
7.17.2+
7.27.3.3+

此外 Android Studio 与 AGP 也会有兼容性问题open in new window 不过 AS 所用的插件向前兼容很好 主要是最新版本插件的兼容问题

plugins {
    id("com.android.application") version "7.2" apply false // AGP import
    id("com.android.library") version "7.2" apply false
    id("org.jetbrains.kotlin.android") version "1.5.31" apply false
}
1
2
3
4
5