赞
踩
众所周知,我们在 Android Studio 是使用 Gradle 来编译的,Gradle 是一种基于 Groovy 语言的构建工具,我们平时看到的 build.gradle 中的语法结构其实就是 Groovy 提供的 DSL 功能。
DSL 的全称是领域特定语言(Domain Specific Language),它是编程语言赋予开发者的一种特殊能力,通过它我们可以编写出一些看似脱离其原始语法结构的代码,从而构建出一种专有的语法结构。
毫无疑问,Kotlin 是支持 DSL 的,而且 Gradle 是支持用 Kotlin 语言来编写 Gradle 的构建脚本的,并且 Gradle 官网 也给出了 Groovy 迁移 Kotlin 的指导文章。
我们来新建一个项目来从 0 将 Gradle 文件改造成由 Kotlin 编写的。
一个基于 Gradle 构建的 Android 项目,Gradle 的配置文件一般就只有以下这几种:
所以我们改造无非就是对这几个文件进行改造。
这个文件的主要功能就是负责我们项目中 Module 的声明,我们先来看下它原先的代码,如下所示:
include ':app'
rootProject.name = "KotlinGradleDSL"
这段代码很简单,就是声明了 app 这个主 Module,同时定义了我们 project 的名称,我们可以通过 kotlin 的语法进行改写,在改写之前我们先将文件的名字修改成 settings.gradle.kts,改造后的代码如下所示:
include("app")
rootProject.name = "KotlinGradleDSL"
rootProject.buildFileName = "build.gradle.kts"
同样我们需要将 build.gradle 的文件名改成 build.gradle.kts,我们先来看下它原先的代码,如下所示:
buildscript { ext.kotlin_version = "1.4.31" repositories { google() jcenter() } dependencies { classpath "com.android.tools.build:gradle:4.1.2" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
改造后的代码如下所示:
buildscript { val gradle_version = "4.1.3" val kotlin_version = "1.4.31" repositories { google() jcenter() } dependencies { classpath("com.android.tools.build:gradle:$gradle_version") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") } } allprojects { repositories { google() jcenter() } } tasks { val clean by registering(Delete::class) { delete(buildDir) } }
在 Groovy 中,我们有一个 ext 的扩展,但是在 Kotlin 中是没有的,所以我们只能自己先声明一个局部变量,然后通过字符串模板引入,还有就是 classpath 引入的全局依赖,我们是要用大括号括起来,还有一个 clean 的任务,这个也是需要改写的。
接下来,我们来改写一下内容最多的 app/build.gradle。
app/build.gradle 里面的内容很多,我们来看每个模块应该怎么改造。
Groovy 语法的插件引入如下所示:
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions'
}
利用 Kotlin 可以改造成下面这样:
plugins {
id("com.android.application")
kotlin("android")
kotlin("android.extensions")
}
Groovy 语法的 SDK 引入如下所示:
compileSdkVersion 30
buildToolsVersion "30.0.3"
利用 Kotlin 可以改造成下面这样:
compileSdkVersion(30
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。