Gradle 指南之从 Groovy 迁移到 Kotlin,2021 国内知名大厂 Android 岗面经
更多信息可以看这个回答:configuration-on-demand-is-not-supported
确认 sync 成功后,接下来就可以正式进行 Kotlin DSL 迁移了
步骤二. 使用 Kotlin 重写 Groovy
需要注意的地方是:
Groovy DSL script files use the .gradle file name extension.
Kotlin DSL script files use the .gradle.kts file name extension.
这里,我直接对原有的 build.gradle
脚本通过重命名的方式,修改为 build.gradle.kts
的后缀名,可能会提示有冲突,这里不用管,直接点击 continu,然后你会发现脚本里一片飙红,不用担心,之前的 Groovy 语法在 Kotlin 报错了而已,推荐全部删掉,然后对照着用 Kotlin 重新写一遍,这样,会印象深刻一些。
这里以一个比较简单的示例工程说明一下:
我们分别对根目录的 settting.gradle
和 build.gradle
以及 app
目录下的 build.gradle
进行重写,以我的操作路径为例(不同操作路径,可能遇到的问题不一样):
app/build.gradle
-> setting.gradle
-> build.gradle
说下几个需要注意的地方:
需要说明的一点,目前 Gradle 官方是支持 Groovy 脚本和 Kotlin 并存的,虽然我感觉支持的并不太好
1. android
配置项无法自动被识别出来,如图所示:
解决办法:不用管,直接写一个配置项出来,然后 sync 同步一下就可以了,如图:
2. signconfig release
配置变更
signingConfigs {create("release") {storeFile = file("your keystore path")storePassword = "your password"keyAlias = "your alias"keyPassword = "your password"}getByName("debug") {storeFile = file("your keystore path")storePassword = "your password"keyAlias = "your alias"keyPassword = "your password"}}
3. 重命名生成的 apk
文件名
大部分开发当中应该都会有对输出的 apk
有重命名的需求,原来我在 Groovy 中是通过:
applicationVariants.all { variant ->variant.outputs.all {outputFileName = "{flavors}@app_versionName}.apk"}}
迁移到 Kotlin 发现无法直接使用 outputFileName
的属性了
解决办法:显式转为具体实现类
android.applicationVariants.all {outputs.all {if (this is ApkVariantOutputImpl) {this.outputFileName = "flavors@app_versionName.apk"}}}
4. setting.gradle
配置指定 build.gradle.kts
rootProject.buildFileName = "build.gradle.kts"
include("app")
好了,如果你没遇到其他问题的话,到这里基本就已经大
功告成了!
评论