Skip to content

Commit 110ea39

Browse files
authored
[Cherry-pick] Support AGP 9 and improve compatibility handling for AGP < 8.10 (#5473)
Support AGP 9.0.0-alpha01 and improve compatibility handling for AGP < 8.10 - 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 (cherry picked from commit f68b30d) ## Release Notes #5391
2 parents 7f87247 + 8e26374 commit 110ea39

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
@@ -58,8 +58,7 @@ dependencies {
5858

5959
compileOnly(gradleApi())
6060
compileOnly(localGroovy())
61-
//the version supports XCFramework with resources https://youtrack.jetbrains.com/issue/KT-75823
62-
compileOnly(kotlin("gradle-plugin", "2.2.0-RC2"))
61+
compileOnly(kotlin("gradle-plugin"))
6362
compileOnly(kotlin("native-utils"))
6463
compileOnly(libs.plugin.android)
6564
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",
@@ -664,7 +670,7 @@ class ResourcesTest : GradlePluginTestBase() {
664670
with(
665671
testProject(
666672
"misc/appleResources",
667-
defaultTestEnvironment.copy(kotlinVersion = "2.1.0"))
673+
defaultTestEnvironment.copy(kotlinVersion = "2.1.21"))
668674
) {
669675
file("build.gradle.kts").modify { content ->
670676
"""

gradle-plugins/gradle.properties

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@ dev.junit.parallel=false
1111
compose.version=1.9.0-rc01
1212
compose.material3.version=1.9.0-beta03
1313
# The latest version of Kotlin compatible with compose.tests.compiler.version. Used only in tests/CI.
14-
compose.tests.kotlin.version=2.2.0-Beta1
14+
compose.tests.kotlin.version=2.2.0
1515
# __SUPPORTED_GRADLE_VERSIONS__
1616
# Don't forget to edit versions in .github/workflows/gradle-plugin.yml as well
1717
# and Publish.Subtasks.buildTypes.gradle.GradlePluginTestKt#gradleVersions in the TC config
1818
# minimal and current gradle version
19-
compose.tests.gradle.versions=8.7, 8.13
20-
compose.tests.agp.versions=8.6.0, 8.9.0
19+
compose.tests.gradle.versions=8.7, 9.0.0
20+
compose.tests.agp.versions=8.6.0, 8.9.0, 9.0.0-alpha01
2121
# gradle and agp versions should be compatible:
2222
# https://developer.android.com/build/releases/gradle-plugin#updating-plugin
23-
compose.tests.gradle-agp.exclude=8.7/8.9.0
23+
compose.tests.gradle-agp.exclude=8.7/8.9.0, 8.7/9.0.0-alpha01
2424

2525
# A version of Gradle plugin, that will be published,
2626
# 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)