Обмен технологиями

Kotlin MultiPlatform (KMP)

2024-07-12

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

Kotlin Мультиплатформенный

Вставьте сюда описание изображения

1.Что такое КМП?

Kotlin Multiplatform — это инструмент, который позволяет нам писать код на одном и том же языке программирования (Kotlin), который может одновременно работать на разных устройствах, таких как мобильные телефоны, компьютеры и веб-страницы. Это экономит время, поскольку вам не нужно переписывать одну и ту же функциональность для каждого устройства.

2. Каковы характеристики?

Функция 1: Совместное использование кода. Логический код, например функция вычисления, можно написать один раз, а затем использовать в приложениях для Android и iOS.
Функция 2. Код, специфичный для платформы. Для каждой платформы можно написать специальный код для управления функциями, уникальными для этой платформы, например использованием камеры устройства. Например, используйте API-интерфейс камеры Android для съемки изображений в приложении Android и используйте UIImagePickerController iOS в приложении iOS для съемки изображений.
Функция 3: Совместимость. Kotlin Multiplatform может взаимодействовать с существующим кодом Java, Swift или Objective-C, что упрощает интеграцию в существующие проекты.
Особенность 4. Различные периоды компиляции — код на androidMain компилируется с использованием kotlin/jvm в код, понятный Android, а код на 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()}!"
    }
}

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

Приведенный выше код является общим кодом в перекрестном режиме kmp. Эти коды могут работать как на Android, так и на iOS. Однако в конечном итоге этот код возвращает строковый формат. Имя платформы должно быть получено из этой строки, для чего требуется перекрестное преобразование. терминал, потому что способ получения package.name в синтаксисе kotlin на Android и ios различен, поэтому нам нужно определить повод, чтобы сообщить androidMain и iosMain, а вы двое объясните логику получения Platform.name соответственно. с ним, а затем начинают реализовывать эту логику. Код следующий.

interface Platform {
    val name: String
}

expect fun getPlatform(): Platform

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

2. Реализация для конкретной платформы. В androidMain и iosMain обеспечьте конкретную реализацию интерфейса в commonMain и напишите код для некоторых требований, специфичных для платформы.
Реализация платформы 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

Реализация платформы 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

Они оба послушно сказали: «Хорошо, брат, мы реализуем это для тебя». Сторона Android сказала: «Брат, я реализовала это вот так», а сторона iOS сказала: «Брат, я реализовала это вот так~ ~~"