why
https://www.youtube.com/watch?v=r869VVmj26E&list=PLgAI_5b_7BdRaBPAD5RMrzjoSwefDXpkw&index=2
MokeLab さんのこの動画を参考にすると
プロジェクト作成でテンプレートから作っただけだと、全然最新のライブラリを使っていないらしい。
なので 2022-01-02 時点での最新に更新してみる。
ルートとアプリの build.gradle という設定ファイルを確認する
springboot と同じく、Gradle で管理されているプロジェクトなので
build.gradle という設定ファイルがある。
Android の場合は
- プロジェクトルートの設定ファイル ( Project: HelloJetpack )
- そのアプリの設定ファイル ( Module: HelloJetpack.ap )
の 2 つがある
Compose 1.3.2 と追従する Kotlin 1.7.20 への更新
ルートの build.grade で compose_ui を 1.1.1 から 1.3.2 に更新
buildscript {
ext {
compose_ui_version = '1.1.1'
}
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '7.3.1' apply false
id 'com.android.library' version '7.3.1' apply false
id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
}
トップレベルだから、これらの設定はサブプロジェクトやモジュールに引き継がれるとコメントから解釈した。
まず Jetpack Compose のバージョンを確認する
https://developer.android.com/jetpack/androidx/releases/compose#versions
Android 公式を見ると 1.3.2 が最新の安定版だと書いてある。
buildscript {
ext {
compose_ui_version = '1.3.2'
}
}
なので compose_ui を 1.3.2 に変更してビルドしてみる
:app is currently compiled against android-32.
するとモジュールの android-32 と競合するとエラーが出た
Recommended action: Update this project to use a newer compileSdkVersion
of at least 33, for example 33.
最新の 33 の Compile Software Dev Kit に変更の推奨メッセージが出ている。
アプリの build.gradle で compileSdk を 32 から 33 に更新
なのでひと足先に、アプリの compileSdk を
android {
namespace 'com.example.hellojetpack'
compileSdk 32
defaultConfig {
applicationId "com.example.hellojetpack"
minSdk 31
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary true
}
}
32 から 33 に変えて、再度ビルドしてみる。
> Task :prepareKotlinBuildScriptModel UP-TO-DATE
BUILD SUCCESSFUL in 1s
すると無事にビルドすることができた。
targetSdk も 32 から 33 に更新する。
32 のままだと、Spring の TODO があるときのような警告が出ているので。
ルートの build.grade で kotlin を 1.6.10 から 1.7.21 にする
https://kotlinlang.org/docs/releases.html#release-details
kotlin の公式サイトを見ると、1.8 が最新だが、試験的な機能が入っているので安定版ではないように見える。
なのでそれの次に新しい 1.7.21 をいれる。
1.7.21 の欄には Android Studio Dolphin では 1.7.21 のプラグインを入れると Android Studio 自体がアップデートされると書いてある。
Android Studio がアップデートされることに問題を感じないので、1.7.21 を入れることにする。
plugins {
// ...
id 'org.jetbrains.kotlin.android' version '1.7.21' apply false
}
apply false にしておくと、モジュールで別のバージョンを指定したときに優先してくれるらしい。
これでルートで 1.7.21 にしてビルドすると
> Task :app:compileDebugKotlin FAILED
e: This version (1.1.1) of the Compose Compiler requires
Kotlin version 1.6.10
but you appear to be using Kotlin version 1.7.21
which is not known to be compatible.
コンパイルデバック Kotlin で落ちた。
アプリで compose 1.1.1 のコンパイラが使われているらしい。
そして compose 1.1.1 では Kotlin 1.6.10 が要求されている。
アプリの composeOption を 1.1.1 から 1.3.2 に更新
composeOptions {
kotlinCompilerExtensionVersion '1.1.1'
}
アプリの compose のオプションが 1.1.1 のままだった
ルートに合わせて 1.3.2 に更新してビルドする
e: This version (1.3.2) of the Compose Compiler requires
Kotlin version 1.7.20
but you appear to be using Kotlin version 1.7.21
which is not known to be compatible.
今度は、compose 1.3.2 が Kotlin 1.7.20 を要求していて
1.7.21 では使えないとでた。
ルートの kotlin を 1.7.21 から 1.7.20 に更新
plugins {
// ...
id 'org.jetbrains.kotlin.android' version '1.7.20' apply false
}
なので、kotlin を下げてビルドして Gradle Sync する
すると、今度こそエラーなしでビルドと実行できた。
app の依存を更新
現状を確認
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
implementation 'androidx.activity:activity-compose:1.3.1'
implementation "androidx.compose.ui:ui:$compose_ui_version"
implementation "androidx.compose.ui:ui-tooling-preview:$compose_ui_version"
implementation 'androidx.compose.material:material:1.1.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_ui_version"
debugImplementation "androidx.compose.ui:ui-tooling:$compose_ui_version"
debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_ui_version"
}
初期生成時では
android x の
- ktx
- lifecycle-runtime
- activity-compose
- compose.material
- test.ext
- test.espresso
- compose.ui
などが入っていて
compose.ui のみが
implementation "androidx.compose.ui:ui:$compose_ui_version"
ルートで定義された compose_ui のバージョンを受け取っている。
なので更新が必要ない。
他は更新しろと警告が出ている。
なので更新する。
全て Alt Enter でガイドに従って更新する。
Alt Enter で警告のハイライトをされている場所から推奨するバージョンに変更できる。なので変更する。
IntelliJ で Interface から実装を生やすのと同じ操作だ。
dependencies {
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
implementation 'androidx.activity:activity-compose:1.6.1'
implementation "androidx.compose.ui:ui:$compose_ui_version"
implementation "androidx.compose.ui:ui-tooling-preview:$compose_ui_version"
implementation 'androidx.compose.material:material:1.3.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
// ...
}
compose って名前がついているから全て 1.3.2 かと思ったが
1.3.1 から 1.6.1 までバラバラだった。
ビルド
ビルドすると、無事に通った。
Top comments (0)