網(wǎng)絡(luò)研討會(huì)視頻:以 KMM x Ktor 打造全平臺(tái)應(yīng)用
來源:JetBrains 編輯:QQ123 2021-06-11 11:04:39 加入收藏
導(dǎo)讀
Kotlin 支持多平臺(tái)開發(fā)的特性一直受到眾多開發(fā)者的期待,畢竟能用一種語言開發(fā)前端(Kotlin/JS)、后端(Kotlin/JVM)、Android(Kotlin/JVM)及 iOS(Kotlin/Native)是非常吸引人的。2020 年 8 月,Kotlin 團(tuán)隊(duì)正式發(fā)布 1.4 版,并推出KMM(Kotlin Multiplatform Mobile)及其同名插件,使 Kotlin 開發(fā)者可以用一個(gè)語言開發(fā) Android、iOS 雙平臺(tái)的 App。本次網(wǎng)絡(luò)研討會(huì)就由兩位講師為大家演示如何用 KMM 及 Ktor 兩個(gè)框架,從 Mobile 到 Backend 打造全平臺(tái)應(yīng)用。
主題分享
本次分享由攜程機(jī)票移動(dòng)端資深工程師禹昂及 JetBrains 技術(shù)布道師圣佑兩人合力完成一個(gè) RSS Reader 應(yīng)用,由禹昂以 KMM 實(shí)現(xiàn) Mobile App,再串接由圣佑以 Ktor 實(shí)現(xiàn)的 Backend API。
演示由后端開始,圣佑首先介紹由 JetBrains 團(tuán)隊(duì)以 100% Kotlin 打造的 Web 框架 Ktor,其輕量、語法簡(jiǎn)潔易學(xué)是它的特色,非常適合用于網(wǎng)站、API 及微服務(wù)。從 IntelliJ IDEA 的插件市場(chǎng)安裝好 Ktor 插件后,就可以快速創(chuàng)建項(xiàng)目。接著從 API 規(guī)格設(shè)計(jì)出對(duì)應(yīng)的 JSON 內(nèi)容,再轉(zhuǎn)成 Kotlin Data Class。為了讓所有 RSS 文章能存儲(chǔ)在數(shù)據(jù)庫里,圣佑也演示了如何集成同樣由 JetBrains 團(tuán)隊(duì)打造的 Exposed 框架,并使用 H2 數(shù)據(jù)庫來存儲(chǔ) RSS 數(shù)據(jù)。最后,在配置好項(xiàng)目的依賴后,開始解析 Kotlin 官方博客的 RSS 文件,整理并排序后回傳 JSON 給前端讀取。
接著由禹昂接手介紹 KMM。禹昂首先說明 KMM 的原理及工作方式,通過 Kotlin Multiplatform 的架構(gòu),以 Common、Android 及 iOS 三種不同 SourceSet 打包出不同的產(chǎn)物即可跨平臺(tái)。為了簡(jiǎn)化開發(fā)工作,Kotlin 團(tuán)隊(duì)推出適用于 macOS Android Studio KMM 插件,安裝后即可快速創(chuàng)建 KMM 項(xiàng)目,并可直接從 Android Studio 編譯兩個(gè)平臺(tái)的代碼并啟動(dòng)模擬器預(yù)覽。接著,禹昂從多平臺(tái)依賴配置、expect/actual 聲明與實(shí)現(xiàn)、common 層聲明的 Data Class、集成 Ktor HTTP Client、suspend 式的網(wǎng)絡(luò)請(qǐng)求及 UI 代碼等主題做演示,讓大家迅速了解 KMM 的實(shí)現(xiàn)方式、開發(fā)生態(tài)及現(xiàn)階段的優(yōu)缺點(diǎn)。
演示完后的問答環(huán)節(jié)非常熱烈,在這邊將同學(xué)們的提問整理如下:
問答
Q. KMM 的性能如何?
禹昂:KMM 在 Android 平臺(tái)上跟原本的開發(fā)方式?jīng)]有太大的部份,在性能上沒有太大的區(qū)別。不過在 iOS 平臺(tái)上,因?yàn)檎麄€(gè)跟 Objective-C 的 Runtime、垃圾回收、對(duì)象分配器都是不一樣的,所以會(huì)有些差別,但目前還沒有詳細(xì)跟 Objective-C 對(duì)比的數(shù)據(jù)。自 Kotlin 1.4 發(fā)布后可以啟用一個(gè)實(shí)驗(yàn)性的對(duì)象分配器,經(jīng)我自己本地測(cè)試可以提升不少性能,但還需時(shí)間完善,大家有興趣的話可以關(guān)注下。
Q. KMM 國內(nèi)有公司在用嗎?
禹昂:目前攜程有在用,一些功能也已經(jīng)上線了,目前是以邏輯性的功能為主。
Q. Native 的文件系統(tǒng)現(xiàn)在如何?
禹昂:目前還是在用平臺(tái)相關(guān)的 API,未來 kotlinx-io 庫有計(jì)劃會(huì)重構(gòu)來支持多平臺(tái)的文件 IO。
Q. Ktor 有沒有計(jì)劃替代 Spring?
圣佑:Ktor 和 Spring 的設(shè)計(jì)理念不同,所以我覺得兩者不是一種替代的關(guān)系,而是應(yīng)該將 Ktor 視為是 Spring 之外的新選擇,是一種更輕量、不依賴 Annotation 的方案。若你原本就是 Android 開發(fā)者,那 Ktor 也是從 Mobile 轉(zhuǎn)到 Backend 時(shí),一個(gè)比較簡(jiǎn)單易上手的選擇。對(duì)于一些小型服務(wù)來說,許多 Android 開發(fā)者就能自己獨(dú)立完成 Mobile 及 Backend API。
Q. Compose + Kotlin Native 有這個(gè)可能嗎?
禹昂:這個(gè)要等官方支持。我覺得后面官方會(huì)支持,不過這中間要搞定許多跨語言交互的問題。
Q. Ktor 有稍重的后端 Demo 嗎?
圣佑:可以參考 Ktor 官方文檔里的系列示例。
相信大家看完兩人的實(shí)作后,對(duì)于 KMM 及 Ktor 這兩種技術(shù)有更深入的了解。而從兩人通力合作的過程中,也能一窺前后端串接的技巧,對(duì)全端開發(fā)會(huì)有更深刻的體認(rèn)。希望本次網(wǎng)絡(luò)研討會(huì)的內(nèi)容對(duì)大家有幫助,我們下次見!
歷
Kotlin Multiplatform Mobile 現(xiàn)已推出 Alpha 版本
史
網(wǎng)絡(luò)研討會(huì):Flutter x Ktor 打造跨平臺(tái)全端應(yīng)用
文
mPaaS 插件正式上架 Jetbrains Market Place
章
Space-集成的團(tuán)隊(duì)協(xié)作環(huán)境,現(xiàn)已正式發(fā)布!
評(píng)論comment