Jetpack Compose で Material3 を使うと、
This material API is experimental and is likely to change or to be removed in the future.
で、ビルド通らず。
AndroidStudio が提案してくる対応としては以下。
アノテーションを付けるのもアレですね。
gradle 側から一括無視しておきましょう。
kotlinOptions {
allWarningsAsErrors = false
freeCompilerArgs += [
"-Xopt-in=kotlin.RequiresOptIn",
"-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
"-Xopt-in=kotlinx.coroutines.FlowPreview",
"-Xopt-in=kotlinx.serialization.ExperimentalSerializationApi",
"-Xopt-in=kotlin.Experimental"
]
}
👉 Opt-in requirement marker annotation on override requires the same marker on base declaration
少し将来に向けて修正。
'-Xopt-in' → '-opt-in'
👉 '-Xopt-in' is deprecated and will be removed in a future release, please use -opt-in instead
よって、今回のビルドエラーについてのみで言えば、以下で避けるのが良さげです。
freeCompilerArgs += '-opt-in=androidx.compose.material3.ExperimentalMaterial3Api'
この記述をどこに書くか。
対象が複数になるのを考慮して
freeCompilerArgs += [
'-opt-in=androidx.compose.material3.ExperimentalMaterial3Api',
]
としておきます。
build.gradle (app) allprojects/subprojects {} 内
allprojects { // subproject {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions {
allWarningsAsErrors = false
freeCompilerArgs += [
'-opt-in=androidx.compose.material3.ExperimentalMaterial3Api',
]
}
}
}
build.gradle (module) android {} 内
android {
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
allWarningsAsErrors = false
freeCompilerArgs += [
'-opt-in=androidx.compose.material3.ExperimentalMaterial3Api',
]
}
build.gradle (module) の最後
dependencies {
// ...
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1'
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions {
allWarningsAsErrors = false
freeCompilerArgs += [
'-opt-in=androidx.compose.material3.ExperimentalMaterial3Api',
]
}
}
まとめ
プロジェクトの構成に合わせて、多少の拡張性を考慮しながら設定する必要があるでしょう。
👉 Opt-in requirements | Kotlin
👉 tachiyomi/build.gradle.kts at master · tachiyomiorg/tachiyomi