一当编、前言
KMM 全稱 Kotlin Multiplatform Mobile,它是一套基于 Kolin 語言進行跨平臺開發(fā)的技術框架徒溪。主要用于移動端 Android忿偷、iOS的邏輯代碼復用,后續(xù)借助 Compose UI 也可以實現(xiàn) UI 層面的代碼復用词渤。
官方給的教程都是如何新建一個 KMM 的工程牵舱,并不適用在現(xiàn)有項目中接入,因此需要結合已有的項目缺虐,針對性的接入 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)有項目中接入KMM
1剪芍、安裝 KMM 插件
在 Android Studio 的插件功能中塞淹,搜索 Kotlin Multiplatform Mobile
進行安裝。
2罪裹、新建 KMM Module
這里有個需要注意的地方饱普,iOS framework distribution
需要選擇 iOS 接入的方式,一般選擇 Regular framework
即可状共,點擊 Finish 創(chuàng)建一個 KMM Module套耕。
3、了解下 KMM Module 的目錄
- androidMain – Android 差異化代碼
- commonMain – 通用邏輯代碼
- iosMain – iOS 差異化代碼
- build.gradle.kts – Module 的 gradle 配置(依賴峡继、插件等)
如果新建的是一個 KMM 工程冯袍,則詳細的目錄結構如下,內容會更豐富一點,而新建 KMM Module 的方式康愤,只包含下面的 shared 目錄內容儡循。
├── androidApp # 實際 Android APP Module
├── build.gradle.kts # 工程根 Gradle 配置
├── gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── iosApp # 實際的 iOS 工程根目錄
├── local.properties
├── settings.gradle.kts
└── shared # KMM 模塊代碼目錄
├── build.gradle.kts # KMM 模塊 Gradle 配置(依賴、插件征冷、構建 Task择膝、cinterop 等配置)
└── src # 內部模塊形式都為 Gradle 工程 Module
├── androidMain # Android 差異化代碼,最終生成 AAR
├── commonMain # 共享模塊 API 代碼
├── iosMain # iOS 差異化代碼检激,
└── nativeInterop # 默認不會創(chuàng)建调榄,用來存放 *.def 文件,描述與 C/C++ 代碼呵扛,或 Apple Framework 交互時每庆,構建 klib 的配置
4、配置 gradle 插件版本
回到環(huán)境配置今穿,由于是現(xiàn)有項目缤灵,編譯出錯是很正常的事情,第一個錯誤蓝晒,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 以后,不再允許訪問不安全的鏈接晾嘶,如果堅持要訪問妓雾,需要添加屬性,如下:
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)代碼檢查更嚴格一些,如定義的非重載方法名不能和父類重名吏奸,空判斷等欢揖,對不規(guī)范的代碼進行適配。
9苦丁、刪除 kotlin-android-extensions 插件
升級 Kotlin 插件版本后浸颓,kotlin-android-extensions 插件已廢棄物臂,應替換為 view binding 插件旺拉,或者不使用這個插件产上。考慮到使用的地方并不多蛾狗,決定注釋掉該插件的聲明晋涣,修改查找 view 的方式。
10沉桌、修改 compileSdkVersion
編譯時提示存在其他版本的 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
因為升級了 Gradle 版本郁季,可能會對功能產生影響,建議進行回歸測試钱磅。