前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >别具特色的跨平台移动开发 - Kotlin Multiplatform Mobile

别具特色的跨平台移动开发 - Kotlin Multiplatform Mobile

作者头像
御剑
发布2022-06-07 19:17:36
1.5K0
发布2022-06-07 19:17:36
举报
文章被收录于专栏:微言码道微言码道

对于移动端开发来说,跨平台是一个始终跳不能避免的话题。

而在跨平台移动的技术选择上来说,最流行两个就是React Native与Flutter了。

这两种方式都有它们各自己的优点与缺点。对于跨平台移动开发究竟是该React Native还是Flutter对大众来说是个比较难的选择。

当然,我这篇文章不是来对比这两个技术的,而是来介绍另一个新的移动跨平台技术的选择 -- KMM

KMM

KMM的全称是:Kotlin Multiplatform Mobile,它是jetbrains公司的产品。是一个业务跨平台的移动端开发框架。

在KMM的官网上,它对自己的最简明的一句介绍是:

Share the logic of your iOS and Android apps while keeping the UX native

用中文来理解就是:

不同平台共享业务逻辑的同时又保持各自原生的UI实现

这就是它最大的与众不同之处。那它到底是个什么东西呢,我简单说明下。

跨平台移动开发的思路

对于跨平台移动开发技术来说,以现在流行的来说,总体上来说有以下几种思路:

基于JS来实现跨平台开发

许多年以前,有一个预言:

Any application that can be written in JavaScript, will eventually be written in JavaScript. (任何可以用 JavaScript 来写的应用,最终都将用 JavaScript 来写)

审视今天的技术现状,它已经不是一种预言,某种程序上已经是一种事实。

今天用JS来开发,在任何方向都是值得考虑的选项了,抛开前端它的本家不说,后端有NodeJS,跨平台桌面开发有Electron,跨平台移动开发也有React Native。

只要你懂JavaScript,你就能使用React Native来开发移动应用。React Native的思路是将JS实现转换成原生实现,相当于中间有一层翻译层的存在。

底层重新构建式的跨平台开发

使用React Native仍然有许多困难需要克服,最显著的就是性能以及与原生实现的一些难以兼容的地方,这也是React Native开发中经常需要自己实现原生实现的原因所在。

想要在缺少原生开发能力的前提下,纯粹依赖与使用React Native,是一件比较有挑战的事。

所以,就出现了Flutter这样的解决方案,它的思路与RN完全不同,它抛弃了原生开发技术,基于skia引擎完全重新构建了一套自己的控件与实现。

这意味着它与原生是一个实现模式,性能上更佳。而且使用Flutter你可以真正抛弃原生开发,因为它完全不依赖原生的技术与控件。

选择Flutter,最大的问题在于你选择了另一个生态,无论是从语言还是从各种支持框架,与主流流行的技术几乎没有任何重叠之处。

这个选择对于不缺钱不怕招不到人的大公司可能是可以克服的问题,但大于其它大多数公司来说,这是个阻碍。

保持原生开发,而使业务重用

无论是React Native还是Flutter,它们的缺点都是非常明显的,这使得在移动开发中,它们始终无法取代原生开发,甚至直到今天,原生开发或hibird开发仍然才是主流。

原生开发的优势不言而喻,无论是在人员,技术生态还是性能上都远优于跨平台开发。但原生开发这种一个APP,两端分别开发,始终在成本上是企业非常想避免的事

(虽然实际上原生开发的成本并不一定比跨平台开发多,只是大家感觉跨平台开发似乎只需要一半的成本,但这并不是事实)

于是KMM则完全从另一种思路来解决这个问题。

在移动端开发中,一个显著的特征是:

不同端的业务逻辑是几乎完全一致的,只是它们的实现技术与载体不同而已

所以,KMM则基于上述这个思路,创新式的引入了另一种模式:

在保持原生开发的基础上,使业务模块重用

与众不同的实现

我画了一个图来说明KMM究竟是怎么一个思路。

KMM的实现思路是重用业务。

在Android中开发业务实现,KMM会将你的业务生成iOS类库。你在iOS开发的时候,相当于依赖了一个类库,这个类库提供了本身你业务的很多方法。

在业务重用过程中,数据库SQLite与网络都是支持的,也就是你的业务实现可以使用数据存储查询以及网络等。

而数据存储与网络其实是移动开发中极为重要的两个关键依赖。

关于KMM的技术点,建议访问官网以查阅,我在这篇文章也不详细阐述了。这篇文章只是一个介绍。

KMM官网:https://kotlinlang.org/lp/mobile/

myddd-kmm-scoffold示例项目发布

我一直在关注与调研移动开发的技术,对iOS的SwiftUI,Android的Jetpack Compose都非常感兴趣,做了前端开发之后,就会发现声明式UI是更好的方式。而无论是SwfitUI或是Jetpack Compose都转向了声明式UI。

而KMM也是我关注的一个移动开发技术方向,因为它一方面重用了业务,另一方面又维持了原生开发,似乎是个挺不错的实现思路。

最近五一假期时,基于KMM做了一个可运行的示例项目。这个项目主要是:

  • • 最小化的示例及说明如何基于KMM进行开发
  • • 示例是一个最小骨架的尝试,包括APP的UI,从服务器获取数据,将数据存储到数据库都包含在内
  • • 实现了Android与iOS两端的开发

最终的效果参照如下:

现将这个项目的源码纳入myddd中开源出来。

访问这个项目的源码,请访问myddd在github或gitee的开源主页以了解更多。

  • • github: https://github.com/mydddorg
  • • Gitee: https://github.com/mydddorg

未来

对于KMM这个技术,我也仍然在学习与尝试中,如果未来证明它的可行性,会考虑把它纳入myddd中,作为myddd在移动端实现的技术选择。

如果你对它感兴趣,可以持续关注我的myddd。

关于我

我是御剑,一个致力于实践与传播编码之道的全栈式程序员。

访问微言码道(https://taoofcoding.tech)以阅读更多我写的文章;

访问myddd(https://myddd.org)以了解我在维护的全栈式领域驱动开源框架。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微言码道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • KMM
  • 跨平台移动开发的思路
  • 与众不同的实现
  • myddd-kmm-scoffold示例项目发布
  • 未来
  • 关于我
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档