0%

KMP探索与实践分享

本人所作的内部技术分享,脱敏同步

项目介绍

项目背景

为了解决视频转WebP动图的痛点问题

  1. 用的是外部工具,黑盒过程不可控
  2. webp体积过大,存在OOM风险
  3. 帧率、质量没有统一标准

期望提供一个视频转webp工具约束生产流程

方案选型

业务后台(链路长) vs 脚本工具(门槛高) vs KMP Compose(技术栈匹配能内部闭环)

建设过程

新建项目方式:

  1. 官方模板代码:https://github.com/JetBrains/compose-multiplatform-template
  2. Kotlin Multiplatform Mobile plugin

实践项目结构介绍

Compose编程关键点

•composable 可组合的UI

•mutableStateOf 更新发起点

•remember 刷新前后状态继承

1
2
3
4
5
6
7
8
9
val taskList = remember { mutableStateOf(LinkedList<TaskData>()) } // list是更新点且可继承状态

Box(Modifier.wrapContentHeight(), contentAlignment = Alignment.TopCenter) { ListTaskView(taskList.value)
} // view data bind

taskData.value = TaskData(inputPath = inputPath.value, outputPath = outputPath.value)taskList.value.addFirst(taskData.value) // list新增一个条目 

// 条目状态变更
taskData.value.inputPath = filePathtaskData.value.outputPath = outputPathtaskData.status.value = ConvertSuccess

KMP介绍

KMM, KMP, KMP Compose到底都是个啥?

KMM(Kotlin Multiplatform Mobile)

KMP(Kotlin Multiplatform)

KMP Compose(Kotlin Multiplatform Compose)

跨平台框架对比

Flutter React Native Kotlin Multiplatform
UI支持 较强 较强
开发语言 Dart Javascript Kotlin
迁移成本
运行环境 Flutter引擎 JSCore 纯原生
性能 较高 一般

KMP、Flutter和React Native都是用于开发跨平台移动应用的框架,各有其优缺点。

KMP发展趋势

应用阵营:百度、快影、McDonald’s、Netflix… https://www.jetbrains.com/help/kotlin-multiplatform-dev/case-studies.html

KMP跨平台原理

KMP 的核心原理是通过 Kotlin K2编译器将共享的 Kotlin 代码编译成适用于目标平台的原生代码,从而实现在不同平台上共享代码的目的。

项目结构与运行

项目结构


共享模块中的平台命名文件和平台特定模块中的文件有何区别?平台特定模块更多是作为一个应用入口。

依赖管理

公共依赖(e.g. Koin, Apollo, Okio

特定平台依赖 (e.g. Glide, Fresco, AFNetworking, YYModel)

构建运行

项目形态

  • 共享一段逻辑
    共享应用的独立共同逻辑。
  • 共享逻辑但保持原生UI
    开始新项目时使用Kotlin Multiplatform,只需实现一次数据处理和业务逻辑,并且保持 UI 原生。
  • 共享逻辑与UI
    使用Compose Multiplatform提高开发效率,共享逻辑与UI的代码。

What’s more

官方示例:https://github.com/android/kotlin-multiplatform-samples

Reference

KMP Development
跨平台开发的后起之秀
Kotlin Multiplatform Mobile 跨平台原理