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

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 07:12:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 07:12:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 07:12:01       58 阅读
  4. Python语言-面向对象

    2024-07-12 07:12:01       69 阅读

热门阅读

  1. ffmpeg新旧函数对比

    2024-07-12 07:12:01       29 阅读
  2. 量化机器人对投资策略的调整

    2024-07-12 07:12:01       32 阅读
  3. 路由器概述以及静态路由配置

    2024-07-12 07:12:01       25 阅读
  4. hnust 1963: 邻接矩阵表示法

    2024-07-12 07:12:01       23 阅读
  5. 在Linux系统,高效管理Python数据采集程序!

    2024-07-12 07:12:01       29 阅读
  6. 【Vue】vue3中使用swipe竖直方向上滚动

    2024-07-12 07:12:01       19 阅读
  7. C语言从头学30——字符串

    2024-07-12 07:12:01       18 阅读
  8. Git使用简介及相关命令

    2024-07-12 07:12:01       26 阅读