赵天韵,jiouquwen,夹竹桃ppt
android项目用gradle构建, 其脚本语言之前是groovy, 目前也提供了kotlin的支持, 所以可以迁移到kotlin.
官方的迁移文档: migrating build logic from groovy to kotlin
说明的是更通用的步骤.
本文通过一个具体的android项目来举例如何迁移, 文后附有sample.
.gradle
..gradle.kts
.优点:
缺点:
kotlin dsl在android studio上是全面支持的. 确保使用的ide版本较新.
使用最新版的gradle, 这样会包含最新版的kotlin dsl.
这一步利用ide的文件内搜索替换功能, 在想要改的.gradle
文件中, 全局替换'
到"
就行.
比如:
dependencies { classpath 'com.android.tools.build:gradle:3.5.3' }
变成了:
dependencies { classpath "com.android.tools.build:gradle:3.5.3" }
这一步的改动可见:
https://github.com/mengdd/kotlindslsample/commit/d3fc644e88fb461920a8b60a0430bb42f6a6053e
属性赋值用=
, 方法调用用()
.
有时候分不清是属性赋值还是方法调用, 可以先用=
试试, 如果报错再改为方法调用.
比如settings.gradle
在这一步, 由:
include ":app" rootproject.name="kotlindslsample"
变成了:
include(":app") rootproject.name = "kotlindslsample"
第一行是一个方法调用, 第二行是一个属性赋值.
项目根目录的build.gradle
中发生了两处变化, 变成了:
dependencies { classpath("com.android.tools.build:gradle:3.5.3")
和:
task clean(type: delete) { delete(rootproject.builddir) }
这一步的改动见:
https://github.com/mengdd/kotlindslsample/commit/b36a508e7d4f1d5d25c23a9772e1cfd9df363fad
上面两步只是准备工作, 经过上面两步, 你的脚本仍然是groovy的, 只不过现在更接近kotlin了.
真正的改变发生在这一步: 把后缀为.gradle
的文件重命名, 后缀改为.gradle.kts
.
没有必要全部改完, 这两种脚本是可以共存的.
改完之后各种报错了, 不要慌, 手动解决一下.
项目根目录的build.gradle.kts
比较好修, 只有全局变量和task的问题.
app/build.gradle.kts
中要改plugins, build type和依赖部分.
这里图简单, 删掉ext.kotlin_version = "1.3.61"
这句, 直接写:
dependencies { classpath("com.android.tools.build:gradle:3.5.3") classpath(kotlin("gradle-plugin", version = "1.3.61")) }
task本来是这:
task clean(type: delete) { delete(rootproject.builddir) }
现在要改成这样:
tasks.register("clean", delete::class) { delete(rootproject.builddir) }
应用plugins: 应用插件有apply和plugin两种方式.
强烈建议使用plugins {}
block.
所以app/build.gradle.kts
里面改成这样:
plugins { id("com.android.application") kotlin("android") kotlin("android.extensions") }
build type原先是这样写的:
buildtypes { release { minifyenabled = false proguardfiles(getdefaultproguardfile("proguard-android-optimize.txt"), "proguard-rules.pro") } }
现在改成这样:
buildtypes { getbyname("release") { isminifyenabled = false proguardfiles(getdefaultproguardfile("proguard-android.txt"), "proguard-rules.pro") } }
libs文件依赖原先是:
implementation(filetree(dir: "libs", include: ["*.jar"]))
需要改为:
implementation(filetree(mapof("dir" to "libs", "include" to listof("*.jar"))
另外kotlin的部分:
implementation(kotlin("stdlib-jdk7", org.jetbrains.kotlin.config.kotlincompilerversion.version))
这一步的改动见:
https://github.com/mengdd/kotlindslsample/commit/e392028b128bc83f1d183b880c479687d28cdcc3
有一个自动转换的工具:
https://github.com/bernaferrari/gradlekotlinconverter
mac上首先安装kscript:
brew install holgerbrandl/tap/kscript
然后把gradlekotlinconverter.kts
文件保存到根目录.
再运行:
kscript gradlekotlinconverter.kts build.gradle
和
kscript gradlekotlinconverter.kts app/build.gradle
进行文件的转换.
我测试了一下转换的结果并不是很完美, 还需要手动修改一下.
kts
之后, app/build.gradle
中android
关键字被标红.android
关键字了, 各种困惑找原因.there is a new script context available
.apply context
就可以了.
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio 解决logcat无过滤工具栏的操作
Android Studio 恢复小窗口停靠模式(Docked Mode)
Android studio保存logcat日志到本地的操作
Android Studio快捷键生成TAG、Log.x日志输出介绍
网友评论