2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

2023年元旦にKMMを始めるためのテンプレート作り

Last updated at Posted at 2023-01-01

この記事は?

年末から本格的にKMMの勉強を始めた @uehatsu です。せっかく元旦なので新しいKMMプロジェクトを作る手順をまとめてみたいと思います。基本的にAndroid Studioの出す警告に沿って作業しているだけですが、まとまった記事がなかったので勉強がてらまとめてみます。

AndroidはElectric Eelの夢を見るか?

今回は詳細は省きますが2023/01/01時点のAndroid StudioのStable版であるDolphin 2021.3.1 Patch 1だと、AndroidのUnitテストが正しく動作しないようなので、Electric Eel 2022.1.1 RC3をJetBrains Tool Boxからインストールしました。Electric Eelのインストール後、KMMなどのプラグインをインストールしておきます。

Android Studio Electric Eel | 2022.1.1 RC 3
Build #AI-221.6008.13.2211.9424903, built on December 21, 2022
Runtime version: 11.0.15+0-b2043.56-8887301 aarch64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 12.6.2
GC: G1 Young Generation, G1 Old Generation
Memory: 2048M
Cores: 8
Registry:
    external.system.auto.import.disabled=true
    ide.text.editor.with.preview.show.floating.toolbar=false

Non-Bundled Plugins:
    manjaro.mpb (1.7)
    com.intellij.marketplace (221.6008.18)
    IdeaVIM (1.10.3)
    izhangzhihao.rainbow.brackets (2023.1.0-ij)
    com.jetbrains.kmm (0.5.1(221)-61)

今回はKotlin Multiplatform Appをターゲットとします

KMMの醍醐味といえばLibrary(?)ですが、今回はAppをターゲットにします。早速プロジェクトを作っていきましょう。

テンプレートの作成

なにはともあれNew Project

New ProjectからKotlin Multiplatform Appを選択しNextをクリックします。

image.png

プロジェクト名やパッケージ名、保存先などを選択します。Minimum SDKはターゲットにするAndroid APIの最小値を選択してください。選択したらNextをクリックします。

image.png

最後にAndroidやiOSのアプリケーション名、Sharedモジュール名などを選択します。今回はテストも書きたいのでAdd sample tests for Shared Moduleのチェックを入れておきます。iOS framework distributionですがパッケージマネージャに何を使うかを選択します。ここでは純正のRegular frameworkを選択しFinishをクリックしてプロジェクトの雛形ができます。

image.png

プロジェクトが完成したのでまずはgit initなど

プロジェクトができたので、この時点でのgit周りの設定を終わらせてしまいます。CUIでもGUIでも構いませんので、git初期化などしてしまいましょう。

terminal
git init
git add .
git commit -a -m 'First commit'

build.gradle.ktsの更新

build.gradle.ktsはこの時点で3つあるはずです。

terminal
% find . -name build.gradle.kts
./shared/build.gradle.kts
./build.gradle.kts
./androidApp/build.gradle.kts

まずはトップディレクトリ直下のbuild.gradle.ktsを修正します。修正内容はkotlinバージョンを1.7.10から1.7.21にアップデートします。

/build.gradle.kts
-    kotlin("android").version("1.7.10").apply(false)
-    kotlin("multiplatform").version("1.7.10").apply(false)
+    kotlin("android").version("1.7.21").apply(false)
+    kotlin("multiplatform").version("1.7.21").apply(false)

次にandroidApp配下のbuild.gradle.ktsを修正します。kotlinCompilerExtensionVersionを更新するついでに、アップデートが出ているパッケージも更新しておきます。パッケージの更新はAndroid Studioがアラートを出してくれているので、それを適応するだけのお手軽更新です。

/androidApp/build.gradle.kts
-        kotlinCompilerExtensionVersion = "1.3.0"
+        kotlinCompilerExtensionVersion = "1.4.0-alpha02"
(中略)
-    implementation("androidx.compose.ui:ui:1.2.1")
-    implementation("androidx.compose.ui:ui-tooling:1.2.1")
-    implementation("androidx.compose.ui:ui-tooling-preview:1.2.1")
-    implementation("androidx.compose.foundation:foundation:1.2.1")
-    implementation("androidx.compose.material:material:1.2.1")
-    implementation("androidx.activity:activity-compose:1.5.1")
+    implementation("androidx.compose.ui:ui:1.3.2")
+    implementation("androidx.compose.ui:ui-tooling:1.3.2")
+    implementation("androidx.compose.ui:ui-tooling-preview:1.3.2")
+    implementation("androidx.compose.foundation:foundation:1.3.1")
+    implementation("androidx.compose.material:material:1.3.1")
+    implementation("androidx.activity:activity-compose:1.6.1")

ファイルの修正が終わったら画面右上のSync Nowをクリックしておきます。

Kotlin migrationを実行するか聞かれます。特に更新されるファイルはありませんが、念の為Run migration > Whole project > Analyzeでマイグレーションを実行しておきましょう。

この修正をした状態でもDuplicate content roots detectedと表示されますが、これは現状無視するしかないようです。Kotlinを1.8.0にアップデートし、色々設定を変更すると出なくなるのですが、そうすると今度はKotlin Compiler ExtensionがKotlinの1.7.21までしか対応していないためAndroid側のアプリ実行時にエラーがでてしまいます。これを緊急避難的に回避する方法はあるのですが、問題が出そうなので今回は1.7.21で止めておきます。

動作確認

各種動作を確認していきます。

androidTest.kt

shared配下のandroidTest.ktを実行します。特に問題はなくテストが通りました。

commonTest.kt

同じくcommonTest.ktを実行します。特に問題ありませんでした。

iosTest.kt

同じくiosTest.ktを実行します。環境によっては「iPhone XXが無いよ」的なエラーでテストが通らないことがありますが、その時はXcodeのシミュレータに無いと言われたiPhoneのシミュレータを追加してください。

Androidエミュレータ実行

Android Appを実行し、正しくエミュレータ上でHello, Android xx!と出ていることを確認します。

iPhoneシミュレータ実行

iOS Appを実行し、正しくシミュレータ上でHello, iOS xx.x!と出ていることを確認します。

git commitなど

テンプレートができたので、適宜 git commitしておきます。

さいごに

ここまで来るのに実はパッケージ依存度のエラーがたくさん出ていました。いろいろなパッケージの依存度が高いのは最近の開発では仕方が無いこととはいえ、もう少しスマートにならないものでしょうか?

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?