当前位置: 首页 > news >正文

kmp需要技能

A. 只做 Android + 写共享层(大多数场景)

  • 不需要写 iOS UI 或 Swift。

  • 建议掌握这点“最低 iOS 常识”(一天能补齐):

    1. Xcode 打包/跑模拟器:会用 gradlew :shared:packForXcode 或生成 XCFramework,导入 Xcode 运行。

    2. 桥接概念suspend 到 Swift 的调用需要 completion 或用 KMP-NativeCoroutines(知道名字即可)。

    3. expect/actual 在 iOS 侧放个最小实现(如设备名、文件路径)。

    4. 线程/主线程:iOS UI 只能在主线程更新(Shared 里避免直接触 UI)。

    5. 内存管理:知道 Kotlin/Native 的对象在 Swift 侧是强引用,避免循环引用(基本不会碰到就好)。

这个级别足够你:独立产出 shared 模块、在 Android 落地、把 iOS 产物交给同事集成。

B. 你还要负责把 shared 真正接到 iOS App(少数场景)

  • 需要会一点 Swift/SwiftUI 基础(调用 framework、把结果喂给 View)。

  • 会选一个依赖管理策略:SwiftPM(优先)/CocoaPods

  • 会处理 协程到 Swift 的桥接(推荐 KMP-NativeCoroutines)。

C. 你要做跨端负责人/独立开发者

  • 再补:Swift 并发(async/await)、Xcode 构建配置、崩溃定位(Xcode Organizer)、签名与发布流程。

实操建议(给你最省力的路线)

  1. 现在就按 A 路线:先把 shared 跑通到 Android;

  2. 抽 2 小时补齐“iOS 最小集合”(上面 5 点);

  3. 需要你亲自接 iOS 时,再补 B 路线 的 Swift 基础即可。

判断题(帮你拍板)

  • 团队里有 iOS 同学负责集成 → 你不必会 iOS,只需会最小集合 ✅

  • 你得自己把 shared 接到 iOS App → 学一点 Swift/SwiftUI(B)✅

  • 你要主导跨端架构、发包、排坑 → 学到 C ✅

如果你愿意,我可以按 A 路线 给你一份“iOS 最小集合速记卡”(含命令、Gradle 任务、Xcode 导入步骤、Swift 调用样例),直接照着走就能把 shared 给到 iOS。

您说:

kmp 要懂的语言和技术

ChatGPT 说:

下面这份清单直接回答“做 KMP 需要懂哪些语言与技术”,按必备 → 进阶 → 可选分层,适合你(Android 背景)快速上手与落地。

必备(必须会)

语言/语法

  • Kotlin:协程(suspend/Flow)、sealed classinlineexpect/actual、多平台编译基础。

  • Gradle KTS:能读写 build.gradle.kts,配置 kotlin { targets / sourceSets } 与依赖。

KMP 核心

  • Source SetscommonMain/commonTest(共享)、androidMain/iosMain(平台实现)。

  • TargetsandroidTarget()iosArm64/iosSimulatorArm64/iosX64

  • expect/actual:公共层声明接口,平台层提供实现。

  • 并发/内存:了解 Kotlin/Native 新内存模型(避免跨线程共享可变对象;倾向不可变+消息传递)。

基础库(跨平台通用)

  • Coroutineskotlinx-coroutines-core

  • Serializationkotlinx-serialization-json

  • 网络Ktor Clientcore + Android 用 okhttp、iOS 用 darwin

  • (可选但常用)SQLDelight 作为跨平台 DB

工具链

  • Android Studio/Gradle 跑 Android

  • Xcode 能编译 iOS framework(会打开模拟器/真机运行)


进阶(强烈建议)

平台胶水

  • iOS 最小集合:Xcode 基本操作、Swift 调用 Kotlin framework 的方法。

  • 协程到 Swift 桥接:了解回调/KMP-NativeCoroutines 把 suspend/Flow 暴露成 async/Combine

