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 943c51be9c2..51aa73cddc9 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
@@ -189,7 +189,7 @@ private fun Project.configureGeneratedAndroidComponentAssets(
)
tasks.configureEach { task ->
//fix agp task dependencies for AndroidStudio preview
- if (task.name == "compile${camelComponentName}Sources") {
+ if (task.name == "package${camelComponentName}Resources") {
task.dependsOn(copyComponentAssets)
}
//fix linter task dependencies for `build` task
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 49d582e2415..f85e1dfa2a2 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
@@ -1,6 +1,8 @@
package org.jetbrains.compose.test.tests.integration
+import org.gradle.util.GradleVersion
import org.jetbrains.compose.desktop.application.internal.ComposeProperties
+import org.jetbrains.compose.internal.Version
import org.jetbrains.compose.internal.utils.Arch
import org.jetbrains.compose.internal.utils.OS
import org.jetbrains.compose.internal.utils.currentArch
@@ -342,6 +344,28 @@ class ResourcesTest : GradlePluginTestBase() {
}
}
+ @Test
+ fun testAndroidPreviewCallsResourcesPackaging() {
+ // Valid for AGP < 9.0.0 only
+ // https://youtrack.jetbrains.com/issue/CMP-7170
+ Assumptions.assumeTrue { Version.fromString(defaultTestEnvironment.agpVersion).major < 9 }
+ with(testProject("misc/oldAndroidTargetAppWithResources", defaultTestEnvironment)) {
+ //AndroidStudio previews call `compileDebugSources` task
+ gradle(":appModule:compileDebugSources").checks {
+ check.taskSuccessful(":appModule:packageDebugResources")
+ check.taskSuccessful(":featureModule:packageDebugResources")
+ check.taskSuccessful(":featureModule:copyDebugComposeResourcesToAndroidAssets")
+
+ val resourceFile = "composeResources/oldagpresources.featuremodule.generated.resources/values/strings.commonMain.cvr"
+ assertTrue {
+ file(
+ "featureModule/build/generated/assets/copyDebugComposeResourcesToAndroidAssets/$resourceFile"
+ ).exists()
+ }
+ }
+ }
+ }
+
@Test
fun testDisableMultimoduleResources() {
with(testProject("misc/commonResources")) {
diff --git a/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/appModule/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/appModule/build.gradle.kts
new file mode 100644
index 00000000000..332da088ad7
--- /dev/null
+++ b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/appModule/build.gradle.kts
@@ -0,0 +1,21 @@
+plugins {
+ id("org.jetbrains.compose")
+ kotlin("plugin.compose")
+ id("com.android.application")
+}
+
+android {
+ namespace = "me.sample.app"
+ compileSdk = 35
+ defaultConfig {
+ applicationId = "org.example.project"
+ minSdk = 23
+ targetSdk = 35
+ versionCode = 1
+ versionName = "1.0"
+ }
+}
+
+dependencies {
+ implementation(project(":featureModule"))
+}
diff --git a/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/appModule/src/main/AndroidManifest.xml b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/appModule/src/main/AndroidManifest.xml
new file mode 100644
index 00000000000..96aa10f056b
--- /dev/null
+++ b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/appModule/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/appModule/src/main/kotlin/me/sample/app/App.kt b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/appModule/src/main/kotlin/me/sample/app/App.kt
new file mode 100644
index 00000000000..6575ec88cfb
--- /dev/null
+++ b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/appModule/src/main/kotlin/me/sample/app/App.kt
@@ -0,0 +1,17 @@
+package me.sample.app
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import oldagpresources.featuremodule.generated.resources.*
+import org.jetbrains.compose.resources.stringResource
+
+@Composable
+fun App() {
+ Column {
+ val txt = "text: "
+ Text(txt + stringResource(Res.string.str_1))
+ MyFeatureText(txt = txt)
+ }
+}
\ No newline at end of file
diff --git a/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/build.gradle.kts
new file mode 100644
index 00000000000..7dddc27d0a5
--- /dev/null
+++ b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/build.gradle.kts
@@ -0,0 +1,7 @@
+plugins {
+ id("org.jetbrains.compose").apply(false)
+ kotlin("multiplatform").apply(false)
+ kotlin("plugin.compose").apply(false)
+ id("com.android.library").apply(false)
+ id("com.android.application").apply(false)
+}
diff --git a/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/featureModule/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/featureModule/build.gradle.kts
new file mode 100644
index 00000000000..bec94029ada
--- /dev/null
+++ b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/featureModule/build.gradle.kts
@@ -0,0 +1,28 @@
+plugins {
+ id("org.jetbrains.compose")
+ kotlin("multiplatform")
+ kotlin("plugin.compose")
+ id("com.android.library")
+}
+
+kotlin {
+ jvm()
+
+ androidTarget()
+
+ sourceSets {
+ commonMain.dependencies {
+ api(compose.runtime)
+ api(compose.material3)
+ api(compose.components.resources)
+ }
+ }
+}
+android {
+ namespace = "me.sample.feature"
+ compileSdk = 35
+}
+
+compose.resources {
+ publicResClass = true
+}
\ No newline at end of file
diff --git a/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/featureModule/src/commonMain/composeResources/values/strings.xml b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/featureModule/src/commonMain/composeResources/values/strings.xml
new file mode 100644
index 00000000000..a0a53302299
--- /dev/null
+++ b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/featureModule/src/commonMain/composeResources/values/strings.xml
@@ -0,0 +1,3 @@
+
+ Feature text str_1
+
\ No newline at end of file
diff --git a/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/featureModule/src/commonMain/kotlin/me/sample/app/Feature.kt b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/featureModule/src/commonMain/kotlin/me/sample/app/Feature.kt
new file mode 100644
index 00000000000..4e9b7f0196c
--- /dev/null
+++ b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/featureModule/src/commonMain/kotlin/me/sample/app/Feature.kt
@@ -0,0 +1,12 @@
+package me.sample.app
+
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import org.jetbrains.compose.resources.stringResource
+import oldagpresources.featuremodule.generated.resources.*
+
+@Composable
+fun MyFeatureText(modifier: Modifier = Modifier, txt: String) {
+ Text(txt + stringResource(Res.string.str_1), modifier)
+}
\ No newline at end of file
diff --git a/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/gradle.properties b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/gradle.properties
new file mode 100644
index 00000000000..dbaa0a8ca87
--- /dev/null
+++ b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/gradle.properties
@@ -0,0 +1,3 @@
+org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx2048M"
+kotlin.code.style=official
+android.useAndroidX=true
diff --git a/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/settings.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/settings.gradle.kts
new file mode 100644
index 00000000000..d6f7bc85a3b
--- /dev/null
+++ b/gradle-plugins/compose/src/test/test-projects/misc/oldAndroidTargetAppWithResources/settings.gradle.kts
@@ -0,0 +1,29 @@
+rootProject.name = "oldAgpResources"
+include(":featureModule")
+include(":appModule")
+pluginManagement {
+ repositories {
+ mavenLocal()
+ gradlePluginPortal()
+ mavenCentral()
+ google()
+ maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
+ maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev/")
+ }
+ plugins {
+ id("org.jetbrains.kotlin.multiplatform").version("KOTLIN_VERSION_PLACEHOLDER")
+ id("org.jetbrains.kotlin.plugin.compose").version("KOTLIN_VERSION_PLACEHOLDER")
+ id("org.jetbrains.compose").version("COMPOSE_GRADLE_PLUGIN_VERSION_PLACEHOLDER")
+ id("com.android.library").version("AGP_VERSION_PLACEHOLDER")
+ id("com.android.application").version("AGP_VERSION_PLACEHOLDER")
+ }
+}
+dependencyResolutionManagement {
+ repositories {
+ mavenCentral()
+ google()
+ maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
+ maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev/")
+ mavenLocal()
+ }
+}
\ No newline at end of file