From bf6b00e9a22bb9885a44581418b289afcfa81b5b Mon Sep 17 00:00:00 2001 From: Konstantin Date: Sun, 3 Nov 2024 14:52:11 +0100 Subject: [PATCH] [gradle] Skip resource configuration for androidLibrary target since it is done via AGP (#5158) --- .../compose/resources/MultimoduleResources.kt | 28 ++++++++++++++++--- .../test/tests/integration/ResourcesTest.kt | 8 ++---- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/MultimoduleResources.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/MultimoduleResources.kt index 2581d6449b..b34fc9accc 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/MultimoduleResources.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/MultimoduleResources.kt @@ -1,5 +1,6 @@ package org.jetbrains.compose.resources +import com.android.build.api.dsl.KotlinMultiplatformAndroidTarget import org.gradle.api.Project import org.gradle.api.provider.Provider import org.gradle.api.tasks.SourceSet @@ -13,7 +14,9 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.extraProperties +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget import org.jetbrains.kotlin.gradle.plugin.mpp.resources.KotlinTargetResourcesPublication import java.io.File @@ -29,13 +32,11 @@ internal fun Project.configureMultimoduleResources( val moduleIsolationDirectory = config.getModuleResourcesDir(project) - val platformsForSkip = listOf( - KotlinPlatformType.common, KotlinPlatformType.androidJvm - ) kotlinExtension.targets - .matching { target -> target.platformType !in platformsForSkip } + .matching { target -> !target.skipResourcesConfiguration() } .all { target -> configureTargetResources(target, moduleIsolationDirectory) } + //configure ANDROID resources onAgpApplied { agpId -> configureAndroidComposeResources(agpId, moduleIsolationDirectory) @@ -92,6 +93,25 @@ private fun Project.configureTargetResources( } } +private fun KotlinTarget.skipResourcesConfiguration(): Boolean = when { + this is KotlinMetadataTarget -> true + + //android resources should be configured via AGP + this is KotlinAndroidTarget -> true + + //new AGP library target + this.isMultiplatformAndroidTarget() -> true + + else -> false +} + +@Suppress("UnstableApiUsage") +private fun KotlinTarget.isMultiplatformAndroidTarget(): Boolean = try { + this is KotlinMultiplatformAndroidTarget +} catch (e: NoClassDefFoundError) { + false +} + private val platformsForSetupKmpResources = listOf( KotlinPlatformType.native, KotlinPlatformType.js, KotlinPlatformType.wasm ) 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 2148cf55c4..3e0e271927 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 @@ -326,13 +326,11 @@ class ResourcesTest : GradlePluginTestBase() { check.logContains("Configure compose resources with KotlinMultiplatformAndroidComponentsExtension") val resourcesFiles = sequenceOf( - "assets/composeResources/newagpresources.appmodule.generated.resources/values/strings.commonMain.cvr", - "assets/composeResources/newagpresources.featuremodule.generated.resources/values/strings.commonMain.cvr" + "composeResources/newagpresources.appmodule.generated.resources/values/strings.commonMain.cvr", + "composeResources/newagpresources.featuremodule.generated.resources/values/strings.commonMain.cvr" ) val apk = file("appModule/build/outputs/apk/debug/appModule-debug.apk") - - //isAndroid = false, because the new AGP has an issue with duplicate resources for now - checkResourcesZip(apk, resourcesFiles, false) + checkResourcesZip(apk, resourcesFiles, true) } } }