Kotlin 被 Google 采納為 Android 開發(fā)一級編程語言堂污,到現(xiàn)在也一年多了棉圈,我們團隊從去年 10 月份開始部分項目嘗試用 Kotlin 開發(fā)镊辕,到現(xiàn)在決定推廣到全部項目老厌,因為一旦用上 Kotlin省咨,你就不愿意回去了。
如果你所在的項目也想嘗試耸黑,我建議你先對 Kotlin on Android 開發(fā)環(huán)境—其實就是必備的庫做一個充分的了解桃煎,畢竟這是開發(fā)的土壤,只有土壤肥沃了崎坊,才能長出優(yōu)質(zhì)的果實备禀。
接下來分別從基礎(chǔ)庫和拓展庫兩方面做一下介紹。
一奈揍、基礎(chǔ)庫
以下都是創(chuàng)建項目時 IDE 自動會添加的曲尸,做為 Kotlin 開發(fā)必須的基礎(chǔ)庫。
1男翰、Kotlin 編譯腳本
作用是提供編譯 Kotlin 源文件(.kt 編譯成 .class)的腳本另患,由 JetBrains 開發(fā)。
配置方法:
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
2蛾绎、Kotlin 語言
命名空間 kotlin.@
昆箕,由 JetBrains 開發(fā),是 Kotlin 語言核心租冠。參考資料 https://kotlinlang.org/docs/reference/using-gradle.html#targeting-android
配置方法:
首先鹏倘,上面說的編譯腳本要起作用,要添加 kotlin-android
插件顽爹。
apply plugin: 'kotlin-android'
其次纤泵,依賴 Kotlin 標(biāo)準(zhǔn)庫,這是語言的核心镜粤。
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
3捏题、Kotlin Android Extension
命名空間 kotlinx.android.@
,由 JetBrains 開發(fā)肉渴,提供 View Binding公荧、Parcelable 封裝,提升開發(fā)體驗同规,參考資料 https://kotlinlang.org/docs/tutorials/android-plugin.html循狰。
配置方法:
apply plugin: 'kotlin-android-extensions'
二、拓展庫
上面說了基礎(chǔ)庫券勺,有了基礎(chǔ)庫你就可以開始在項目中使用 Kotlin 了绪钥,解決了能不能用的問題。下面要介紹的拓展庫朱灿,是解決你用得爽不爽的問題昧识。
1钠四、Anko
命名空間 org.jetbrains.anko.@
盗扒,由 JetBrains 開發(fā)的專門針對 Android 的集成庫跪楞,目的在于提升開發(fā)體驗,涉及 Intent侣灶、彈框甸祭、Toast、日志褥影、資源池户、數(shù)據(jù)庫、代碼布局凡怎、協(xié)程校焦,參考資料 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 官方開發(fā)的 Kotlin Android 拓展庫寨典,目的在于提供 Android API 的拓展,涉及 Android 開發(fā)的方方面面房匆。屬于 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 的區(qū)別
根據(jù) Android KTX 官方介紹: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.
根據(jù) Anko 官方介紹:https://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.
我們得出二者最根本的區(qū)別是:Android KTX 只是對 Android API 的拓展,不提供功能岳链;而 Anko 提供了更多的 Android 沒有的API花竞。
4、Anko 和 Android KTX 使用建議
雖然 Android KTX 是趨勢宠页,Google 以后會大推左胞。
但是,到目前為止 Android KTX 都沒有發(fā)布第一個穩(wěn)定版本举户;同時烤宙,如果是歷史項目,成本會比較大俭嘁,需要把之前的 android.support.@
全部換成 androidx.@
躺枕,否則出現(xiàn)此類錯誤:
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 相對比較成熟供填。
所以拐云,截止當(dāng)前,最好的方式是優(yōu)先使用 Anko近她,等 Android KTX 成熟叉瘩,然后再各取所長。