技術共有

Kotlin マルチプラットフォーム(KMP)

2024-07-12

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

Kotlin マルチプラットフォーム

ここに画像の説明を挿入します

1.KMPとは何ですか?

Kotlin Multiplatform は、同じプログラミング言語 (Kotlin) でコードを作成できるツールであり、携帯電話、コンピューター、Web ページなどの異なるデバイス上で同時に実行できます。これを行うと、デバイスごとに同じ機能を書き直す必要がなくなるため、時間を節約できます。

2. 特徴は何ですか?

特徴 1: コードの共有 – 計算関数などのロジック コードを一度記述すれば、Android アプリと iOS アプリの両方で使用できます。
機能 2: プラットフォーム固有のコード – デバイスのカメラの使用など、プラットフォーム固有の機能を処理するために、プラットフォームごとに固有のコードを作成できます。たとえば、Android アプリケーションで写真を撮るには Android の Camera API を使用し、iOS アプリケーションで写真を撮るには iOS の UIImagePickerController を使用します。
特徴 3: 相互運用性 – Kotlin マルチプラットフォームは既存の 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 の両方で実行できますが、このコードは最終的に文字列形式を取得する必要があり、それにはクロスが必要です。ターミナルでは、platform.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側は「お兄さん、こうやって実装しました」と言いました。それ~~~」