Kotlin MultiPlatform(KMP)

news2024/9/28 1:22:22

Kotlin MultiPlatform

在这里插入图片描述

1.KMP 是什么

Kotlin Multiplatform 是一个工具,它让我们用同一种编程语言(Kotlin)写代码,这些代码可以同时在不同的设备上运行,比如手机、电脑和网页。这样做可以节省时间,因为你不需要为每种设备重复写相同的功能。

2.有什么特性

特性1:代码共享–可以编写一次逻辑代码,比如一个计算函数,然后在 Android 和 iOS 应用中都使用它。
特性2:平台特定代码–可以为每个平台编写特定的代码来处理平台独有的功能,比如使用设备的摄像头。比如在 Android 应用中使用 Android 的 Camera API 拍照,在 iOS 应用中使用 iOS 的 UIImagePickerController 拍照。
特性3:互操作性–Kotlin Multiplatform 可以与现有的 Java、Swift 或 Objective-C 代码互操作,方便集成到现有项目中。
特性4:编译期不同–在androidMain的代码用的是kotlin/jvm编译成安卓可以看懂的代码, 在iosMain上用kotlin/native编译成ios可以看懂的代码

3功能如何跨端

步骤:
1.定义共享逻辑:首先在一个共享模块(也就是commonMain)中定义通用的业务逻辑,这些代码不依赖任何平台,因此可以在任何平台上运行,这个共享模块也相当于跨端共享的基础、
共享逻辑(commonMain):

import kotlin.random.Random
class Greeting {
    private val platform: Platform = getPlatform()

    fun greet(): String {
        val firstWord = if (Random.nextBoolean()) "Hi!" else "Hello!"

        return "$firstWord Guess what this is! > ${platform.name.reversed()}!"
    }
}

以上代码就是kmp跨端中的共享代码,这些代码在安卓和ios都可以运行,只不过,这段代码最后返回了一个字符串格式,这个字符串中还需要获取到platform.name,这就需要涉及到跨端了,因为获取到platform.name的方式在安卓和ios上的kotlin语法不一样,于是我们就要定义一个借口来告诉androidMain和iosMain,你俩把这个获取platform.name的逻辑分别给我处理一下,然后他俩就开始去实现这个逻辑了,代码如下

interface Platform {
    val name: String
}

expect fun getPlatform(): Platform

2.平台的特定实现:在androidMain和iosMain中,提供commanMain中接口的具体实现,以及编写一些平台性的特定需求的代码
Android 平台实现(androidMain):

import android.os.Build

class AndroidPlatform : Platform {
    override val name: String = "Android ${Build.VERSION.SDK_INT}"
}

actual fun getPlatform(): Platform = AndroidPlatform()

iOS 平台实现(iosMain):

import platform.UIKit.UIDevice

class IOSPlatform: Platform {
    override val name: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
}

actual fun getPlatform(): Platform = IOSPlatform()

他俩乖乖的说,好嘞大哥,我们给你实现,安卓那边说,大哥,我是这么实现的,ios说,大哥,我是那样实现的~~~

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

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

相关文章

昇思25天学习打卡营第23天|K近邻算法实现红酒聚类

学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com) K近邻算法实现红酒聚类 本实验主要介绍使用MindSpore在部分wine数据集上进行KNN实验。 1、实验目的 了解KNN的基本概念;了解如何使用MindSpore进行KNN实验。 2、K近邻算法原理介绍…

液晶电子看板助力工厂打造车间精益管理数字化

在当今竞争激烈的市场环境下,企业追求生产智能化已成为提升竞争力的关键。要实现这一目标,生产现场设备联网进行数据采集是首要且基础的步骤。工业生产设备作为核心要素,其产生的各类数据与产品质量及企业运营效率息息相关。 在这样的背景下&…

自然语言处理基本概念

自然语言处理基本概念 所有学习循环神经网络的人都是看这一篇博客长大的: https://colah.github.io/posts/2015-08-Understanding-LSTMs/ import jieba import torch from torch import nns1 "我吃饭了!" s2 "今天天气很好&#xff01…

加减计数器

目录 描述 输入描述: 输出描述: 参考代码 描述 请编写一个十进制计数器模块,当mode信号为1,计数器输出信号递增,当mode信号为0,计数器输出信号递减。每次到达0,给出指示信号zero。 模块的接…

【鸿蒙学习笔记】使用httpRequest进行HTTP数据请求

官方文档:网络管理开发概述 目录标题 访问淘宝公开接口(测试数据)第1步:module.json5 配置网络授权第2步:源码第3步:启动模拟器第4步:启动entry第5步:操作 访问淘宝公开接口&#x…

区分modbus tcp和tcp/ip

