Compartir tecnología

Kotlin Multiplataforma (KMP)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Kotlin Multiplataforma

Insertar descripción de la imagen aquí

1. ¿Qué es KMP?

Kotlin Multiplatform es una herramienta que nos permite escribir código en un mismo lenguaje de programación (Kotlin), el cual puede ejecutarse en diferentes dispositivos al mismo tiempo, como teléfonos móviles, ordenadores y páginas web. Hacer esto ahorra tiempo porque no es necesario reescribir la misma funcionalidad para cada dispositivo.

2. ¿Cuáles son las características?

Característica 1: Código compartido: el código lógico, como una función de cálculo, se puede escribir una vez y luego usarse en aplicaciones de Android e iOS.
Característica 2: Código específico de la plataforma: se puede escribir un código específico para cada plataforma para manejar funciones exclusivas de la plataforma, como el uso de la cámara del dispositivo. Por ejemplo, use la API de cámara de Android para tomar fotografías en una aplicación de Android y use UIImagePickerController de iOS en una aplicación de iOS para tomar fotografías.
Característica 3: Interoperabilidad: Kotlin Multiplatform puede interoperar con código Java, Swift u Objective-C existente, lo que facilita la integración en proyectos existentes.
Característica 4: Diferentes períodos de compilación: el código en androidMain se compila usando kotlin/jvm en un código que Android puede entender, y el código en iosMain se compila usando kotlin/native en un código que ios puede entender.

3. Cómo cruzar funciones de terminales

paso:
1. Defina la lógica compartida: primero defina la lógica empresarial común en un módulo compartido (es decir, commonMain). Estos códigos no dependen de ninguna plataforma, por lo que pueden ejecutarse en cualquier plataforma. Este módulo compartido también es equivalente a la base cruzada. -terminar de compartir.
Lógica compartida (común principal):

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()}!"
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

El código anterior es el código compartido en kmp cross-end. Estos códigos se pueden ejecutar tanto en Android como en iOS. Sin embargo, este código finalmente devuelve un formato de cadena. Platform.name debe obtenerse de esta cadena, lo que requiere cross-end. terminal, porque la forma de obtener platform.name es diferente en la sintaxis de Kotlin en Android e ios, por lo que tenemos que definir una excusa para decirle a androidMain e iosMain, y ustedes dos dan la lógica para obtener platform.name respectivamente. con él, y luego comienzan a implementar esta lógica. El código es el siguiente.

interface Platform {
    val name: String
}

expect fun getPlatform(): Platform

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2. Implementación específica de la plataforma: en androidMain e iosMain, proporcione una implementación específica de la interfaz en commonMain y escriba código para algunos requisitos específicos de la plataforma.
Implementación de la plataforma Android (androidMain):

import android.os.Build

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

actual fun getPlatform(): Platform = AndroidPlatform()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Implementación de la plataforma iOS (iosMain):

import platform.UIKit.UIDevice

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

actual fun getPlatform(): Platform = IOSPlatform()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Los dos dijeron obedientemente: "Está bien, hermano, lo implementaremos por usted". El lado de Android dijo: "Hermano, lo implementé así", y el lado de iOS dijo: "Hermano, lo implementé así ~ ~~"