AGP 9.0からKotlinプラグインがbuilt-inとなり、明示的に別途適用する必要がなくなった。
https://developer.android.com/build/releases/agp-release-notes/agp-9-0-0
これによりKotlinのバージョンを管理する必要がなくなったかのように思えたが、kotlin-testやkotlin-serializationなど、Kotlin周辺ライブラリのバージョンはKotlinのバージョンと揃えておきたい。
これまでは、libs.version.toml で一括管理できていたのに、built-inのバージョンを調べないといけないとなると面倒だった。./gradlew buildEnvironment で確認するとAGP9.0では2.2.10がバンドルされていることが分かるが、これを毎回調べるのも面倒。
結論
kotlinlangのSlackチャンネルで雑に質問したところ、JetBrainsのMárton Braun氏が教えてくれた。
結論としては、https://developer.android.com/build/releases/agp-9-0-0-release-notes#runtime-dependency-on-kotlin-gradle-plugin に記載のように、上位のKotlinバージョンで上書きする設定を書いておけば良いとのこと。
[versions]
kotlin = "2.3.10"
[libraries]
kotlin-gradle-plugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }buildscript {
dependencies {
classpath(libs.kotlin.gradle.plugin)
}
}./gradlew buildEnvironmentで確認すると、built-inのバージョンが上書きされていることがわかる。
org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.10 -> 2.3.10このドキュメントを特殊ケースだと思って軽く流していたのだが、このアプローチはAndroid Studio Otterの新規プロジェクトを作成した場合にも設定される構成であるとのこと。
質問した日に彼の動画も公開された。
その他のアプローチ
質問する前に思いついたが、微妙だなと思ってボツになったアプローチ。
built-inのオプトアウト
built-in Kotlinを無効にするandroid.builtInKotlin=falseというオプションがあるが、これを利用するにはorg.jetbrains.kotlin.androidプラグインを自分で適用する必要がある。しかしorg.jetbrains.kotlin.androidはAGP 9.0で非推奨となっており、さらに新しいDSLへの移行をオプトアウトするandroid.newDsl=falseの設定も必要になる。
このオプトアウト設定はAGP 10.0(2026年半ば)で削除される予定のため、長期的な解決策にはならない。
built-inのバージョンに合わせる
built-inのバージョンを愚直に調べてそれに合わせる。 基本的にrenovateを利用しているのでmatchPackageNamesでAGPとセットでアップデートするようにすればいいかと思っていたが、結局アップデートされたバージョンが正しいかは自分で確認が必要となる。