chore(android): bump Kotlin 2.2 -> 2.3 + KSP 2.0 -> 2.3 for AGP 9 built-in Kotlin
The previous attempt opted out of AGP 9's built-in Kotlin (via
android.builtInKotlin=false + explicit kotlin-android plugin) because
the message from Gradle suggested it. But Kotlin 2.2.21's
kotlin-android plugin can't cast AGP 9's new ApplicationExtension to
the removed BaseExtension:
class ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension
That suggestion is for projects with an older Kotlin toolchain. The
real fix:
- Kotlin 2.3.21 (latest stable; first line where kotlin-android also
supports AGP 9, but more importantly the built-in path works)
- KSP 2.3.8 — KSP PR #2674 (merged Oct 2025) added AGP 9 built-in
Kotlin support. KSP 1.x and pre-2.3 don't work with built-in Kotlin.
- Re-drop the kotlin-android plugin from both build.gradle.kts files;
AGP 9 enables built-in Kotlin by default and KSP 2.3 cooperates.
- Remove android.builtInKotlin=false from gradle.properties.
compose-compiler plugin tracks the Kotlin version via version.ref, so
no separate bump there.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.android.application)
|
alias(libs.plugins.android.application)
|
||||||
// kotlin-android applied explicitly: AGP 9's built-in Kotlin path is
|
// kotlin-android NOT applied: AGP 9 enables built-in Kotlin by default,
|
||||||
// not compatible with KSP yet. Opted out via
|
// and KSP 2.3.x supports it (PR #2674, merged Oct 2025). serialization
|
||||||
// android.builtInKotlin=false in gradle.properties.
|
// + compose-compiler are language-level Kotlin compiler plugins and
|
||||||
alias(libs.plugins.kotlin.android)
|
// still need explicit application.
|
||||||
alias(libs.plugins.kotlin.serialization)
|
alias(libs.plugins.kotlin.serialization)
|
||||||
alias(libs.plugins.compose.compiler)
|
alias(libs.plugins.compose.compiler)
|
||||||
alias(libs.plugins.ksp)
|
alias(libs.plugins.ksp)
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.android.application) apply false
|
alias(libs.plugins.android.application) apply false
|
||||||
// kotlin-android needed despite AGP 9's built-in Kotlin: KSP isn't
|
// kotlin-android NOT registered: AGP 9 built-in Kotlin + KSP 2.3.x
|
||||||
// compatible with the builtInKotlin path yet, so we opt out via
|
// covers the Kotlin compilation path. Language-level Kotlin compiler
|
||||||
// android.builtInKotlin=false in gradle.properties.
|
// plugins (serialization, compose-compiler) are still applied
|
||||||
alias(libs.plugins.kotlin.android) apply false
|
// explicitly per module.
|
||||||
alias(libs.plugins.kotlin.serialization) apply false
|
alias(libs.plugins.kotlin.serialization) apply false
|
||||||
alias(libs.plugins.ksp) apply false
|
alias(libs.plugins.ksp) apply false
|
||||||
alias(libs.plugins.hilt) apply false
|
alias(libs.plugins.hilt) apply false
|
||||||
|
|||||||
@@ -4,10 +4,4 @@ org.gradle.caching=true
|
|||||||
org.gradle.configuration-cache=true
|
org.gradle.configuration-cache=true
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.nonTransitiveRClass=true
|
android.nonTransitiveRClass=true
|
||||||
|
|
||||||
# KSP isn't compatible with AGP 9's built-in Kotlin support (the
|
|
||||||
# `android.builtInKotlin=true` default). Opt out so we can apply the
|
|
||||||
# explicit kotlin-android plugin and KSP together. Revisit when KSP
|
|
||||||
# adds built-in-Kotlin support.
|
|
||||||
android.builtInKotlin=false
|
|
||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
[versions]
|
[versions]
|
||||||
# Pinned for JDK 25 compat: Gradle 9.1.0 supports JDK 25, AGP 9.0.1
|
# Pinned for JDK 25 + AGP 9 + KSP-built-in-Kotlin compat:
|
||||||
# requires Gradle 9.1.0+, AGP 9.0 requires Kotlin Gradle Plugin 2.2.10+,
|
# - Gradle 9.1.0 supports JDK 25 (see gradle-wrapper.properties)
|
||||||
# KSP follows Kotlin version. See gradle-wrapper.properties for the
|
# - AGP 9.0.1 requires Gradle 9.1.0+
|
||||||
# Gradle version itself.
|
# - Kotlin 2.3.x: AGP 9's built-in Kotlin path; the older kotlin-android
|
||||||
|
# plugin can't cast AGP 9's ApplicationExtension to the removed
|
||||||
|
# BaseExtension, and KSP 1.x isn't compatible with built-in Kotlin
|
||||||
|
# - KSP 2.3.x (PR #2674, merged Oct 2025): adds AGP 9 built-in Kotlin
|
||||||
|
# support, so we don't need the kotlin-android plugin at all
|
||||||
agp = "9.0.1"
|
agp = "9.0.1"
|
||||||
kotlin = "2.2.21"
|
kotlin = "2.3.21"
|
||||||
ksp = "2.2.21-2.0.5"
|
ksp = "2.3.8"
|
||||||
hilt = "2.59.2"
|
hilt = "2.59.2"
|
||||||
hilt-androidx = "1.2.0"
|
hilt-androidx = "1.2.0"
|
||||||
compose-bom = "2026.05.01"
|
compose-bom = "2026.05.01"
|
||||||
|
|||||||
Reference in New Issue
Block a user