Kotlin on Android 必備的開發庫
Kotlin 被 Google 採納為 Android 開發一級程式語言,到現在也一年多了,我們團隊從去年 10 月份開始部分專案嘗試用 Kotlin 開發,到現在決定推廣到全部專案,因為一旦用上 Kotlin,你就不願意回去了。
如果你所在的專案也想嘗試,我建議你先對 Kotlin on Android 開發庫做一個充分的瞭解,畢竟這是開發的土壤,只有土壤肥沃了,才能長出優質的果實。
接下來介紹一下用 Kotlin 開發 Android 需要用到的庫,主要分為基礎庫和拓展庫。
一、基礎庫
以下都是建立專案時 IDE 自動會新增的,做為 Kotlin 開發必須的基礎庫。
1、Kotlin 編譯指令碼
編譯 Kotlin 原始檔(.kt 編譯成 .class),由 JetBrains 開發。
配置方法:
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
2、Kotlin 語言
名稱空間kotlin.@
,由 JetBrains 開發,是 Kotlin 語言核心。參考資料ofollow,noindex">https://kotlinlang.org/docs/reference/using-gradle.html#targeting-android
配置方法:
首先,上面說的編譯指令碼要起作用,要新增kotlin-android
外掛。
apply plugin: 'kotlin-android'
其次,依賴 Kotlin 標準庫,這是語言的核心。
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
3、Kotlin Android Extension
名稱空間kotlinx.android.@
,由 JetBrains 開發,提供 View Binding、Parcelable 封裝,提升開發體驗,參考資料https://kotlinlang.org/docs/tutorials/android-plugin.html
。
配置方法:
apply plugin: 'kotlin-android-extensions'
二、拓展庫
上面說了基礎庫,有了基礎庫你就可以開始在專案中使用 Kotlin 了,解決了能不能用的問題 。下面要介紹的拓展庫,是解決你用得爽不爽的問題 。
1、Anko
名稱空間org.jetbrains.anko.@
,由 JetBrains 開發的專門針對 Android 的整合庫,目的在於提升開發體驗,涉及 Intent、彈框、Toast、日誌、資源、資料庫、程式碼佈局、協程,參考資料https://github.com/Kotlin/anko/wiki
配置方法:
a. 新增依賴(包含所有模組):
implementation "org.jetbrains.anko:anko:$anko_version”
b. 按需依賴:
// Anko Commons implementation "org.jetbrains.anko:anko-commons:$anko_version"
// Anko Layouts implementation "org.jetbrains.anko:anko-sdk25:$anko_version" // sdk15, sdk19, sdk21, sdk23 are also available implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
// Coroutine listeners for Anko Layouts implementation "org.jetbrains.anko:anko-sdk25-coroutines:$anko_version" implementation "org.jetbrains.anko:anko-appcompat-v7-coroutines:$anko_version"
// Anko SQLite implementation "org.jetbrains.anko:anko-sqlite:$anko_version"
2、Android KTX
名稱空間androidx.@
,Google 官方開發的 Kotlin Android 拓展庫,目的在於提供 Android API 的拓展,涉及 Android 開發的方方面面。屬於 JetPack 的一部分。參考資料https://developer.android.com/kotlin/ktx
配置方法,按模組新增依賴:
implementation 'androidx.core:core-ktx:1.0.0-alpha1’ implementation 'androidx.fragment:fragment-ktx:1.0.0-alpha1’ ……
模組列表參考上述地址。
3、Anko 和 Android KTX 的區別
根據 AndroidKTX 官方介紹:https://developer.android.com/kotlin/ktx
The purpose of Android KTX is to make Android development with Kotlin more concise, pleasant, and idiomatic by leveraging Kotlin language features such as extension functions/properties, lambdas, named parameters, and parameter default values. Android KTX does not add any new features to the existing Android APIs.
根據 Anko 官方介紹:https://github.com/Kotlin/anko
Anko is aKotlin library which makes Android application development faster and easier. It makes your code clean and easy to read, and lets you forget about rough edges of the Android SDK for Java.
我們得出二者最根本的區別是:Android KTX 只是對 Android API 的拓展,不提供功能;而 Anko 提供了更多的 Android 沒有的API。
4、Anko 和 KTX 使用建議
雖然 KTX 是趨勢,Google 以後會大推。
但是,到目前為止 KTX 都沒有釋出第一個穩定版本;同時,如果是歷史專案,成本會比較大,需要把之前的android.support.@
全部換成androidx.@
,否則出現此類錯誤:
error: failed linking references. error: resource android:attr/fontStyle not found. Message{kind=ERROR, text=error: resource android:attr/fontStyle not found., sources=[/Users/huangshibiao/.gradle/caches/transforms-1/files-1.1/appcompat-v7-25.4.0.aar/a7545949dee561c01597e2709420c243/res/values/values.xml:214:5-69], original message=, tool name=Optional.of(AAPT)} error: resource android:attr/fontStyle not found. Message{kind=ERROR, text=error: resource android:attr/fontStyle not found., sources=[/Users/huangshibiao/.gradle/caches/transforms-1/files-1.1/appcompat-v7-25.4.0.aar/a7545949dee561c01597e2709420c243/res/values/values.xml:214:5-69], original message=, tool name=Optional.of(AAPT)}
另一方面,Anko 相對比較成熟。
所以,截止當前,最好的方式是優先使用 Anko,等 Android KTX 成熟,然後再各取所長 。