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

news2024/11/26 6:22:36

前言

        随着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.coloradmin.cn/o/2193140.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】【链表代码】移除链表元素

移除链表元素 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* removeElements(struct ListNode* head, int val) { // 创建一个虚拟头节点,以处理头节点可能被删除的情况 struct…

ROS/Gazebo/Nav2/MoveIt Pro/RMF学习笔记24-10-06

ROS ROS(Robot Operating System)系统,尽管严格意义上来说并非一个操作系统,而是一个专为机器人软件开发的开源软件框架集合,它在机器人技术领域中扮演着至关重要的角色。ROS系统的新应用和特性主要体现在以下几个方面…

【Linux】Shell脚本基础+条件判断与循环控制

目录 一、介绍 1. Linux提供的Shell解析器 2. bash和sh关系 3. Centos默认的Shell解析器是bash 二、定义 1. 变量名的定义规则 2. 等号周围没有空格 3. 查看变量 4. 删除变量 5. 正确地定义数组 6. 将局部环境变量提升为全局 7. 正确选择引号 8. 特殊变量名 三…

MES系统与其他系统的集成

一、MES与ERP的集成 1. 实时数据共享 万界星空科技MES系统可以与企业资源计划(ERP)系统集成,实现双向数据传输。通过实时数据共享,ERP系统能够更准确地进行物料需求计划,并及时更新生产进度和库存信息。 2. 工单管理…

LeetCode讲解篇之322. 零钱兑换

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们可以使用动态规划解决这道题,我们首先定义一个数组,数组中第i个元素表示组成金额 i 的最少硬币个数 我们遍历数组的1 ~ amount号位置,对coins进行遍历,查找选…

短剧小程序短剧APP在线追剧APP网剧推广分销微短剧小剧场小程序集师知识付费集师短剧小程序集师小剧场小程序集师在线追剧小程序源码

一、产品简介功能介绍 集师专属搭建您的独有短剧/追剧/小剧场小程序或APP平台 二、短剧软件私域运营解决方案 针对短剧类小程序的运营,以下提出10条具体的方案: 明确定位与目标用户: 对短剧类小程序进行明确定位,了解目标用户群体…

【最新华为OD机试E卷-支持在线评测】计算三叉搜索树的高度(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

社会工程学:社工无处不在

目录 社会工程学 社工利用了人的弱点 社会工程学攻击的流程通常可以分为以下几个步骤 以下是一些常见的方式,攻击者可以利用这些方式来收集个人信息 一些常见的攻击方式 钓鱼邮件 宏病毒 网站克隆 防范 社会工程学 介绍: 社会工程学是一种攻击技…

S7-200 SMART 与调试助手之间 Modbus RTU 通信

西门子在 STEP 7-Micro/WIN SMART 中正式推出 Modbus RTU 主站/从站协议库,Modbus RTU 指令位于 STEP7-Micro/WIN SMART 项目树中“指令”文件夹的“库”文件夹中。如图1.Modbus RTU库指令所示。 图1.Modbus RTU库指令 注意: 1. Modbus RTU 主站指令库的…

nginx 负载均衡1

遇到的问题 大型网站都要面对庞大的用户量,高并发,海量数据等挑战。为了提升系统整体的性能,可以采用垂直扩展和水平扩展两种方式。 垂直扩展:在网站发展早期,可以从单机的角度通过增加硬件处理能力,比如 C…

【Redis】持久化(上)---RDB

文章目录 持久化的概念RDB手动触发自动触发bgsave命令的运行流程RDB文件的处理RDB的优缺点RDB效果展示 持久化的概念 Redis支持AOF和RDB两种持久化机制,持久化功能能有效的避免因进程退出而导致的数据丢失的问题,当下次重启的时候利用之前持久化的文件即可实现数据恢复. 所以此…

Alignment与Correspondence,用于量化衡量MLLM中视觉特征的视觉语义对齐与视觉结构程度的方法

Alignment与Correspondence,用于量化衡量MLLM中视觉特征的视觉语义对齐与视觉结构程度的方法 FesianXu 20241006 at Wechat Search Team 前言 在多模态大模型(Multimodal Large Language Model, MLLM)中,视觉特征就像…

MySQL 篇-深入了解存储引擎、索引(InnoDB 索引结构 B+Tree、索引使用规则)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 存储引擎概述 1.1 存储引擎 - InnoDB 1.2 存储引擎 - MyISAM 1.3 存储引擎 - Memory 1.4 存储引擎 - 选择 2.0 索引概述 2.1 索引结构 2.1.1 索引结构 - B-Tree 2…

Docker:安装 MongoDB 的详细指南

请关注微信公众号:拾荒的小海螺 博客地址:http://lsk-ww.cn/ 1、简述 MongoDB 是一个流行的 NoSQL 数据库,可以在 Docker 容器中轻松安装和运行。本文将介绍如何在 Docker 中安装 MongoDB,并展示如何在 Java 应用中使用 MongoDB…

MySQL事务日志—redo日志介绍

MySQL事务日志—redo日志 事务有4种特性: 原子性、一致性、隔离性和持久性。 那么事务的四种特性到底是基于什么机制实现? 事务的原子性、一致性由事务的 undo 日志事务的隔离性由锁机制和MVCC实现。事务的持久性由redo 日志来保证。 两类日志概述:…

基于猎豹优化算法(The Cheetah Optimizer,CO)的多无人机协同三维路径规划(提供MATLAB代码)

一、猎豹优化算法 猎豹优化算法(The Cheetah Optimizer,CO)由MohammadAminAkbari等人于2022年提出,该算法性能高效,思路新颖。 参考文献: Akbari, M.A., Zare, M., Azizipanah-abarghooee, R. et al. The…

‌在Python中,print(f‘‘)是什么?

‌在Python中,print(f’)表示使用f-string对字符串进行格式化输出。‌ f-string是Python 3.6及以上版本引入的一种新的字符串格式化机制,它允许在字符串中直接嵌入表达式,这些表达式在运行时会被其值所替换。使用f-string可以更方便地将变量的…

【通信协议】一文学会异步、同步、串行、并行、单工、半双工、全双工(一)

通信方式详解:异步、同步、串行、并行、单工、半双工、全双工 引言一、通信方式分类概述二、串行通信与并行通信串行通信 (Serial Communication)并行通信 (Parallel Communication)串行与并行通信对比表 三、全双工、半双工、单工通信单工通信 (Simplex Communicat…

怎么将mp4转换为mp3?教你6种值得收藏的视频转音频方法!

怎么将mp4转换为mp3?自媒体生活如此繁华的现在,我们经常需要从视频中提取音频,以便在不同的设备或场合中播放,又或者提取视频中的音频进行二次视频/音频/故事创作,因此,将MP4视频文件转换为MP3音频文件变成…

了解奈奎斯特采样定律和频率混叠:数字信号处理中的关键概念

在数字信号处理和通信领域,采样是将连续信号转化为离散数字信号的关键步骤。采样的过程虽然看似简单,但其中蕴含着深刻的理论,直接关系到信号重建的准确性。而奈奎斯特采样定律和频率混叠就是其中两个非常重要的概念。本文将带您深入了解这两…