在現(xiàn)有項(xiàng)目中使用KMM(一) - 搭建環(huán)境

一、前言

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)行安裝。

安裝插件.png

2、新建 KMM Module

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

新建KMM Module.png

3、了解下 KMM Module 的目錄

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

如果新建的是一個(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
KMMgradle插件版本要求.jpg

5、配置 gradle 版本

修改 gradle 插件版本后,最低支持的 gradle 版本也發(fā)生了變化,因此也需要同步修改 gradle 的版本,這里升級至 7.0.2。

6、添加 allowInsecureProtocol

由于 gradle 7.0 以后,不再允許訪問不安全的鏈接,如果堅(jiān)持要訪問,需要添加屬性,如下:


gradle7.0https.jpg
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 的方式。


kotlin-Android-extensions.jpg

10、修改 compileSdkVersion

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


compileSDK沖突.jpg

11、升級 JDK 版本

忘記在哪看到的說明,說 JDK 8 有問題,順手也升級了...

配置 JDK 11,并本地安裝 JDK 11,配置環(huán)境變量。

12、安裝Xcode

KMM 對 Xcode 的版本要求,需安裝符合版本的 Xcode,如果安裝符合版本的 Xcode,可能還需要升級你的 macOS 系統(tǒng)。


xcode版本要求.png

13、適配第三方 SDK

因?yàn)樯壛?Gradle 版本,可能會對功能產(chǎn)生影響,建議進(jìn)行回歸測試。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容