Kotlin真·全平台——Kotlin Compose Multiplatform Mobile(kotlin跨平台方案、KMP、KMM)

前言

        随着kotlin代码跨平台方案的推出,kotlin跨平台一度引起不少波澜。但波澜终归没有掀起太大的风浪,作为一个敏捷型开发的公司,依然少不了Android和iOS的同步开发,实际成本和效益并没有太多变化。所以对于大多数公司来说依然风平浪静……

        时过境迁,如今kotlin已经支持Android、iOS、Web、PC的桌面UI开发了,并且iOS已经进入Beat的里程碑,kotlin即将迎来一统天下的时刻——一人一语言码完所有端。

上手一试

        kotlin作为Android官方语言并且完全支持Android Studio,所以KMM对Android来说完全0门槛,不需要任何学习就可以上手,并且完全能自主解决各种问题。

1.首先下载官方demo(也有对应插件,但不建议使用):Kotlin Multiplatform Wizard | JetBrains(防失效方式:Create your multiplatform project | Kotlin Multiplatform Development Documentation (jetbrains.com)>点击“Open the Kotlin Multiplatform wizard”即可)。Android、iOS、Web、PC、Server都可以选,这里建议全选,然后下载。

2.此处默认你已经会了Android Studio,我们解压后不要急着打开(打开巨慢,下载还总是超时)

将gradle/wrapper/gradle-wrapper.properties文件修改为tx镜像:

distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.4-bin.zip

