Condivisione della tecnologia

Kotlin MultiPlatform (KMP)

2024-07-12

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

Kotlin Multipiattaforma

Inserisci qui la descrizione dell'immagine

1.Che cos'è il KMP?

Kotlin Multiplatform è uno strumento che ci permette di scrivere codice nello stesso linguaggio di programmazione (Kotlin), che può essere eseguito su diversi dispositivi contemporaneamente, come telefoni cellulari, computer e pagine web. In questo modo si risparmia tempo perché non è necessario riscrivere la stessa funzionalità per ciascun dispositivo.

2. Quali sono le caratteristiche?

Caratteristica 1: Condivisione del codice: il codice logico, ad esempio una funzione di calcolo, può essere scritto una volta e quindi utilizzato nelle app Android e iOS.
Caratteristica 2: codice specifico della piattaforma: è possibile scrivere codice specifico per ciascuna piattaforma per gestire funzionalità uniche della piattaforma, come l'utilizzo della fotocamera del dispositivo. Ad esempio, usa l'API Camera di Android per scattare foto in un'applicazione Android e usa UIImagePickerController di iOS in un'applicazione iOS per scattare foto.
Caratteristica 3: Interoperabilità: Kotlin Multiplatform può interoperare con il codice Java, Swift o Objective-C esistente, semplificando l'integrazione nei progetti esistenti.
Caratteristica 4: Periodi di compilazione diversi: il codice su androidMain viene compilato utilizzando kotlin/jvm in un codice comprensibile da Android e il codice su iosMain viene compilato utilizzando kotlin/native in un codice comprensibile da iOS.

3. Come eseguire le funzioni tra terminali

fare un passo:
1. Definire la logica condivisa: definire innanzitutto la logica aziendale comune in un modulo condiviso (ovvero, commonMain). Questi codici non dipendono da alcuna piattaforma, quindi possono essere eseguiti su qualsiasi piattaforma. Questo modulo condiviso è anche equivalente alla base per cross -fine condivisione.
Logica condivisa (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()}!"
    }
}

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

Il codice sopra è il codice condiviso in kmp cross-end. Questi codici possono essere eseguiti sia su Android che su iOS. Tuttavia, questo codice restituisce infine un formato stringa Platform.name che deve essere ottenuto da questa stringa, che richiede cross-. terminal, perché il modo per ottenere platform.name è diverso nella sintassi kotlin su Android e ios, quindi dobbiamo definire una scusa per dire ad androidMain e iosMain, e voi due fornirete la logica per ottenere platform.name di cui mi occuperò rispettivamente it, e poi inizieranno a implementare questa logica. Il codice è il seguente

interface Platform {
    val name: String
}

expect fun getPlatform(): Platform

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

2. Implementazione specifica della piattaforma: in androidMain e iosMain, fornire un'implementazione specifica dell'interfaccia in commonMain e scrivere codice per alcuni requisiti specifici della piattaforma.
Implementazione della piattaforma 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

Implementazione della piattaforma 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

I due hanno detto obbedientemente: "Okay, fratello, lo implementeremo per te." Il lato Android ha detto: "Fratello, l'ho implementato in questo modo", e il lato iOS ha detto: "Fratello, l'ho implementato in questo modo~ ~~"