本人所作的内部技术分享,脱敏同步
项目介绍
项目背景
为了解决视频转WebP动图的痛点问题
- 用的是外部工具,黑盒过程不可控
- webp体积过大,存在OOM风险
- 帧率、质量没有统一标准
期望提供一个视频转webp工具约束生产流程
方案选型
业务后台(链路长) vs 脚本工具(门槛高) vs KMP Compose(技术栈匹配能内部闭环)
建设过程
新建项目方式:
- 官方模板代码:https://github.com/JetBrains/compose-multiplatform-template
- Kotlin Multiplatform Mobile plugin
实践项目结构介绍
Compose编程关键点
•composable 可组合的UI
•mutableStateOf 更新发起点
•remember 刷新前后状态继承
1 | val taskList = remember { mutableStateOf(LinkedList<TaskData>()) } // list是更新点且可继承状态 |
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. Glide, Fresco, AFNetworking, YYModel)
构建运行
项目形态
- 共享一段逻辑
共享应用的独立共同逻辑。 - 共享逻辑但保持原生UI
开始新项目时使用Kotlin Multiplatform,只需实现一次数据处理和业务逻辑,并且保持 UI 原生。 - 共享逻辑与UI
使用Compose Multiplatform提高开发效率,共享逻辑与UI的代码。
What’s more
官方示例:https://github.com/android/kotlin-multiplatform-samples