Jetpack Compose 1.4 をAndroid Studio Flamingoで試す方法
2023年5月5日現在、Jetpack Compose 1.4自体はStableチャンネルに入っているが、Android Studio Flamingoでは試せない。Kotlinの新しいバージョンが必要なのだ。
そこでAndroid Studio Flamingo用のKotlin RC2プラグインをダウンロードして適用、Jetpack Compose 1.4を試してみるというのが本稿の趣旨である。
このJetpack Compose 1.4のUI上での大きなメリットとして、ようやくTextにminLinesが導入されたことが上げられる。例えば2行に固定したい場合、maxLines = 2, minLines = 2とすればそのテキストは1行分しかない場合でも、2行分の高さを確保してくれるし、3行以上ある場合には3点リーダなどで続きの存在を示す、等の対応が可能になる。
今まで色々苦労してやってきたことがたった1行のminLines追加で可能になるのだ。
ここに書く方法はなにもKotlinプラグインに限った話ではなくて、様々なバージョンのプラグインを利用してみたい場合に使える方法である。プロジェクトによっては誰もやったことがない、という事もあるだろう。
互換性のあるプラグインの入手
settings(preferences)で対象のプラグインを開くと右ペインの下の方にplugin homepageというリンクがあるのでそれをクリックする。
プラグインのホームページへ飛んで、右上のGetを押すとダウンロードページへ行く。
導入先のAndroid Studioと互換性のあるプラグインを探す。
ここでは上部の真ん中辺りにあるチップからAndroid Studioを選び、RC2を入れたいので右側のチップでEAPを選ぶ。
Android Studio Flamingoのバージョンを確認し、自分のものと同じものを選ぶ。ここで間違ったものを入れるとAndroid Studioが起動しなくなるので要注意。ダイアログが開いて手順を教えてくれる。これはGot itしか選べない。
ダウンロードしてきたものを導入するにはAndroid Studioのプラグイン設定画面の上部中央右にある歯車アイコンをクリックする。
選択肢の中からInstall Plugin from Diskを選んで、先ほどダウンロードした(zip)ファイルを指定する。
再起動を促されるので再起動すると。指定したバージョンに置き換わっている。
ただしビルドしようとするとJDKのバージョンが合わないといってエラーになることがある。
その場合、settings(preferences)でJDKを適切なものにしてやる必要がある。
Kotlin CompilerやCompose Compilerのバージョンによって異なるようだが基本は11 or 17である。
build.gradleの書き換え
そのままでは古いバージョンのComposeを使い続けるのでbuild.gradleに新しいものを使うように指示をする。以下は一例。
buildscript {
ext {
compose_version = '1.4.3'
compose_compiler_version = '1.4.3'
}
}
plugins {
id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' version '7.4.2' apply false
id 'org.jetbrains.kotlin.android' version '1.8.10' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Syncが無事通れば、実行ボタンが押せるはずである。
KotlinのコンパイラーとComposeのコンパイラーには結びつきがあって、一方的な下位互換のようなものはない。Compose と Kotlin の互換性マップを参照。
動作確認
いろんなものをダウンロードして、時間は掛かるもののビルドはできるはずだ。あとは実機なり、エミュレーターで動作確認。
まとめ
繰り返しになるがJetpack Compose 1.4はstableである。
またKotlin プラグインもIntelliJ IDEAではstable channelで1.8.21が入手できる。(というか入ってくる)
ただ、Android Studioが対応し切れていないだけなのだ。
アプリ作成側としてはJetpack Compose 1.4の機能を見越した開発を進めるのが吉だろう。