一、前言
KMM 全稱 Kotlin Multiplatform Mobile,它是一套基于 Kolin 語言進(jìn)行跨平臺開發(fā)的技術(shù)框架。主要用于移動(dòng)端 Android、iOS的邏輯代碼復(fù)用,后續(xù)借助 Compose UI 也可以實(shí)現(xiàn) UI 層面的代碼復(fù)用。
官方給的教程都是如何新建一個(gè) KMM 的工程,并不適用在現(xiàn)有項(xiàng)目中接入,因此需要結(jié)合已有的項(xiàng)目,針對性的接入 KMM。
本篇介紹如何針對現(xiàn)有的 App,配置 KMM 開發(fā)環(huán)境。
二、配置后的環(huán)境
| 名稱 | 舊版本 | 新版本 |
|---|---|---|
| Gradle | 6.5 | 7.0.2 |
| Gradle 插件 | 4.0.1 | 7.0.0 |
| Kotlin | 1.5.30 | 1.8.0 |
| JDK | 1.8 | 11 |
| Xcode | 無 | 14.3.1 |
三、開始在現(xiàn)有項(xiàng)目中接入KMM
1、安裝 KMM 插件
在 Android Studio 的插件功能中,搜索 Kotlin Multiplatform Mobile 進(jìn)行安裝。

2、新建 KMM Module
這里有個(gè)需要注意的地方,iOS framework distribution 需要選擇 iOS 接入的方式,一般選擇 Regular framework 即可,點(diǎn)擊 Finish 創(chuàng)建一個(gè) KMM Module。

3、了解下 KMM Module 的目錄
- androidMain – Android 差異化代碼
- commonMain – 通用邏輯代碼
- iosMain – iOS 差異化代碼
- build.gradle.kts – Module 的 gradle 配置(依賴、插件等)

如果新建的是一個(gè) KMM 工程,則詳細(xì)的目錄結(jié)構(gòu)如下,內(nèi)容會更豐富一點(diǎn),而新建 KMM Module 的方式,只包含下面的 shared 目錄內(nèi)容。
├── androidApp # 實(shí)際 Android APP Module
├── build.gradle.kts # 工程根 Gradle 配置
├── gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── iosApp # 實(shí)際的 iOS 工程根目錄
├── local.properties
├── settings.gradle.kts
└── shared # KMM 模塊代碼目錄
├── build.gradle.kts # KMM 模塊 Gradle 配置(依賴、插件、構(gòu)建 Task、cinterop 等配置)
└── src # 內(nèi)部模塊形式都為 Gradle 工程 Module
├── androidMain # Android 差異化代碼,最終生成 AAR
├── commonMain # 共享模塊 API 代碼
├── iosMain # iOS 差異化代碼,
└── nativeInterop # 默認(rèn)不會創(chuàng)建,用來存放 *.def 文件,描述與 C/C++ 代碼,或 Apple Framework 交互時(shí),構(gòu)建 klib 的配置
4、配置 gradle 插件版本
回到環(huán)境配置,由于是現(xiàn)有項(xiàng)目,編譯出錯(cuò)是很正常的事情,第一個(gè)錯(cuò)誤,KMM 對 gradle 插件版本有要求,現(xiàn)升級至 7.0.0
- 最小版本:4.1
- 最大版本:7.4

5、配置 gradle 版本
修改 gradle 插件版本后,最低支持的 gradle 版本也發(fā)生了變化,因此也需要同步修改 gradle 的版本,這里升級至 7.0.2。
6、添加 allowInsecureProtocol
由于 gradle 7.0 以后,不再允許訪問不安全的鏈接,如果堅(jiān)持要訪問,需要添加屬性,如下:

repositories {
maven {
url 'http://registry.caijj.net/repository/maven-andriod-google'
allowInsecureProtocol = true
}
...
}
7、修改 Kotlin 的插件版本
避免出現(xiàn)環(huán)境兼容性問題,選擇性的將 Kotlin 插件版本升級到較新版本 1.8.0。
8、現(xiàn)有代碼適配 Kotlin 語法
升級 kotlin 版本后,對一些靜態(tài)代碼檢查更嚴(yán)格一些,如定義的非重載方法名不能和父類重名,空判斷等,對不規(guī)范的代碼進(jìn)行適配。
9、刪除 kotlin-android-extensions 插件
升級 Kotlin 插件版本后,kotlin-android-extensions 插件已廢棄,應(yīng)替換為 view binding 插件,或者不使用這個(gè)插件??紤]到使用的地方并不多,決定注釋掉該插件的聲明,修改查找 view 的方式。

10、修改 compileSdkVersion
編譯時(shí)提示存在其他版本的 compileSdkVersion ,需要統(tǒng)一版本號,現(xiàn)在統(tǒng)一為 31。

11、升級 JDK 版本
忘記在哪看到的說明,說 JDK 8 有問題,順手也升級了...
配置 JDK 11,并本地安裝 JDK 11,配置環(huán)境變量。
12、安裝Xcode
KMM 對 Xcode 的版本要求,需安裝符合版本的 Xcode,如果安裝符合版本的 Xcode,可能還需要升級你的 macOS 系統(tǒng)。

13、適配第三方 SDK
因?yàn)樯壛?Gradle 版本,可能會對功能產(chǎn)生影響,建議進(jìn)行回歸測試。