• Kotlin MultiPlatform(KMP)


    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说,大哥,我是那样实现的~~~

  • 相关阅读:
    ASON 技术简介
    【愚公系列】2022年11月 微信小程序-优购电商项目-商品支付页面
    pytest Allure报告生成全量配置git+jenkins+allure
    【语音通信】语音通信系统包括语音硬件采样,抽样量化,PCM编码解码模块,FIR滤波,QPSK调制解调模块,语音增强模块以及语音信号还原
    CGLIB 动态代理使用
    用Python实现链表---单向循环链表
    Java开发全终端实战租房项目-服务的具体实现
    分布式限流利器,手撕&redisson实现
    3.Linux文件管理命令-----cat 显示文本文件内容
    go反射特性实践——获取结构体标签的值、获取结构体属性信息、获取和修改结构体属性值
  • 原文地址:https://blog.csdn.net/weixin_73000974/article/details/140359339