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