一、前言
KMM 全称 Kotlin Multiplatform Mobile,它是一套基于 Kolin 语言进行跨平台开发的技术框架。主要用于移动端 Android、iOS的逻辑代码复用,后续借助 Compose UI 也可以实现 UI 层面的代码复用。
官方给的教程都是如何新建一个 KMM 的工程,并不适用在现有项目中接入,因此需要结合已有的项目,针对性的接入 KMM。
本篇介绍如何针对现有的 App,配置 KMM 开发环境。
二、配置后的环境
名称 | 旧版本 | 新版本 |
---|---|---|
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 |
三、开始在现有项目中接入KMM
1、安装 KMM 插件
在 Android Studio 的插件功能中,搜索 Kotlin Multiplatform Mobile
进行安装。
![](https://img.haomeiwen.com/i1460074/06ca02c16619e867.png)
2、新建 KMM Module
这里有个需要注意的地方,iOS framework distribution
需要选择 iOS 接入的方式,一般选择 Regular framework
即可,点击 Finish 创建一个 KMM Module。
![](https://img.haomeiwen.com/i1460074/a2aba7ba2ef3eab6.png)
3、了解下 KMM Module 的目录
- androidMain – Android 差异化代码
- commonMain – 通用逻辑代码
- iosMain – iOS 差异化代码
- build.gradle.kts – Module 的 gradle 配置(依赖、插件等)
![](https://img.haomeiwen.com/i1460074/87f690f55097342d.png)
如果新建的是一个 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 # 默认不会创建,用来存放 *.def 文件,描述与 C/C++ 代码,或 Apple Framework 交互时,构建 klib 的配置
4、配置 gradle 插件版本
回到环境配置,由于是现有项目,编译出错是很正常的事情,第一个错误,KMM 对 gradle 插件版本有要求,现升级至 7.0.0
- 最小版本:4.1
- 最大版本:7.4
![](https://img.haomeiwen.com/i1460074/7287f2a9960e1058.jpg)
5、配置 gradle 版本
修改 gradle 插件版本后,最低支持的 gradle 版本也发生了变化,因此也需要同步修改 gradle 的版本,这里升级至 7.0.2。
6、添加 allowInsecureProtocol
由于 gradle 7.0 以后,不再允许访问不安全的链接,如果坚持要访问,需要添加属性,如下:
![](https://img.haomeiwen.com/i1460074/f78166893435f579.jpg)
repositories {
maven {
url 'http://registry.caijj.net/repository/maven-andriod-google'
allowInsecureProtocol = true
}
...
}
7、修改 Kotlin 的插件版本
避免出现环境兼容性问题,选择性的将 Kotlin 插件版本升级到较新版本 1.8.0。
8、现有代码适配 Kotlin 语法
升级 kotlin 版本后,对一些静态代码检查更严格一些,如定义的非重载方法名不能和父类重名,空判断等,对不规范的代码进行适配。
9、删除 kotlin-android-extensions 插件
升级 Kotlin 插件版本后,kotlin-android-extensions 插件已废弃,应替换为 view binding 插件,或者不使用这个插件。考虑到使用的地方并不多,决定注释掉该插件的声明,修改查找 view 的方式。
![](https://img.haomeiwen.com/i1460074/bf45e27a11fd772b.jpg)
10、修改 compileSdkVersion
编译时提示存在其他版本的 compileSdkVersion ,需要统一版本号,现在统一为 31。
![](https://img.haomeiwen.com/i1460074/2d27a0cae8ba2a9d.jpg)
11、升级 JDK 版本
忘记在哪看到的说明,说 JDK 8 有问题,顺手也升级了...
配置 JDK 11,并本地安装 JDK 11,配置环境变量。
12、安装Xcode
KMM 对 Xcode 的版本要求,需安装符合版本的 Xcode,如果安装符合版本的 Xcode,可能还需要升级你的 macOS 系统。
![](https://img.haomeiwen.com/i1460074/f96ed4b72daa5dfe.png)
13、适配第三方 SDK
因为升级了 Gradle 版本,可能会对功能产生影响,建议进行回归测试。
网友评论