Browse Source

[gradle] Skip resource configuration for androidLibrary target since it is done via AGP (#5158)

pull/4979/merge v1.8.0-dev1905
Konstantin 3 weeks ago committed by GitHub
parent
commit
bf6b00e9a2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 28
      gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/resources/MultimoduleResources.kt
  2. 8
      gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/ResourcesTest.kt

28
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
)

8
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)
}
}
}

Loading…
Cancel
Save