Android プロジェクト内に Kotlin マルチプラットフォーム(KMP)モジュールを作成するには、Android Studio Meerkat と Android Gradle プラグイン 8.8.0 以降で使用できる Kotlin マルチプラットフォーム共有モジュール テンプレートを使用します。
このモジュール テンプレートを使用すると、Android プラットフォームと iOS プラットフォームをターゲットとする最小構成の新しいモジュールを自動的に作成できます。KMP は、デスクトップやウェブなど、他のターゲットもサポートしています。これらは後でモジュールに追加できます。完全なリストについては、サポートされているプラットフォームの安定性をご覧ください。ターゲットを宣言するには、マルチプラットフォーム Gradle DSL リファレンスのターゲットをご覧ください。
共有 KMP モジュールを設定する
共有 KMP モジュールを作成する手順は次のとおりです。
- [File] > [New] > [New Module] を選択します。
- [Templates] パネルで [Kotlin Multiplatform Shared Module] テンプレートを選択します。
テンプレートの各フィールドは次のとおりです。
- Module name - Gradle モジュール名と iOS フレームワーク名を定義します(後で変更可能)。
- Package name - このモジュール内のファイルのパッケージ名を定義します。
- [Finish] をクリックして、Gradle をプロジェクトと同期します。また、新しく作成されたモジュール ファイルをソース管理に追加するよう求められることもあります。
完了すると、Android Studio のプロジェクト ビューに、新しい共有モジュールと各プラットフォームのソースセットが表示されます。
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 アプリが開きます。
- プロジェクト ナビゲータでプロジェクト名をダブルクリックして、プロジェクト設定を開きます。
- このフェーズの内容を明確にするために、デフォルトの [スクリプトの実行] の名称を [Kotlin フレームワークのコンパイル] に変更します。[スクリプトの実行] のタイトルをダブルクリックして編集します。
- ビルドフェーズを開き、[Shell] テキスト フィールドに次のスクリプト コードを入力します。
[Run Script] フェーズを [Compile Sources] フェーズの前にドラッグします。
図 6. ソースのコンパイル前にスクリプト ビルド フェーズを実行する ⌘B をクリックするか、[Product] メニューに移動して [Build] を選択し、Xcode でプロジェクトをビルドします。
ビルドが成功すると、次のアイコンが表示されます。
iOS アプリで共有コードにアクセスする
iOS アプリが共有モジュールのコードに正常にアクセスできることを確認するには、次の操作を行います。
- iOS プロジェクトで、
Sources/View/ContentView.swiftにあるContentView.swiftファイルを開きます。 - ファイルの先頭に import
sharedKitを追加します。 - 次のように、表示される文字列に
Platform_iosKt.platform()情報が含まれるように Text ビューを変更します。
この更新により、アプリが共有モジュールから platform() 関数を呼び出せるかどうかがチェックされます。この関数は、iOS プラットフォームで実行すると、"iOS" を返します。
参考情報
- KMP 開発を初めて行う場合は、公式の KMP ドキュメントで詳細をご覧ください。
- iOS 開発が初めての場合は、Swift の基本に関するドキュメントをご覧ください。
- KMP の設定に関する一般的な問題については、KMP クイックスタートのトラブルシューティングをご覧ください。
- サンプルアプリについては、Android Kotlin Multiplatform のサンプルをご覧ください。