在開始用Kotlin撰寫一個專案架構前,我要先來說明一下我在引入套件時所發生的一個Kotlin工具問題。
那就是KAPT
和KSP
,根據這篇文章上線為止,kapt的官網顯示的資訊如下所示
kapt 處於維護模式。我們正在使其與最新的 Kotlin 和 Java 版本保持同步,但沒有計劃實現新功能。請使用Kotlin 符號處理 API (KSP)進行註釋處理。請參閱 KSP 支持的庫列表。
所以在我開始用Kotlin撰寫一份架構練習時就直接碰上了引用的套件工具進行維護的狀態,導致一直無法成功Sync
,這時就一直上網查找是否有替代的工具,這時就找到了KSP
這個工具套件,根據Kotlin官網所述,Kapt
以及KSP
皆是為Kotlin而生的註解處理工具。
kapt就是 (Kotlin 註解處理工具) 的縮寫,由於我並未真正操作到kapt,這邊只展示Kotlin官方所展示的如何將kapt套入到Android Studio中。
以下會展示兩種gradle,一種是Groovy DSL(.gradle)、另一種是Kotlin DSL(.gradle.kts)
plugins {
id "org.jetbrains.kotlin.kapt" version "1.9.10"
}
plugins {
// kapt plugin
kotlin("kapt") version "1.9.10"
}
這邊會放上兩個,一個是範例撰寫,引用的是hilt套件所需要的功能,另一個是官方的撰寫格式。
dependencies {
// ... 省略以上
kapt "com.google.dagger:hilt-compiler:2.44"
// 撰寫格式如下
kapt 'groupId:artifactId:version'
}
dependencies {
// ... 省略以上
kapt("com.google.dagger:hilt-android-compiler:2.44")
// 撰寫格式如下
kapt("groupId:artifactId:version")
}
KSP
是 (Kotlin的符號處理工具的簡稱)
Kotlin 符號處理 ( KSP ) 是一個 API,可用於開發輕量級編譯器外掛程式。KSP 提供了一個簡化的編譯器插件 API,它利用 Kotlin 的強大功能,同時將學習曲線保持在最低限度。與kapt相比,使用 KSP 的註解處理器的運作速度最多可達兩倍。
Library | Status |
---|---|
Room | 官方支援(Android Studio) |
RxHttp | 官方支援(Github) |
Glide | 官方支援(Github) |
Dagger | Dagger_ksp(alpha階段) |
Hilt | 正在進行中(與Dagger在相同網站中) |
建立build.gradle程式碼
plugins {
// ... 其他插件省略
id 'org.jetbrains.kotlin.jvm' version '1.9.10' apply false
}
buildscript {
dependencies {
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.10'
}
}
plugins {
// 其他套件省略
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
// ksp (Kotlin Symbol Processing) devtools dependencies
id("com.google.devtools.ksp") version "1.9.10-1.0.13" apply false
kotlin("jvm") version "1.9.10" apply false
}
buildscript {
dependencies {
classpath(kotlin("gradle-plugin", version = "1.9.10"))
}
}
plugins {
id 'com.google.devtools.ksp' version '1.9.10-1.0.13'
}
dependencies {
// ... 各個支持ksp的工具套件
ksp "...:version"
}
plugins {
// ...其他套件省略
id("org.jetbrains.kotlin.android")
id("com.google.devtools.ksp")
}
dependencies {
// ... 各個支持ksp的工具套件
ksp("...:version")
}
若是原本就在持續使用kapt
的開發者想要使用ksp
來替代kapt
,轉換的步驟也是十分簡單。
kapt
轉成ksp
就好了ksp
才能輕鬆轉換plugins {
id 'com.google.devtools.ksp' version '1.8.10-1.0.9' apply false
}
plugins {
id 'com.google.devtools.ksp'
}
都加入完成後進行Sync
,完成後就進行以下動作
dependencies {
// 將kapt開頭的去掉並更換成ksp開頭
// kapt 'androidx.room:room-compiler:2.5.0'
ksp 'androidx.room:room-compiler:2.5.0'
}
kapt與ksp都是Kotlin中的註解處理工具,ksp與kapt相比如下
Java
註解處理器,kapt
將Kotlin
程式碼編譯成 Java
存根,保留Java
註解處理器所關注的資訊。KSP
中的處理器不會從Java
的角度看待輸入程式,因為少了轉成Java
的處理的時間,所以整體的處理速度會比kapt
快KSP 旨在隱藏編譯器更改,最大限度地減少使用它的處理器的維護工作。KSP 的設計目的是不要與 JVM 綁定,以便將來可以更輕鬆地適應其他平台。
以上是今天的兩個Kotlin註解處理工具的初見概述,主要是概述一下kapt和ksp的各別用法,並講述如何將其引入到 AndroidStudio。
Kotlin Official_kapt_Overview
Kotlin Official_KSP_Overview
kapt轉換成KSP