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

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

このモジュール テンプレートを使用すると、Android プラットフォームと iOS プラットフォームをターゲットとする最小構成の新しいモジュールを自動的に作成できます。KMP は、デスクトップやウェブなど、他のターゲットもサポートしています。これらは後でモジュールに追加できます。完全なリストについては、サポートされているプラットフォームの安定性をご覧ください。ターゲットを宣言するには、マルチプラットフォーム Gradle DSL リファレンスのターゲットをご覧ください。

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

共有 KMP モジュールを作成する手順は次のとおりです。

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

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

  • Module name - Gradle モジュール名と iOS フレームワーク名を定義します(後で変更可能)。
  • Package name - このモジュール内のファイルのパッケージ名を定義します。
    1. [Finish] をクリックして、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. このフェーズの内容を明確にするために、デフォルトの [スクリプトの実行] の名称を [Kotlin フレームワークのコンパイル] に変更します。[スクリプトの実行] のタイトルをダブルクリックして編集します。
  2. ビルドフェーズを開き、[Shell] テキスト フィールドに次のスクリプト コードを入力します。
新しい実行スクリプト ビルドフェーズを追加する
図 5. Run script ビルドフェーズ
  1. [Run Script] フェーズを [Compile Sources] フェーズの前にドラッグします。

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

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

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

Xcode に表示されたビルド成功のメッセージ
図 7. ビルドが成功しました。

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

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

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

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

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

参考情報