Skip to content

Commit f68b30d

Browse files
authored
Support AGP 9.0.0-alpha01 and improve compatibility handling for AGP < 8.10 (#5391)
- Updated Gradle to support version 9.0.0. - Improved Compose resource configuration to handle AGP versions below 8.10 with a fallback implementation. - Bumped Kotlin to 2.2.0 release and updated related dependencies. - Adjusted tests to reflect changes in AGP-specific behavior and logging. Fixes https://youtrack.jetbrains.com/issue/CMP-8771 ## Release Notes ### Fixes - Gradle Plugin - Support `AGP 9.0.0`
1 parent ef3ba2e commit f68b30d

File tree

6 files changed

+64
-27
lines changed

6 files changed

+64
-27
lines changed

.github/workflows/gradle-plugin.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ jobs:
1717
fail-fast: false
1818
matrix:
1919
os: ['ubuntu-24.04', 'macos-14', 'windows-2022']
20-
gradle: ['8.7', '8.13']
21-
agp: ['8.6.0', '8.9.0']
20+
gradle: ['8.7', '9.0.0']
21+
agp: ['8.6.0', '8.9.0', '9.0.0-alpha01']
2222
runs-on: ${{ matrix.os }}
2323
steps:
2424
- uses: actions/checkout@v4

gradle-plugins/compose/build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ dependencies {
5757

5858
compileOnly(gradleApi())
5959
compileOnly(localGroovy())
60-
//the version supports XCFramework with resources https://youtrack.jetbrains.com/issue/KT-75823
61-
compileOnly(kotlin("gradle-plugin", "2.2.0-RC2"))
60+
compileOnly(kotlin("gradle-plugin"))
6261
compileOnly(kotlin("native-utils"))
6362
compileOnly(libs.plugin.android)
6463
compileOnly(libs.plugin.android.api)

gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/AndroidResources.kt

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import org.gradle.api.tasks.InputFiles
2020
import org.gradle.api.tasks.Optional
2121
import org.gradle.api.tasks.OutputDirectory
2222
import org.gradle.api.tasks.TaskAction
23+
import org.jetbrains.compose.internal.Version
2324
import org.jetbrains.compose.internal.utils.registerTask
2425
import org.jetbrains.compose.internal.utils.uppercaseFirstChar
2526
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
@@ -90,30 +91,61 @@ private fun Project.getAndroidComponentComposeResources(
9091
}
9192
})
9293

