Kotlin on Android 開發環境介紹

Cavabiao發表於2018-09-15

Kotlin 被 Google 採納為 Android 開發一級程式語言,到現在也一年多了,我們團隊從去年 10 月份開始部分專案嘗試用 Kotlin 開發,到現在決定推廣到全部專案,因為一旦用上 Kotlin,你就不願意回去了。

如果你所在的專案也想嘗試,我建議你先對 Kotlin on Android 開發環境—其實就是必備的庫做一個充分的瞭解,畢竟這是開發的土壤,只有土壤肥沃了,才能長出優質的果實。

接下來分別從基礎庫和擴充庫兩方面做一下介紹。

一、基礎庫

以下都是建立專案時 IDE 自動會新增的,做為 Kotlin 開發必須的基礎庫。

1、Kotlin 編譯指令碼

作用是提供編譯 Kotlin 原始檔(.kt 編譯成 .class)的指令碼,由 JetBrains 開發。 配置方法:

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
複製程式碼

2、Kotlin 語言

名稱空間 kotlin.@,由 JetBrains 開發,是 Kotlin 語言核心。參考資料 kotlinlang.org/docs/refere…

配置方法: 首先,上面說的編譯指令碼要起作用,要新增 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 封裝,提升開發體驗,參考資料 kotlinlang.org/docs/tutori…。 配置方法:

apply plugin: 'kotlin-android-extensions'
複製程式碼

二、擴充庫

上面說了基礎庫,有了基礎庫你就可以開始在專案中使用 Kotlin 了,解決了能不能用的問題。下面要介紹的擴充庫,是解決你用得爽不爽的問題

1、Anko

名稱空間 org.jetbrains.anko.@,由 JetBrains 開發的專門針對 Android 的整合庫,目的在於提升開發體驗,涉及 Intent、彈框、Toast、日誌、資源、資料庫、程式碼佈局、協程,參考資料 github.com/Kotlin/anko… 配置方法: 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 的一部分。參考資料 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 的區別

根據 Android KTX 官方介紹: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 官方介紹:github.com/Kotlin/anko

Anko is a Kotlin 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 和 Android KTX 使用建議

雖然 Android KTX 是趨勢,Google 以後會大推。 但是,到目前為止 Android 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 成熟,然後再各取所長

相關文章