Kotlin マルチプラットフォームを既存のプロジェクトに追加する

Android プロジェクト内に Kotlin マルチプラットフォーム(KMP)モジュールを作成するには、Kotlin マルチプラットフォーム共有モジュール テンプレートを使用します。このテンプレートは、Android Studio Meerkat と Android Gradle プラグイン バージョン 8.8.0 以降で利用できます。

モジュール テンプレートを使用すると、Android と iOS プラットフォームをターゲットとする最小構成の新しいモジュールの作成を自動化できます。

共有 KMP モジュールを設定する

共有 KMP モジュールを作成するには、次の操作を行います。

  1. [File] > [New] > [New Module] を選択します。
  2. [Templates] パネルで [Kotlin Multiplatform Shared Module] テンプレートを選択します。
新しい KMP モジュールを作成する
図 1. 新しい KMP モジュールを作成する

テンプレートの各フィールドは次のとおりです。

  • Module name - Gradle モジュール名と iOS フレームワーク名を定義します(後で変更可能)。
  • Package name - このモジュール内のファイルのパッケージ名を定義します。
    1. [完了] をクリックして、Gradle がプロジェクトと同期できるようにします。また、新しく作成されたモジュール ファイルをソース管理に追加するよう求められることもあります。

完了すると、Android Studio の [プロジェクト ビュー] に、新しい共有モジュールと各プラットフォームのソースセットが表示されます。

新しい共有モジュールを示すプロジェクト ビュー
図 2. 新しい共有モジュールを示すプロジェクト ビュー

モジュール ウィザードでは、新しく作成されたモジュールが既存のモジュールに依存関係として追加されることはありません。次のステップとして、他の Android 依存関係と同様に、共有モジュールを既存の Gradle モジュールのいずれかにリンクする必要があります。

dependencies {
    ...
    implementation(project(":shared"))
}

有効にすると、通常どおりコードにアクセスできます。Android アプリから、androidMain または commonMain で利用可能なコードにアクセスできます。

Kotlin マルチプラットフォーム プロジェクトの構造の詳細については、Kotlin マルチプラットフォーム プロジェクトの構造の基本をご覧ください。

iOS アプリに共有モジュールを設定する

Swift は Kotlin モジュールを直接使用できないため、コンパイルされたバイナリ フレームワークを生成する必要があります。

Android Studio の新しいモジュール テンプレートでは、各 iOS アーキテクチャのフレームワークを生成するように共有モジュールが構成されます。次のコードは、共有モジュールの build.gradle.kts ファイルにあります。

val xcfName = "sharedKit"

iosX64 {
  binaries.framework {
    baseName = xcfName
  }
}

iosArm64 {
  binaries.framework {
    baseName = xcfName
  }
}

iosSimulatorArm64 {
  binaries.framework {
    baseName = xcfName
  }
}

他のアーキテクチャ タイプの定義については、階層型プロジェクト構造をご覧ください。

iOS プロジェクトから共有コードにアクセスできるようにするには、スクリプト フェーズを追加して、Swift ソースをコンパイルする前に Kotlin フレームワークを生成します。

  1. Android Studio でファイルを右クリックし、[Open In] と [Open in Associated Application] を選択します。これにより、Xcode で iOS アプリが開きます。
関連するアプリで開く
図 3. 関連するアプリで開く
  1. プロジェクト ナビゲータでプロジェクト名をダブルクリックして、プロジェクト設定を開きます。
Xcode プロジェクト設定ダイアログ
図 4. Xcode プロジェクト設定ダイアログ
  1. このフェーズの内容を明確にするために、デフォルトの [Run Script] 名を [Compile Kotlin Framework] に変更します。[Run Script] のタイトルをダブルクリックして編集します。
  2. ビルドフェーズを開き、[シェル] テキスト フィールドに次のスクリプト コードを入力します。
新しい実行スクリプト ビルドフェーズの追加
図 5. 実行スクリプト ビルドフェーズ
  1. [Run Script] フェーズを [Compile Sources] フェーズの前にドラッグします。

    ソースをコンパイルする前にスクリプト ビルドフェーズを実行する
    図 6. ソースをコンパイルする前にスクリプト ビルドフェーズを実行する

  2. ⌘B をクリックするか、[Product] メニューに移動して [Build] を選択して、Xcode でプロジェクトをビルドします。

ビルドが成功すると、次のようなアイコンが表示されます。

Xcode でビルドが成功したことが示される
図 7. ビルドが成功しました

iOS アプリで共有コードにアクセスする

iOS アプリが共有モジュールのコードに正常にアクセスできることを確認するには、次の操作を行います。

  1. iOS プロジェクトで、Sources/View/ContentView.swift にある ContentView.swift ファイルを開きます。
  2. ファイルの先頭にインポート sharedKit を追加します。
  3. 次のように、表示される文字列に Platform_iosKt.platform() 情報を含めるように Text ビューを変更します。

この更新では、Fruitties アプリが共有モジュールから platform() 関数を呼び出せるかどうかを確認します。iOS プラットフォームで実行すると「iOS」が返されます。

iOS アプリを実行している Xcode シミュレータ
図 8. iOS アプリを実行している Xcode シミュレータ

参考情報

KMP 開発を初めて行う場合は、公式の KMP ドキュメントでその他のガイドをご覧ください。iOS 開発が初めての場合は、Swift の基本に関するドキュメントをご覧ください。