Modbus 对某些人来说,这听起来可能很复杂,也很令人费解,但是一旦你了解了它的工作原理,那就是一个特别简单的过程。MODBUS 这是一种请求和响应协议。MODBUS 主站将发起请求,从站将响应错误或请求信息。这就是 modbus 简…

海外媒体软文发稿:南非新闻通稿宣发,谷歌新闻收录

南非媒体介绍 南非作为非洲大陆最先进的经济体之一,拥有着丰富多样的媒体资源。在南非,各种类型的新闻报纸、杂志和网站充斥着市场。以下是一些南非主要媒体的 大舍传媒 大舍传媒是专注南非最有影响力的发稿平台之一,其新闻报道覆盖了南非…

【深度学习】基于深度学习的模式识别基础

一 模式识别基础 “模式”指的是数据中具有某些相似特征或属性的事物或事件的集合。具体来说,模式可以是以下几种形式: 视觉模式 在图像或视频中,模式可以是某种形状、颜色组合或纹理。例如,人脸、文字字符、手写数字等都可以视…

【鸿蒙学习笔记】通过用户首选项实现数据持久化

官方文档:通过用户首选项实现数据持久化 目录标题 使用场景第1步:源码第2步:启动模拟器第3步:启动entry第6步:操作样例2 使用场景 Preferences会将该数据缓存在内存中,当用户读取的时候,能够快…

千呼新零售2.0-OCR图像识别采购单视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

29.PLL(锁相环)-IP核的调用

(1)PLL IP核的简介: Phase Locked Loop,即锁相环,是最常用的IP核之一,其性能强大,可以对输入到FPGA的时钟信号进行任意分频、倍频、相位调整、占空比调整,从而输出一个期望时钟。锁相…

如何从gitlab删除仓库

嗨,我是兰若姐姐。今天发现gitlab上有些仓库的代码没有用,是个多余的仓库,想要删掉,经过一番操作之后,成功的删除了,git上没有 多余的仓库,看着干净舒服很多,现在把删除的过程分享出…

Node.js如何在Windows安装?

文章目录 主要特点:使用场景:安装方法验证是否安装成功 Node.js 是一个开源、跨平台的JavaScript运行环境,由Ryan Dahl于2009年创建。它允许开发者在服务器端运行JavaScript代码。Node.js 基于Chrome V8 JavaScript引擎构建,其设计…

各地户外分散视频监控点位,如何实现远程集中实时监看?

公司业务涉及视频监控项目承包搭建,此前某个项目需求是为某林业公司提供视频监控解决方案,需要实现各地视频摄像头的集中实时监看,以防止国家储备林的盗砍、盗伐行为。 公司原计划采用运营商专线连接各个视频监控点位,实现远程视…

前后端通信 —— HTTP/HTTPS

目录 一、HTTP/HTTPS 简介 1、HTTP 2、HTTPS 二、HTTP 工作过程 三、HTTP 消息 1、HTTP消息结构 2、HTTP消息示例 四、HTTP 方法(常用) 1、GET 2、POST 3、PUT 4、DELETE 5、GET与POST对比 五、HTTP 状态码(常用) …

【Hive SQL 每日一题】在线峰值人数计算

文章目录 测试数据需求说明需求实现 测试数据 -- 创建 user_activity 表 DROP TABLE IF EXISTS user_activity ; CREATE TABLE user_activity (user_id STRING,activity_start TIMESTAMP,activity_end TIMESTAMP );-- 插入数据 INSERT INTO user_activity VALUES (user1, 2024…

GAN生成对抗网络

GAN生成对抗网络 GANStable Diffusion GAN生成对抗网络子啊2015年横空出世,在当时掀起了巨大轰动,很多人预研它将开创一个全新的学习范式,当时有一个很流行的说法:样本不够,GAN来凑。现如今,大模型当道&…

vue+lodop实现web端打印功能

lodop官网下载地址:http://www.c-lodop.com/download.html 1、下载插件(如果只是想实现打印功能,下载红框里的即可) 2、解压缩,然后根据自己的操作系统安装控件 32位系统安装:install_lodop32.exe&#x…

通俗易懂,幽默诙谐,《IP 核芯志》让逻辑设计思想摆脱枯燥的标签(可下载)

在科技的广袤星空中,数字逻辑设计宛如一颗璀璨的明星,闪耀着智慧与创造的光芒。而在这光芒的深处,IP 核芯则是那关键的能量源泉,驱动着无数创新的浪潮。 《IP 核芯志——数字逻辑设计思想》犹如一座灯塔,照亮了我们在…

Docker Push Docker Hub

首先可以参考 Docker | 将自己的docker镜像推送到docker hub[图文详情]_如何将自己的docker镜像上传到dockerhub上-CSDN博客 将自己的镜像打标签 和 镜像推送到 docker hub上的图文注意一下 1.打标签之前 docker tag paddleocr_fast_api:1.0 hmgx/wlx:3.0 2.打标签之后 3.开…