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 02389dbc46b..fdc3022922c 100644 --- a/gradle-plugins/compose/build.gradle.kts +++ b/gradle-plugins/compose/build.gradle.kts @@ -58,8 +58,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..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 @@ -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", @@ -664,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 -> """ diff --git a/gradle-plugins/gradle.properties b/gradle-plugins/gradle.properties index 07f39cab7a6..e6f553f2b3d 100644 --- a/gradle-plugins/gradle.properties +++ b/gradle-plugins/gradle.properties @@ -11,16 +11,16 @@ dev.junit.parallel=false compose.version=1.9.0-rc01 compose.material3.version=1.9.0-beta03 # 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"