Gradle指南之从Groovy迁移到Kotlin

栏目: Groovy · 发布时间: 6年前

内容简介:最近写 Kotlin 写的有些着魔了,正好看到 Gradle 4.10 版本支持使用 Kotlin DSL 构建脚本,然后心血来潮的尝鲜了下,因为刚出来,相关的资料实在太少,好了,话不多说,马上开始迁移(踩坑)之旅不建议在实际项目中直接迁移,毕竟对于 Kotlin 的支持刚出来,还不太稳定,可以拉个分支或者弄个Demo工程体验一下。

最近写 Kotlin 写的有些着魔了,正好看到 Gradle 4.10 版本支持使用 Kotlin DSL 构建脚本,然后心血来潮的尝鲜了下,因为刚出来,相关的资料实在太少, 实际在迁移过程遇到不少问题,所以本文可能是第一篇非官方迁移指导文档,希望可以 save your time !

好了,话不多说,马上开始迁移(踩坑)之旅

准备工作

  1. 确认你的 IDE 是否最新版本,如不是,请升级到最新版本,本文是基于 Android Studio 3.1.4 版本进行的迁移

  2. 迁移过程可能会出现一些意想不到的坑,建议找个空闲时间,买杯咖啡,然后做好......和丫死磕的准备 :)

不建议在实际项目中直接迁移,毕竟对于 Kotlin 的支持刚出来,还不太稳定,可以拉个分支或者弄个Demo工程体验一下。

开始迁移

步骤一. 升级 Gradle 4.10,建议通过以下命令进行升级:

./gradlew wrapper --gradle-version=4.10

需要等待一段下载时间,更新完成后,点击 sync 按钮,好了,不出意外,这里会遇到第一个问题,如下图:

Gradle指南之从Groovy迁移到Kotlin

我们看下异常描述

Configuration on demand is not supported by the current version of the Android Gradle plugin since you are using Gradle version 4.6 or above. Suggestion: disable configuration on demand by setting org.gradle.configureondemand=false in your gradle.properties file or use a Gradle version less than 4.6.
复制代码

简单来讲,Android Gradle 插件不支持基于新版本的 Gradle 的按需配置,异常描述里也提供两个解决办法:

  1. gradle.properties 增加 org.gradle.configureondemand=false 设置
  2. 使用低于 Gradle 4.6 以下的版本

ok,首先降版本的方案肯定被 pass 了,那就在我们项目的 gradle.properties 加上一段配置貌似就可以了,大功告成,so easy ~

too navie,当你加上这段配置后,你会发现仍旧无法通过编译,错误依旧,为此,我专门检查了好几遍是不是少了个字母之类的,显然和这个没有一毛钱关系,这里不应该质疑自己作为一名 CV 战士的专业性。

其实是被异常描述里给误导了,至少我直觉上是直接去修改工程里的 gradle.properties ,实际上,你需要修改的是 ${HOME}/.gradle/gradle.properties ,当然也有更简单的方式,如图:

Gradle指南之从Groovy迁移到Kotlin

更多信息可以看这个回答: 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 重新写一遍,这样,会印象深刻一些。

这里以一个比较简单的示例工程说明一下:

Gradle指南之从Groovy迁移到Kotlin

我们分别对根目录的 settting.gradlebuild.gradle 以及 app 目录下的 build.gradle 进行重写,以我的操作路径为例(不同操作路径,可能遇到的问题不一样):

app/build.gradle -> setting.gradle -> build.gradle

说下几个需要注意的地方:

需要说明的一点,目前 Gradle 官方是支持 Groovy 脚本和 Kotlin 并存的,虽然我感觉支持的并不太好

1. android 配置项无法自动被识别出来,如图所示:

Gradle指南之从Groovy迁移到Kotlin

解决办法:不用管,直接写一个配置项出来,然后 sync 同步一下就可以了,如图:

Gradle指南之从Groovy迁移到Kotlin

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")
复制代码

好了,如果你没遇到其他问题的话,到这里基本就已经大功告成了!

另外,本文的示例工程我已经放到 GitHub 上了,各位感兴趣的可以去看下~

总结

首先对于 Gradle 这么快就支持 Kotlin DSL,我还是感到很惊喜的,其实,费了不少时间这么折腾了一下,实际上,如果一定要说作用的话,可能确实没有什么作用。

但是,我觉得好处还是要说一说的,对于使用 Kotlin 开发的小伙伴来说,首先开发语言和构建语言统一了,之前想写构建脚本,还需要去学习 Groovy。现在直接可以愉快的用 Kotlin 去写 Gradle 构建脚本了。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ruby on Rails Tutorial

Ruby on Rails Tutorial

Michael Hartl / Addison-Wesley Professional / 2012-8-6 / USD 44.99

"Ruby on Rails(TM) Tutorial by Michael Hartl has become a must-read for developers learning how to build Rails apps." -Peter Cooper, Editor of Ruby Inside Using Rails, developers can build web applica......一起来看看 《Ruby on Rails Tutorial》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具