由于業(yè)務(wù)需求和人力的現(xiàn)狀,采用了Kotlin實(shí)現(xiàn)業(yè)務(wù)邏輯,iOS和Android分別實(shí)現(xiàn)UI繪制的開發(fā)方式。
1、構(gòu)建環(huán)境+創(chuàng)建首個(gè)跨平臺(tái)KMM項(xiàng)目
可參考Kotlin官方指導(dǎo)創(chuàng)建和體驗(yàn)首個(gè)跨平臺(tái)項(xiàng)目。
- 安裝好 Android studio后,先下載插件:Preferences - Plugins - Marketplace - 搜索 Kotlin Multiplatform Mobile 并安裝。

screenshot-20220314-160641.png
- 新建項(xiàng)目,選擇KMM app

screenshot-20220314-160359.png
- 構(gòu)建成功后,選擇iosApp進(jìn)行編譯和運(yùn)行

screenshot-20220314-142249.png
- 可以構(gòu)建不同模擬器進(jìn)行編譯

截屏2022-03-14 下午2.23.33.png

screenshot-20220314-142404.png
2、KMM項(xiàng)目結(jié)構(gòu)
KMM項(xiàng)目主要為三部分組成:
- 共享模塊
- Android app
- iOS app

項(xiàng)目結(jié)構(gòu)如下所示:

screenshot-20220314-153802.png
3、共享代碼+分平臺(tái)代碼
- 共享代碼放在 commonMain 的文件夾中,多平臺(tái)可直接調(diào)用

screenshot-20220314-161302.png
- 因平臺(tái)差異,須分別實(shí)現(xiàn)的,則放在各自平臺(tái)的文件夾中,如 iosMain,但是需要 expect-actual 配對(duì)實(shí)現(xiàn),具體如下:
- commonMain 實(shí)現(xiàn)接口申明:expect
package com.example.xqkmmdemo
expect class Platform() {
val platform: String
}
- iosMain或androidMain 進(jìn)行接口實(shí)現(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
// 引入原生庫(kù)
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項(xiàng)目中自動(dòng)創(chuàng)建的iosApp項(xiàng)目,即可發(fā)現(xiàn)客戶端是如何調(diào)用kotlin的方法。

screenshot-20220315-113558.png