Gradle构建配置从Groovy迁移到KTS

前言

官方文档

https://developer.android.google.cn/studio/build/migrate-to-kts.html?hl=tr

使用新版的AS创建项目的时候,默认的构建配置已经是KTS,不再是之前的Groovy。

两者配置变化还是不小的,这里汇总一下变化及优缺点。

新建项目的时候

Groovy只需要下载gradle-8.0-bin.zip

而KTS则需要下载gradle-8.0-bin.zipgradle-8.0-src.zip

两个下载都很慢

我们可以使用镜像下载

https://mirrors.cloud.tencent.com/

gradle-8.0-bin.zip 放在类似这样的路径下

C:\Users\Administrator.gradle\wrapper\dists\gradle-8.0-bin\ca5e32bp14vu59qr306oxotwh

但是gradle-8.0-src.zip还不知道存放的位置

我这里是下载了好久才成功。

配置镜像

Groovy

找到项目下的build.gradle文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
pluginManagement {
repositories {
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/apache-snapshots' }
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/apache-snapshots' }
maven { url 'http://download.flutter.io' }
google()
mavenCentral()
}
}

支持Flutter

1
maven { url 'http://download.flutter.io' }

KTS

settings.gradle.kts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
pluginManagement {
repositories {
maven("https://maven.aliyun.com/repository/central")
maven("https://maven.aliyun.com/repository/public")
maven ("https://maven.aliyun.com/repository/gradle-plugin")
maven ("https://maven.aliyun.com/repository/apache-snapshots")
google()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven("https://maven.aliyun.com/repository/central")
maven("https://maven.aliyun.com/repository/public")
maven("https://maven.aliyun.com/repository/gradle-plugin")
maven("https://maven.aliyun.com/repository/apache-snapshots")
maven("http://download.flutter.io") {
// 信任http协议
isAllowInsecureProtocol = true
}
google()
}
}

支持Flutter

1
2
3
4
maven("http://download.flutter.io") {
// 信任http协议
isAllowInsecureProtocol = true
}

构建速度

大致测试了一下,新建项目进行构建KTS用了12秒,Groovy用了8秒。

整体符合网上别人给出的相对专业的测试。

Groovy整体的性能还是高于KTS的。

再加上现在大多数还是使用Groovy方式,不建议切换到KTS,找资料方便。

如果是喜欢折腾,还是建议进行切换的,毕竟这是官方推荐的,肯定会越来越好。

他人的测试结果

针对Gradle 7.4版本,我们通过以下3个用例来分析KTS性能

  • 首次运行(即清除所有build cache)
  • buildSrc abi 更改(支持的abi发生变化,可以理解为大多数缓存失效,大部分代码需要重新编译)
  • buildSrc 非 abi 更改(即buildSrc中的普通修改)

image-20231229111251415

结论

从这个测试结果来看,是可以迁移到KTS的,比较平常开发的时候大部分都是非ABI change,KTS的提升还是挺明显的。

ABI change

如果模块的外部接口发生了改变,那么所有依赖了该 module 的其他 module 都需要重新编译,这就使得编译时间变长了。

添加依赖

Groovy

1
implementation 'com.github.judemanutd:katexview:1.0.2'

KTS

1
implementation("com.github.judemanutd:katexview:1.0.2")