94+
private const val AGP_8_10 = "8.10"
95+
9396
@Suppress("UnstableApiUsage")
9497
private fun Project.configureAndroidComposeResources(
9598
kotlinExtension: KotlinMultiplatformExtension,
9699
androidComponents: KotlinMultiplatformAndroidComponentsExtension,
97100
moduleResourceDir: Provider<File>?
98101
) {
99-
logger.info("Configure compose resources with KotlinMultiplatformAndroidComponentsExtension")
100-
androidComponents.onVariant { variant ->
101-
val variantAssets = getAndroidKmpComponentComposeResources(kotlinExtension, variant.name)
102-
configureGeneratedAndroidComponentAssets(
103-
variant.name,
104-
variant.sources,
105-
variantAssets,
106-
moduleResourceDir
107-
)
108102

109-
variant.androidTest?.let { androidTest ->
110-
val androidTestAssets = getAndroidKmpComponentComposeResources(kotlinExtension, androidTest.name)
103+
// AGP 8.10 introduced new onVariantS {} API
104+
// AGP 9.0.0-alpha01 removed onVariant {} API
105+
// https://github.com/JetBrains/compose-multiplatform/pull/5385
106+
107+
val agpVersion = Version.fromString(androidComponents.pluginVersion.version)
108+
if (agpVersion >= Version.fromString(AGP_8_10)) {
109+
logger.info("Configure compose resources with KotlinMultiplatformAndroidComponentsExtension")
110+
androidComponents.onVariants { variant ->
111+
val variantAssets = getAndroidKmpComponentComposeResources(kotlinExtension, variant.name)
112+
configureGeneratedAndroidComponentAssets(
113+
variant.name,
114+
variant.sources,
115+
variantAssets,
116+
moduleResourceDir
117+
)
118+
119+
variant.androidTest?.let { androidTest ->
120+
val androidTestAssets = getAndroidKmpComponentComposeResources(kotlinExtension, androidTest.name)
121+
configureGeneratedAndroidComponentAssets(
122+
androidTest.name,
123+
androidTest.sources,
124+
androidTestAssets,
125+
moduleResourceDir
126+
)
127+
}
128+
}
129+
} else {
130+
logger.info("Configure compose resources with outdated KotlinMultiplatformAndroidComponentsExtension < 8.10")
131+
androidComponents.onVariant { variant ->
132+
val variantAssets = getAndroidKmpComponentComposeResources(kotlinExtension, variant.name)
111133
configureGeneratedAndroidComponentAssets(
112-
androidTest.name,
113-
androidTest.sources,
114-
androidTestAssets,
134+
variant.name,
135+
variant.sources,
136+
variantAssets,
115137
moduleResourceDir
116138
)
139+
140+
variant.androidTest?.let { androidTest ->
141+
val androidTestAssets = getAndroidKmpComponentComposeResources(kotlinExtension, androidTest.name)
142+
configureGeneratedAndroidComponentAssets(
143+
androidTest.name,
144+
androidTest.sources,
145+
androidTestAssets,
146+
moduleResourceDir
147+
)
148+
}
117149
}
118150
}
119151
}

gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -334,11 +334,17 @@ class ResourcesTest : GradlePluginTestBase() {
334334
@Test
335335
fun testNewAgpResources() {
336336
Assumptions.assumeTrue(defaultTestEnvironment.parsedGradleVersion >= GradleVersion.version("8.10.2"))
337-
Assumptions.assumeTrue(Version.fromString(defaultTestEnvironment.agpVersion) >= Version.fromString("8.8.0-alpha08"))
337+
338+
val agpVersion = Version.fromString(defaultTestEnvironment.agpVersion)
339+
Assumptions.assumeTrue(agpVersion >= Version.fromString("8.8.0-alpha08"))
338340

339341
with(testProject("misc/newAgpResources", defaultTestEnvironment)) {
340342
gradle(":appModule:assembleDebug").checks {
341-
check.logContains("Configure compose resources with KotlinMultiplatformAndroidComponentsExtension")
343+
if (agpVersion >= Version.fromString("8.10")) {
344+
check.logContains("Configure compose resources with KotlinMultiplatformAndroidComponentsExtension")
345+
} else {
346+
check.logContains("Configure compose resources with outdated KotlinMultiplatformAndroidComponentsExtension < 8.10")
347+
}
342348

343349
val resourcesFiles = sequenceOf(
344350
"composeResources/newagpresources.appmodule.generated.resources/values/strings.commonMain.cvr",
@@ -684,7 +690,7 @@ class ResourcesTest : GradlePluginTestBase() {
684690
with(
685691
testProject(
686692
"misc/appleResources",
687-
defaultTestEnvironment.copy(kotlinVersion = "2.1.0"))
693+
defaultTestEnvironment.copy(kotlinVersion = "2.1.21"))
688694
) {
689695
file("build.gradle.kts").modify { content ->
690696
"""

gradle-plugins/gradle.properties

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@ dev.junit.parallel=false
1010
# Default version of Compose Libraries used by Gradle plugin
1111
compose.version=1.9.0-alpha02
1212
# The latest version of Kotlin compatible with compose.tests.compiler.version. Used only in tests/CI.
13-
compose.tests.kotlin.version=2.2.0-Beta1
13+
compose.tests.kotlin.version=2.2.0
1414
# __SUPPORTED_GRADLE_VERSIONS__
1515
# Don't forget to edit versions in .github/workflows/gradle-plugin.yml as well
1616
# and Publish.Subtasks.buildTypes.gradle.GradlePluginTestKt#gradleVersions in the TC config
1717
# minimal and current gradle version
18-
compose.tests.gradle.versions=8.7, 8.13
19-
compose.tests.agp.versions=8.6.0, 8.9.0
18+
compose.tests.gradle.versions=8.7, 9.0.0
19+
compose.tests.agp.versions=8.6.0, 8.9.0, 9.0.0-alpha01
2020
# gradle and agp versions should be compatible:
2121
# https://developer.android.com/build/releases/gradle-plugin#updating-plugin
22-
compose.tests.gradle-agp.exclude=8.7/8.9.0
22+
compose.tests.gradle-agp.exclude=8.7/8.9.0, 8.7/9.0.0-alpha01
2323

2424
# A version of Gradle plugin, that will be published,
2525
# unless overridden by COMPOSE_GRADLE_PLUGIN_VERSION env var.

gradle-plugins/gradle/libs.versions.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
[versions]
2-
kotlin = "2.2.0-RC2"
2+
kotlin = "2.2.0"
33
gradle-download-plugin = "5.5.0"
44
kotlin-poet = "2.1.0"
5-
plugin-android = "8.9.1"
5+
plugin-android = "8.10.1"
66
shadow-jar = "8.1.1"
77
publish-plugin = "1.2.1"
88

0 commit comments

Comments
 (0)