将settings.gradle.kts文件的repositories(2个地方)都修改成如下:

    repositories {maven("https://maven.aliyun.com/repository/central")maven { setUrl("https://maven.aliyun.com/repository/public") }maven { setUrl("https://maven.aliyun.com/repository/google") }maven { setUrl("https://jitpack.io") }google {mavenContent {includeGroupAndSubgroups("androidx")includeGroupAndSubgroups("com.android")includeGroupAndSubgroups("com.google")}}mavenCentral()gradlePluginPortal()maven { setUrl("https://repo1.maven.org/maven2/") }maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")}

然后使用Android Studio打开,按上述改法预计10分钟左右就构建完成了,当然如果报错请自行解决(和Android基本一致)

跑起来

Server

运行java服务端算是最简单的一个了,等到构建成功找到“server>src>main>kotlin>包名>Application”然后对着main函数点击run就行了(如果第一次出现找不到main的错误,再次run就行了)。然后根据日志提示使用任意浏览器打开链接如“127.0.0.1:8080”,即可看到返回信息。

Android

由于Android本身就支持kotlin并且框架也是jetpack,所以跑到Android设备上也是非常轻松的,选择composeApp(应该是默认项,下方截图)后直接右侧的run三角形就行了(如图),如果有错误,直接搜索Android相关的问题,基本上没有什么坑,这里不再多说

PC(Windows、Mac、Linux)

pc完全基于jvm的,运行到pc端应该也不会有什么难点,你只需要配置好java的环境变量就行了,运行方式:右侧边栏Gradle>composeApp>Tasks>compose Desktop>run。当然运行时需要安装到电脑上,根据各系统的安装提示就行了。

Web

运行到网页端第一次可能需要科学一下,因为kotlin用到了nodejs的功能,而nodejs一般是访问不了的(不开科学会出现长时间等待好几分钟后才会提示超时)。当然你还需要一个较新版的谷歌(119以上)、edge(119)或者火狐(121)浏览器。如果你都已经准备好了,那运行到网页端也应该不是问题,依然是右侧边栏Gradle>composeApp>Tasks>kotlin browser>wasmJsBrowserRun。

iOS

要想运行到iOS手机上,要求就相对高很多了:

1.一台较新的Mac电脑(博主用的m1,再低可能会出现跑不起来也没任何提示)

2.安装好xcode(建议App Store下载,不然安装位置不对也可能导致跑不起来也没任何提示)

3.配置完整的java环境,完整的!完整的!完整的!

        由于博主省懒,之前配置了Android Studio自带阉割版的java环境变量,导致跑不起来也没任何提示,你可以去官网下载JDK或者简单一点“Android Studio>设置>Gradle……>Gradle Tools>Grade>Gradle JDK>Download JDK”,然后记住下载的目录配置到环境变量上即可。

4.添加模拟器或者使用真机

5.Android Studio内安装插件“Kotlin Multiplatform”(设置>Plugins>Marketplace>搜索Kotlin Multiplatform),重启AS

6.添加iOS设备,选择Edit Config>点击加号>选择iOS Application>选择xcode路径(应该都会自动出来),框选里的都要填完(一般自动填的),填完后点击确定后点击右侧的run三角形即可运行到iOS上

[Mac不在,暂无运行截图]

运行提醒:多个端只能同时运行一个,运行前请先停止其他端的task

现状

作为横跨所有端并且语法统一的kmm,它的优点自然很多,不需要过多赘述,当然到目前为止依然有不少问题有待解决:

1.ktor server框架目前还算比较年轻,自身尚有很多优化空间。

2.jetpack虽然谷歌一直在推,但是由于这是属于革命性架构变更,目前占有率估计连20%都没有。

3.Web端必须要求浏览器支持wasm并且支持GC功能,目前谷歌和火狐也是去年才支持的,Safari到现在仍旧在开发中,其他小众浏览器更不用提支持了。

4.iOS手机目前还没发布release,并且只支持iOS15(iPhone13)以上,更早的版本暂不支持。

5.各端权限相关问题,对于权限、文件、图片各端需要单独自行处理,这算是所有跨平台方案的通病,属于无解型。

6.对于鸿蒙系统,目前还没有支持的意愿,这一块几乎空白。

7.作为开发者当然最重要的还是岗位了,目前看下来这种岗位几乎为0。

当前应用方向

虽然kmm的问题不少,有些甚至比较致命,但就目前来说仍可以在某些方面有一席之地,并且后期潜力巨大,完全可以当做初期铺垫。

1.对于偏应用的初创项目kmm的Android、iOS还是比较方便和快速

2.对于小型服务端,ktor也是有不少优点,并且也能在app端人员中快速上手

3.对于内部网页系统,那如果app端人员也会写那何乐而不为呢

4.当然没有ui的Multiplatform早已经正式发版并跨所有端了,如果先共享逻辑后期再考虑共享ui不失为一种比较友好的解决方案(不少大厂已经开始尝试了)

转载请注明出处:王能的博客Kotlin真·全平台——Kotlin Compose Multiplatform Mobile(kotlin跨平台方案、KMP、KMM)-CSDN博客

后续:

1.如何打包发布

2.如何修改分类源集(Android、iOS为一类,Web、PC为一类)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/440003.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精选算法入门——day2

精选算法入门——day2 题目一题干解题思路一解题思路二解题思路三思路三代码 题目二题干解题思路代码 题目三题干解题思路一代码解题思路二代码解题思路三代码 题目四题干解题思路代码 题目一 题干 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。…

PDF转换为TIF,JPG的一个简易工具(含下载链接)

目录 0.前言: 1.工具目录 2.工具功能(效果),如何运行 效果 PDF转换为JPG(带颜色) PDF转换为TIF(LZW形式压缩,可以显示子的深浅) PDF转换为TIF(CCITT形…

uniapp+Android智慧居家养老服务平台 0fjae微信小程序

目录 项目介绍支持以下技术栈:具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是:数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 老年人 登…

IDEA:Properties in parent definition are prohibited

问题背景 如果你在POM.xml中使用了自定义版本,那么IDEA就没办法很动态检测(其实可以做到的,不是吗),就会有一个Properties in parent definition are prohibited 的错误信息(禁止使用父级定义中的属性&…

吊打ChatGPT4o!大学生如何用上原版O1辅助论文写作(附论文教程)

目录 1、用ChatGPT生成论文选题2、用ChatGPT生成论文框架3、用ChatGPT进行文献整理4、用ChatGPT进行论文润色5、用ChatGPT进行问题求解6、用ChatGPT进行思路创新7、用ChatGPT进行论文翻译8、如何直接使用ChatGPT4o、o1、OpenAI Canvas 9、OpenAI Canvas增强了啥?10、…

打造自己的RAG解析大模型:Windows部署OCR服务(可商业应用)

在上一篇文章中,我们介绍了如何在 Windows 环境中配置 OCR 相关模型,并完成了模型验证。本篇文章将基于之前的内容,进一步讲解如何将文本检测、方向分类和文本识别模型进行串联,最终搭建一个基础的 OCR 应用服务。通过这些模型的串…

降重秘籍:如何利用ChatGPT将重复率从45%降至10%以下?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 重复率高达45%?很多人一查论文的重复率,瞬间想“完了,这次真的要重写了”。但其实不用这么绝望!有了ChatGPT,降重真的没那么难。今天就教你几招&a…

网络安全概述:从认知到实践

一、定义 网络安全,即致力于保护网络系统所涵盖的硬件、软件以及各类数据,切实保障其免遭破坏、泄露或者篡改等不良情形的发生。 二、重要性 个人层面:着重于守护个人隐私以及财产安全,为个人在网络世界中的各项活动提供坚实的保…

日语发音

中文 阴平(第一声),用“ˉ”表示,如lā;阳平(第二声),用“ˊ”表示,如l;上声(第三声),用“ˇ”表示,如lǎ&am…

pWnos1.0 靶机渗透 (Perl CGI 的反弹 shell 利用)

靶机介绍 来自 vulnhub 主机发现 ┌──(kali㉿kali)-[~/testPwnos1.0] …

个人网站,怎么操作才能提升个人网站的流量

运营个人网站以提升流量是一个综合性的过程,涉及内容优化、技术调整、用户体验提升以及外部推广等多个方面。以下是一些专业建议,旨在帮助个人网站运营者有效提升网站流量: 1.精准关键词研究与优化 -关键词研究:利用工具如谷歌…

MATLAB图像去雾系统

应用背景 现在工业发展迅速,产生的废气很严重,导致雾霾厉害,现在虽然有硬件来拍摄,可以清晰化视野,但是硬件成本昂贵,急需寻求一种算法来帮助雾霾的清晰处理。显得经济。 采用算法原理 本文采用全局直方…

基金好书入门阅读笔记《基金作战笔记:从投基新手到配置高手的进阶之路》2

买基金,说到底是买基金所持有的一揽子资产。那么,常见的可投资产都有哪些类型呢? 图2.9进行了系统性的梳理,我们把资产分为四大类,分别是权益类、固收类、现金和另 类,下面就一一解读。 年化收益率是把一段…

Flume实战--Flume中的拦截器详解与操作

在处理大规模数据流时,Apache Flume 是一款功能强大的数据聚合工具,它可以通过拦截器在运行时对Event进行修改或丢弃。本文将详细讲解Flume中的拦截器,包括时间戳拦截器、Host添加拦截器、静态拦截器以及如何自定义拦截器。 Flume入门到实践…

Centos怎么执行脚本

方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本 cd /data/shell ./hello.sh 方法二:以绝对路径的方式去执行bash shell脚本 /data/shell/hello.sh 方法三:直接使用bash 或sh 来执行…

VGG原理与实战

VGG网络结构 这也更好的块状结构,256个卷积核 卷积就是我们的一个特征图啊往往都会缩小 ,然后的话但它通道不会变.卷积一般是使用我们的通道C变大,磁化但是它的通道就是我们那个H和W一般都会变小.下采样的意思就是使分辨率变小 vgg—block内的卷积层都是同结构的意…

vite学习教程04、vue集成axios封装request工具类及应用

文章目录 前言1、安装axios2、封装request工具类3、封装api请求工具4、实战:vue中使用api请求工具类资料获取 前言 博主介绍:✌目前全网粉丝3W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技…

k8s 中存储之 hostPath 卷

目录 1 hostPath 卷介绍 2 hostPath 卷实际应用操作 2.1 创建 pod 资源类型 2.2 修改清单文件增加 hostPath 对应的参数配置 2.3 查看是否创建 卷 和 pod 2.4 创建发布文件测试是否正常访问 1 hostPath 卷介绍 EmptyDir中数据不会被持久化,它会随着Pod的结束而销…

【数据结构】【链表代码】随机链表的复制

/*** Definition for a Node.* struct Node {* int val;* struct Node *next;* struct Node *random;* };*/typedef struct Node Node; struct Node* copyRandomList(struct Node* head) {if(headNULL)return NULL;//1.拷贝结点,连接到原结点的后面Node…

【工欲善其事】巧用 Sublime Text 生成带格式的 HTML 片段

文章目录 【工欲善其事】巧用 Sublime Text 生成带格式的 HTML 片段1 问题由来2 操作流程步骤1:打开代码片段定制页步骤2:在新标签页输入定制 XML步骤3:保存定义内容步骤4:功能测试 3 拓展 【工欲善其事】巧用 Sublime Text 生成带…