Android プロジェクト内に Kotlin マルチプラットフォーム(KMP)モジュールを作成するには、Kotlin マルチプラットフォーム共有モジュール テンプレートを使用します。このテンプレートは、Android Studio Meerkat と Android Gradle プラグイン バージョン 8.8.0 以降で利用できます。
モジュール テンプレートを使用すると、Android と iOS プラットフォームをターゲットとする最小構成の新しいモジュールの作成を自動化できます。
共有 KMP モジュールを設定する
共有 KMP モジュールを作成するには、次の操作を行います。
- [File] > [New] > [New Module] を選択します。
- [Templates] パネルで [Kotlin Multiplatform Shared Module] テンプレートを選択します。
![新しい KMP モジュールを作成する](https://developer.android.com/static/kotlin/images/kmp_new_module.png?hl=ja)
テンプレートの各フィールドは次のとおりです。
- Module name - Gradle モジュール名と iOS フレームワーク名を定義します(後で変更可能)。
- Package name - このモジュール内のファイルのパッケージ名を定義します。
- [完了] をクリックして、Gradle がプロジェクトと同期できるようにします。また、新しく作成されたモジュール ファイルをソース管理に追加するよう求められることもあります。
完了すると、Android Studio の [プロジェクト ビュー] に、新しい共有モジュールと各プラットフォームのソースセットが表示されます。
![新しい共有モジュールを示すプロジェクト ビュー](https://developer.android.com/static/kotlin/images/kmp_project_structure.png?hl=ja)
共有モジュールを Android アプリにリンクする
モジュール ウィザードでは、新しく作成されたモジュールが既存のモジュールに依存関係として追加されることはありません。次のステップとして、他の 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 プロジェクトで共有ライブラリをリンクする
iOS プロジェクトから共有コードにアクセスできるようにするには、スクリプト フェーズを追加して、Swift ソースをコンパイルする前に Kotlin フレームワークを生成します。
- Android Studio でファイルを右クリックし、[Open In] と [Open in Associated Application] を選択します。これにより、Xcode で iOS アプリが開きます。
![関連するアプリで開く](https://developer.android.com/static/kotlin/images/kmp_open_in.png?hl=ja)
- プロジェクト ナビゲータでプロジェクト名をダブルクリックして、プロジェクト設定を開きます。
![Xcode プロジェクト設定ダイアログ](https://developer.android.com/static/kotlin/images/kmp_xcode_1.png?hl=ja)
- このフェーズの内容を明確にするために、デフォルトの [Run Script] 名を [Compile Kotlin Framework] に変更します。[Run Script] のタイトルをダブルクリックして編集します。
- ビルドフェーズを開き、[シェル] テキスト フィールドに次のスクリプト コードを入力します。
![新しい実行スクリプト ビルドフェーズの追加](https://developer.android.com/static/kotlin/images/kmp_xcode_runscript.png?hl=ja)
[Run Script] フェーズを [Compile Sources] フェーズの前にドラッグします。
図 6. ソースをコンパイルする前にスクリプト ビルドフェーズを実行する ⌘B をクリックするか、[Product] メニューに移動して [Build] を選択して、Xcode でプロジェクトをビルドします。
ビルドが成功すると、次のようなアイコンが表示されます。
![Xcode でビルドが成功したことが示される](https://developer.android.com/static/kotlin/images/kmp_xcode_success.png?hl=ja)
iOS アプリで共有コードにアクセスする
iOS アプリが共有モジュールのコードに正常にアクセスできることを確認するには、次の操作を行います。
- iOS プロジェクトで、
Sources/View/ContentView.swift
にあるContentView.swift
ファイルを開きます。 - ファイルの先頭にインポート
sharedKit
を追加します。 - 次のように、表示される文字列に
Platform_iosKt.platform()
情報を含めるように Text ビューを変更します。
この更新では、Fruitties アプリが共有モジュールから platform()
関数を呼び出せるかどうかを確認します。iOS プラットフォームで実行すると「iOS」が返されます。
![iOS アプリを実行している Xcode シミュレータ](https://developer.android.com/static/kotlin/images/kmp_xcode_sim.png?hl=ja)
参考情報
KMP 開発を初めて行う場合は、公式の KMP ドキュメントでその他のガイドをご覧ください。iOS 開発が初めての場合は、Swift の基本に関するドキュメントをご覧ください。