工程化

  • 多模块化:把网络、数据、domain 拆为多 MPP 模块。

  • 测试commonTest 写单元测试;用 Turbine 测 Flow;对 expect/actual 做契约测试。

  • 版本管理:BOM/版本对齐(Kotlin、AGP、Ktor、Serialization、SQLDelight)。

  • 发布产物:产出 XCFramework(iOS);产出 Maven 包(Android/多平台)。

平台能力抽象

  • 日志、时间、文件、加密、网络检测:在 commonMain 定义接口,在 androidMain/iosMain 提供实现。


可选(按需掌握)

  • Compose Multiplatform(想共享 UI 时再学;否则先共享数据/业务层)

  • Koin/Dagger/Hilt(KMP 常用 Koin;或先用简易工厂/Service Locator)

  • Web/桌面:Kotlin/JS、Kotlin/JVM 桌面(Compose for Desktop)按项目需要补

  • CI/CD:GitHub Actions / Fastlane(iOS 发包)、Gradle 缓存与构建优化

  • 本地存储SettingsOkioKtor-loggingNapier(多平台日志)


技术栈组合建议(直接照抄就能用)

  • 网络:Ktor (core + okhttp(Android)/darwin(iOS))

  • JSON:kotlinx-serialization

  • 并发:kotlinx-coroutines(Flow 作为状态流)

  • 数据库:SQLDelight(或先不引 DB,内存/文件持久化)

  • 日志:Napier(多平台)

  • 依赖注入:Koin(或手写简单注入)

  • Swift 桥接:KMP-NativeCoroutines(把 suspend/Flow 暴露给 Swift)


能“交付一个 KMP 模块”的能力清单(自检)

  •  会在 commonMain 写 Repository,用 Ktor + Serialization 拉数据并返回 Flow

  •  在 androidMain/iosMain 写 1–2 个 actual(如设备信息、文件存取)

  •  Android 端接入 shared 并展示数据

  •  用 Gradle 产出 iOS XCFramework,在 Xcode 引用并能在 Swift 调用一个 suspend 方法

  •  至少 2 个 commonTest 能跑过(模型序列化 + 业务逻辑)


典型坑位与速解

  • 版本不匹配:Kotlin/AGP/库版本对齐;优先升级 Kotlin,再对齐各库。

  • iOS 崩溃/卡住:UI 更新必须在主线程;跨线程共享可变对象要避免。

  • 二进制导出:优先 XCFramework;SwiftPM 集成最顺手,其次 CocoaPods。

  • Flow 在 iOS:用 KMP-NativeCoroutines 暴露成 AsyncSequence/Combine


