Kotlin Multiplatform (KMP) の使い方やお勧めのライブラリの紹介

kyamada,KotlinCompose

概要

先日、K2コンパイラを搭載したKotlin2.0がリリースされました。 K2コンパイラは、根本からマルチプラットフォームに対応し、コンパイル速度を 2 倍に高めるようです。

この記事では Kotlin Multiplatform (KMP) の使い方やお勧めのライブラリを紹介します。

Kotlin Multiplatform プロジェクト作成

以下のウィザードでプロジェクトを作成します。

https://kmp.jetbrains.com/ (opens in a new tab)

チュートリアル

公式の以下のチュートリアルが参考になります。

ナビゲーション

ナビゲーションライブラリはVoyager (opens in a new tab)を利用するのがお勧めです。タブナビゲーションなども実装出来ます。

また、Compose Multiplatform 1.6.10-beta01 から実験的にナビゲーションライブラリが追加されたので、そちらの方法でやることもできます。

参考: Navigation and routing (opens in a new tab)

アイコン

androidx.compose.material.icons (opens in a new tab)に用意されているアイコンであれば、以下のように使用できます。

Icon(Icons.Default.PlayArrow, contentDescription = "play")

画像が用意されていない場合は、commonMain/composeResources/drawable ディレクトリ以下に、vector形式のxmlを配置すれば使用できます。

vector形式のxmlは以下の方法で作成できます。

  1. AndroidStudioで androidMain/res/drawable ディレクトリを右クリック > New > Vector Asset
  2. Asset Typeを Clip Artにして、適当なClip Artを選択して作成する。
  3. xmlファイルが作成されるので、commonMain/composeResources/drawable 以下に移動する。

そして、以下のように使用します。

Icon(painterResource(Res.drawable.text_to_speech), contentDescription = "text_to_speech")

ファイル操作

Okio (opens in a new tab)を使うとsharedからファイルの操作が可能です。 zipの解凍も可能ですが、zip圧縮はできません。

ネットワーク

ネットワークライブラリは、チュートリアル (opens in a new tab)でも紹介されている Ktor (opens in a new tab)一択です。

データベース

将来性はGoogle製のRoom (Kotlin Multiplatform) (opens in a new tab)が一番あると思いますが、まだalpha版なので致命的なバグが残っています。 以下は、ARM32 のAndroid端末でクラッシュするバグで、私が発見して報告しました。

BundledSQLiteDriver: couldn't find "libsqliteJni.so" (opens in a new tab)

少なくともこのバグが直ってからでないと、本番環境でリリースすることは出来ません。 2024/6/13追記: 2.5.0-alpha04 (opens in a new tab)で修正されました。

枯れたライブラリを使いたい場合は、チュートリアル (opens in a new tab)でも使われているSQLDelight (opens in a new tab)を使うのが良いと思います。

SharedPreferences, NSUserDefaults

私は russhwolf/multiplatform-settings (opens in a new tab) というライブラリで共通化しています。

© 品川アプリ.RSS