From f62b2c83e4a3d0a31d1e216f6f969850c6e52a97 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Wed, 20 Aug 2025 17:11:39 +0200 Subject: [PATCH 1/2] 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. --- .github/workflows/gradle-plugin.yml | 4 +- gradle-plugins/compose/build.gradle.kts | 3 +- .../compose/resources/AndroidResources.kt | 60 ++++++++++++++----- .../test/tests/integration/ResourcesTest.kt | 10 +++- gradle-plugins/gradle.properties | 8 +-- gradle-plugins/gradle/libs.versions.toml | 4 +- 6 files changed, 63 insertions(+), 26 deletions(-) diff --git a/.github/workflows/gradle-plugin.yml b/.github/workflows/gradle-plugin.yml index 67b07d6d295..afecb86921b 100644 --- a/.github/workflows/gradle-plugin.yml +++ b/.github/workflows/gradle-plugin.yml @@ -17,8 +17,8 @@ jobs: fail-fast: false matrix: os: ['ubuntu-24.04', 'macos-14', 'windows-2022'] - gradle: ['8.7', '8.13'] - agp: ['8.6.0', '8.9.0'] + gradle: ['8.7', '9.0.0'] + agp: ['8.6.0', '8.9.0', '9.0.0-alpha01'] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 diff --git a/gradle-plugins/compose/build.gradle.kts b/gradle-plugins/compose/build.gradle.kts index 88ae9ef5fca..0ec582a5ccc 100644 --- a/gradle-plugins/compose/build.gradle.kts +++ b/gradle-plugins/compose/build.gradle.kts @@ -57,8 +57,7 @@ dependencies { compileOnly(gradleApi()) compileOnly(localGroovy()) - //the version supports XCFramework with resources https://youtrack.jetbrains.com/issue/KT-75823 - compileOnly(kotlin("gradle-plugin", "2.2.0-RC2")) + compileOnly(kotlin("gradle-plugin")) compileOnly(kotlin("native-utils")) compileOnly(libs.plugin.android) compileOnly(libs.plugin.android.api) diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/AndroidResources.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/AndroidResources.kt index aa3725c617e..943c51be9c2 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/AndroidResources.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/AndroidResources.kt @@ -20,6 +20,7 @@ import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.Optional import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction +import org.jetbrains.compose.internal.Version import org.jetbrains.compose.internal.utils.registerTask import org.jetbrains.compose.internal.utils.uppercaseFirstChar import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension @@ -90,30 +91,61 @@ private fun Project.getAndroidComponentComposeResources( } }) +private const val AGP_8_10 = "8.10" + @Suppress("UnstableApiUsage") private fun Project.configureAndroidComposeResources( kotlinExtension: KotlinMultiplatformExtension, androidComponents: KotlinMultiplatformAndroidComponentsExtension, moduleResourceDir: Provider? ) { - logger.info("Configure compose resources with KotlinMultiplatformAndroidComponentsExtension") - androidComponents.onVariant { variant -> - val variantAssets = getAndroidKmpComponentComposeResources(kotlinExtension, variant.name) - configureGeneratedAndroidComponentAssets( - variant.name, - variant.sources, - variantAssets, - moduleResourceDir - ) - variant.androidTest?.let { androidTest -> - val androidTestAssets = getAndroidKmpComponentComposeResources(kotlinExtension, androidTest.name) + // AGP 8.10 introduced new onVariantS {} API + // AGP 9.0.0-alpha01 removed onVariant {} API + // https://github.com/JetBrains/compose-multiplatform/pull/5385 + + val agpVersion = Version.fromString(androidComponents.pluginVersion.version) + if (agpVersion >= Version.fromString(AGP_8_10)) { + logger.info("Configure compose resources with KotlinMultiplatformAndroidComponentsExtension") + androidComponents.onVariants { variant -> + val variantAssets = getAndroidKmpComponentComposeResources(kotlinExtension, variant.name) + configureGeneratedAndroidComponentAssets( + variant.name, + variant.sources, + variantAssets, + moduleResourceDir + ) + + variant.androidTest?.let { androidTest -> + val androidTestAssets = getAndroidKmpComponentComposeResources(kotlinExtension, androidTest.name) + configureGeneratedAndroidComponentAssets( + androidTest.name, + androidTest.sources, + androidTestAssets, + moduleResourceDir + ) + } + } + } else { + logger.info("Configure compose resources with outdated KotlinMultiplatformAndroidComponentsExtension < 8.10") + androidComponents.onVariant { variant -> + val variantAssets = getAndroidKmpComponentComposeResources(kotlinExtension, variant.name) configureGeneratedAndroidComponentAssets( - androidTest.name, - androidTest.sources, - androidTestAssets, + variant.name, + variant.sources, + variantAssets, moduleResourceDir ) + + variant.androidTest?.let { androidTest -> + val androidTestAssets = getAndroidKmpComponentComposeResources(kotlinExtension, androidTest.name) + configureGeneratedAndroidComponentAssets( + androidTest.name, + androidTest.sources, + androidTestAssets, + moduleResourceDir + ) + } } } } diff --git a/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt b/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt index a37dcddf7f2..7f7e59d8e37 100644 --- a/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt +++ b/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt @@ -334,11 +334,17 @@ class ResourcesTest : GradlePluginTestBase() { @Test fun testNewAgpResources() { Assumptions.assumeTrue(defaultTestEnvironment.parsedGradleVersion >= GradleVersion.version("8.10.2")) - Assumptions.assumeTrue(Version.fromString(defaultTestEnvironment.agpVersion) >= Version.fromString("8.8.0-alpha08")) + + val agpVersion = Version.fromString(defaultTestEnvironment.agpVersion) + Assumptions.assumeTrue(agpVersion >= Version.fromString("8.8.0-alpha08")) with(testProject("misc/newAgpResources", defaultTestEnvironment)) { gradle(":appModule:assembleDebug").checks { - check.logContains("Configure compose resources with KotlinMultiplatformAndroidComponentsExtension") + if (agpVersion >= Version.fromString("8.10")) { + check.logContains("Configure compose resources with KotlinMultiplatformAndroidComponentsExtension") + } else { + check.logContains("Configure compose resources with outdated KotlinMultiplatformAndroidComponentsExtension < 8.10") + } val resourcesFiles = sequenceOf( "composeResources/newagpresources.appmodule.generated.resources/values/strings.commonMain.cvr", diff --git a/gradle-plugins/gradle.properties b/gradle-plugins/gradle.properties index 8d443b77921..ace5f246a6e 100644 --- a/gradle-plugins/gradle.properties +++ b/gradle-plugins/gradle.properties @@ -10,16 +10,16 @@ dev.junit.parallel=false # Default version of Compose Libraries used by Gradle plugin compose.version=1.9.0-alpha02 # The latest version of Kotlin compatible with compose.tests.compiler.version. Used only in tests/CI. -compose.tests.kotlin.version=2.2.0-Beta1 +compose.tests.kotlin.version=2.2.0 # __SUPPORTED_GRADLE_VERSIONS__ # Don't forget to edit versions in .github/workflows/gradle-plugin.yml as well # and Publish.Subtasks.buildTypes.gradle.GradlePluginTestKt#gradleVersions in the TC config # minimal and current gradle version -compose.tests.gradle.versions=8.7, 8.13 -compose.tests.agp.versions=8.6.0, 8.9.0 +compose.tests.gradle.versions=8.7, 9.0.0 +compose.tests.agp.versions=8.6.0, 8.9.0, 9.0.0-alpha01 # gradle and agp versions should be compatible: # https://developer.android.com/build/releases/gradle-plugin#updating-plugin -compose.tests.gradle-agp.exclude=8.7/8.9.0 +compose.tests.gradle-agp.exclude=8.7/8.9.0, 8.7/9.0.0-alpha01 # A version of Gradle plugin, that will be published, # unless overridden by COMPOSE_GRADLE_PLUGIN_VERSION env var. diff --git a/gradle-plugins/gradle/libs.versions.toml b/gradle-plugins/gradle/libs.versions.toml index af869279d19..c6c90111da1 100644 --- a/gradle-plugins/gradle/libs.versions.toml +++ b/gradle-plugins/gradle/libs.versions.toml @@ -1,8 +1,8 @@ [versions] -kotlin = "2.2.0-RC2" +kotlin = "2.2.0" gradle-download-plugin = "5.5.0" kotlin-poet = "2.1.0" -plugin-android = "8.9.1" +plugin-android = "8.10.1" shadow-jar = "8.1.1" publish-plugin = "1.2.1" From ce215cd6c834e1b7e4eff51f68d9d0362bd3ca22 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Thu, 21 Aug 2025 11:28:15 +0200 Subject: [PATCH 2/2] Bump Kotlin version in ResourcesTest 2.1.0 -> 2.1.21 for compatibility with Gradle 9.0 --- .../jetbrains/compose/test/tests/integration/ResourcesTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt b/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt index 7f7e59d8e37..c654649a23f 100644 --- a/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt +++ b/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt @@ -670,7 +670,7 @@ class ResourcesTest : GradlePluginTestBase() { with( testProject( "misc/appleResources", - defaultTestEnvironment.copy(kotlinVersion = "2.1.0")) + defaultTestEnvironment.copy(kotlinVersion = "2.1.21")) ) { file("build.gradle.kts").modify { content -> """