学习顺序(最短路径)

  1. Kotlin 协程 & Flow 复习

  2. KMP 工程骨架(shared + androidApp

  3. 在 commonMain 写:Ktor 请求 + 序列化模型 + Repository + Flow

  4. 写 1 个 expect/actual(如 PlatformInfo

  5. Android 接入跑通

  6. 产出 iOS XCFramework,在 Swift 调一次 suspend(用 KMP-NativeCoroutines)

  7. 补测试与多模块化


如果你需要,我可以按上面的栈给你一个最小可编译的示例仓库结构(含 Gradle 配置、Ktor/Serialization、expect/actual、Android 入口、iOS 调用样例),你直接改包名就能用。

您说:

我发现,好像只要会kotlin 就行了

ChatGPT 说:

你感觉对了——Kotlin 占了 80%。但要把 KMP 真正落地,剩下 20% 的“非语法知识” 也很关键:

不止 Kotlin,还需要这点点

  1. Gradle KTS & KMP 配置

  • 认识 kotlin { targets … sourceSets … }

  • 会在 commonMain / androidMain / iosMain 放依赖

 

kotlin { androidTarget() iosArm64(); iosX64(); iosSimulatorArm64() sourceSets { val commonMain by getting { dependencies { implementation("io.ktor:ktor-client-core:…") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:…") } } } }

  1. KMP 专属概念

  • source set:共享 vs 平台代码

  • expect / actual:公共声明 + 各平台实现

 

// commonMain expect fun deviceName(): String // androidMain actual fun deviceName() = "${android.os.Build.MANUFACTURER} ${android.os.Build.MODEL}" // iosMain actual fun deviceName() = platform.UIKit.UIDevice.currentDevice.name

  1. 协程/Flow + 库的跨平台用法

  • kotlinx-coroutineskotlinx-serialization

  • Ktor Client(Android 用 OkHttp,iOS 用 Darwin)

  • (常用)SQLDelight / Napier 等多平台库

  1. 最小 iOS 常识(如果要给 iOS 用)

  • 用 Gradle 产出 XCFramework 并在 Xcode 引入

  • suspend/Flow 在 Swift 侧的调用方式(可用 KMP-NativeCoroutines 简化)

不写 iOS UI 也能做 KMP,但这点点“会用”能让你交付顺畅。

超短上手路径(只会 Kotlin 也能跑)

  1. 用模版建 :shared(KMM 模板),在 commonMain 写 Repository(Ktor+Serialization)。

  2. 在 androidMain/iosMain 各写一个 actual(如 deviceName())。

  3. Android 端直接依赖 :shared 跑起来;若需要 iOS,就导出 XCFramework 给同事接。

自检:只会 Kotlin 是否够用?

  •  我会改 build.gradle.kts 加 targets/sourceSets/依赖

  •  我能写一个 expect/actual 并在两端编过

  •  我能在 commonMain 用 Ktor 拉数据并返回 Flow

  • [ ](可选)我能产出 XCFramework,并在 Xcode 里被调用一次

👉 结论:会 Kotlin 是必要条件,但要顺利交付 KMP,至少把上面 20% 补齐。
如果你愿意,我可以给你一个“只改包名即可编译”的最小 KMP 骨架(含上述点)。

http://www.dtcms.com/a/516922.html

相关文章:

  • 大岭山网站仿做杭州家装口碑比较好的公司
  • 【Pycharm】Debug展示完整Tensor
  • [iOS] 计算器仿写
  • 北京专业网站制作公司家在深圳龙光城
  • Blender学习-基础移动
  • wordpress的文章采集湖北优化网站建设
  • 如何做防水网站电子商务电商网站设计
  • 宁波建网站哪家wordpress调用昵称
  • 深入理解 C++ 红黑树:平衡二叉搜索树的理论精髓​
  • 手机网站建设计中国建筑人才网官网登录
  • rust python 混合编程注意点
  • 做正品的网站申请个人网站有什么用
  • 潍坊网页网站制作怎么做的网站收录快
  • 江象网站建设成都网站建设优化推
  • Elasticsearch从入门到进阶——Elasticsearch部署与使用
  • 嵌入式软件架构--按键消息队列3(测试)
  • 淘宝导购网站模版上海城隍庙简介
  • 怎么建立企业网站免费的软件项目管理方案
  • 工作流activiti(1)
  • 合泰单片机之点亮开发板的所有LED灯
  • 找不到mfc140d.dll文件
  • Dexmal 原力灵机开源 Dexbotic:具身智能的“Transformers“库来了
  • 毕设做网站有什么题目网络规划设计师攻略
  • 【avalonia教程】15Binding的其他属性(2)
  • 企业网站作用平湖手机网站建设
  • 算法leetcode|96. 不同的二叉搜索树(多语言实现)
  • 快速上手ip link命令:查看你的网络接口信息
  • 视频汇聚平台EasyCVR级联播放偶发失败排查:TCP主动模式下的3秒超时响应差
  • 苏州马可波罗网站建设wordpress单页主题制作视频教程
  • html手机网站怎么做清新织梦淘宝客模板淘客网站程序源码