由于業(yè)務(wù)需求和人力的現(xiàn)狀孝赫,采用了Kotlin實現(xiàn)業(yè)務(wù)邏輯招驴,iOS和Android分別實現(xiàn)UI繪制的開發(fā)方式脆侮。
1蟀给、構(gòu)建環(huán)境+創(chuàng)建首個跨平臺KMM項目
可參考Kotlin官方指導(dǎo)創(chuàng)建和體驗首個跨平臺項目。
- 安裝好 Android studio后叉跛,先下載插件:Preferences - Plugins - Marketplace - 搜索 Kotlin Multiplatform Mobile 并安裝松忍。
screenshot-20220314-160641.png
- 新建項目,選擇KMM app
screenshot-20220314-160359.png
- 構(gòu)建成功后筷厘,選擇iosApp進行編譯和運行
screenshot-20220314-142249.png
- 可以構(gòu)建不同模擬器進行編譯
截屏2022-03-14 下午2.23.33.png
screenshot-20220314-142404.png
2鸣峭、KMM項目結(jié)構(gòu)
KMM項目主要為三部分組成:
- 共享模塊
- Android app
- iOS app
項目結(jié)構(gòu)如下所示:
screenshot-20220314-153802.png
3伟桅、共享代碼+分平臺代碼
- 共享代碼放在 commonMain 的文件夾中,多平臺可直接調(diào)用
screenshot-20220314-161302.png
- 因平臺差異叽掘,須分別實現(xiàn)的,則放在各自平臺的文件夾中玖雁,如 iosMain更扁,但是需要 expect-actual 配對實現(xiàn),具體如下:
- commonMain 實現(xiàn)接口申明:expect
package com.example.xqkmmdemo
expect class Platform() {
val platform: String
}
- iosMain或androidMain 進行接口實現(xiàn):actual
package com.example.xqkmmdemo
import platform.UIKit.UIDevice
actual class Platform actual constructor() {
actual val platform: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
}
4赫冬、Kotlin和客戶端交互
4.1浓镜、 Kotlin 直接調(diào)用原生系統(tǒng)方法
package com.example.xqkmmdemo
// 引入原生庫
import platform.UIKit.UIDevice
actual class Platform actual constructor() {
// 調(diào)用原生系統(tǒng)方法
actual val platform: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
}
4.2、 客戶端調(diào)用Kotlin方法
查看KMM項目中自動創(chuàng)建的iosApp項目劲厌,即可發(fā)現(xiàn)客戶端是如何調(diào)用kotlin的方法膛薛。
screenshot-20220315-113558.png