From 25b4240f71b89db6a950ef3c46ab96a4ccd66a63 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Tue, 28 Oct 2025 16:42:58 +0100 Subject: [PATCH 01/14] Update Gradle and AGP test versions; adjust exclusions accordingly --- gradle-plugins/gradle.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle-plugins/gradle.properties b/gradle-plugins/gradle.properties index 2509f0e791..511f88e632 100644 --- a/gradle-plugins/gradle.properties +++ b/gradle-plugins/gradle.properties @@ -16,11 +16,11 @@ compose.tests.kotlin.version=2.2.20 # 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, 9.0.0 -compose.tests.agp.versions=8.6.0, 8.9.0, 9.0.0-alpha01 +compose.tests.gradle.versions=8.13, 9.1.0 +compose.tests.agp.versions=8.11.2, 8.12.3, 9.0.0-alpha11 # 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, 8.7/9.0.0-alpha01 +compose.tests.gradle-agp.exclude=8.13/9.0.0-alpha11 # A version of Gradle plugin, that will be published, # unless overridden by COMPOSE_GRADLE_PLUGIN_VERSION env var. From fe5ce5b3970bdc4c0485f63496bdf06dea8fe38e Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Tue, 28 Oct 2025 16:43:45 +0100 Subject: [PATCH 02/14] Replace `com.android.application` with `com.android.kotlin.multiplatform.library` in CHR test projects; migrate from `android` to `androidLibrary` configuration. --- .../application/hotReload/build.gradle | 20 ++++++------------- .../application/hotReload/settings.gradle | 2 +- .../application/mpp/build.gradle | 18 ++++++----------- .../application/mpp/settings.gradle | 2 +- .../application/nonJvm/build.gradle | 18 ++++++----------- .../application/nonJvm/settings.gradle | 2 +- 6 files changed, 21 insertions(+), 41 deletions(-) diff --git a/gradle-plugins/compose/src/test/test-projects/application/hotReload/build.gradle b/gradle-plugins/compose/src/test/test-projects/application/hotReload/build.gradle index 9b47a19f51..5d7e072800 100644 --- a/gradle-plugins/compose/src/test/test-projects/application/hotReload/build.gradle +++ b/gradle-plugins/compose/src/test/test-projects/application/hotReload/build.gradle @@ -1,7 +1,5 @@ -import org.jetbrains.compose.desktop.application.dsl.TargetFormat - plugins { - id "com.android.application" + id "com.android.kotlin.multiplatform.library" id "org.jetbrains.kotlin.multiplatform" id "org.jetbrains.kotlin.plugin.compose" id "org.jetbrains.compose" @@ -10,7 +8,11 @@ plugins { kotlin { // empty stub (no actual android app) to detect configuration conflicts // like https://github.com/JetBrains/compose-jb/issues/2345 - androidTarget() + androidLibrary { + namespace = "org.jetbrains.compose.testapp" + compileSdk = 35 + minSdk = 23 + } jvm() sourceSets { @@ -22,16 +24,6 @@ kotlin { } } -android { - namespace = "org.jetbrains.compose.testapp" - compileSdk = 35 - - defaultConfig { - minSdk = 23 - targetSdk = 35 - } -} - compose.desktop { application { mainClass = "MainKt" diff --git a/gradle-plugins/compose/src/test/test-projects/application/hotReload/settings.gradle b/gradle-plugins/compose/src/test/test-projects/application/hotReload/settings.gradle index 4c21890772..2a425184a9 100644 --- a/gradle-plugins/compose/src/test/test-projects/application/hotReload/settings.gradle +++ b/gradle-plugins/compose/src/test/test-projects/application/hotReload/settings.gradle @@ -3,7 +3,7 @@ pluginManagement { 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.application' version 'AGP_VERSION_PLACEHOLDER' + id 'com.android.kotlin.multiplatform.library' version 'AGP_VERSION_PLACEHOLDER' } repositories { mavenLocal() diff --git a/gradle-plugins/compose/src/test/test-projects/application/mpp/build.gradle b/gradle-plugins/compose/src/test/test-projects/application/mpp/build.gradle index 5a5fe777e7..b9c7b2bf3d 100644 --- a/gradle-plugins/compose/src/test/test-projects/application/mpp/build.gradle +++ b/gradle-plugins/compose/src/test/test-projects/application/mpp/build.gradle @@ -1,7 +1,7 @@ import org.jetbrains.compose.desktop.application.dsl.TargetFormat plugins { - id "com.android.application" + id "com.android.kotlin.multiplatform.library" id "org.jetbrains.kotlin.multiplatform" id "org.jetbrains.kotlin.plugin.compose" id "org.jetbrains.compose" @@ -10,7 +10,11 @@ plugins { kotlin { // empty stub (no actual android app) to detect configuration conflicts // like https://github.com/JetBrains/compose-jb/issues/2345 - androidTarget() + androidLibrary { + namespace = "org.jetbrains.compose.testapp" + compileSdk = 35 + minSdk = 23 + } jvm() sourceSets { @@ -27,16 +31,6 @@ kotlin { } } -android { - namespace = "org.jetbrains.compose.testapp" - compileSdk = 35 - - defaultConfig { - minSdk = 23 - targetSdk = 35 - } -} - compose.desktop { application { mainClass = "MainKt" diff --git a/gradle-plugins/compose/src/test/test-projects/application/mpp/settings.gradle b/gradle-plugins/compose/src/test/test-projects/application/mpp/settings.gradle index f56d133772..c7b81d07ff 100644 --- a/gradle-plugins/compose/src/test/test-projects/application/mpp/settings.gradle +++ b/gradle-plugins/compose/src/test/test-projects/application/mpp/settings.gradle @@ -3,7 +3,7 @@ pluginManagement { 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.application' version 'AGP_VERSION_PLACEHOLDER' + id 'com.android.kotlin.multiplatform.library' version 'AGP_VERSION_PLACEHOLDER' } repositories { mavenLocal() diff --git a/gradle-plugins/compose/src/test/test-projects/application/nonJvm/build.gradle b/gradle-plugins/compose/src/test/test-projects/application/nonJvm/build.gradle index f708194b12..53c28ad913 100644 --- a/gradle-plugins/compose/src/test/test-projects/application/nonJvm/build.gradle +++ b/gradle-plugins/compose/src/test/test-projects/application/nonJvm/build.gradle @@ -1,23 +1,17 @@ plugins { - id "com.android.application" + id "com.android.kotlin.multiplatform.library" id "org.jetbrains.kotlin.multiplatform" id "org.jetbrains.kotlin.plugin.compose" id "org.jetbrains.compose" } kotlin { - androidTarget() + androidLibrary { + namespace = "org.jetbrains.compose.testapp" + compileSdk = 35 + minSdk = 23 + } iosX64() iosArm64() iosSimulatorArm64() } - -android { - namespace = "org.jetbrains.compose.testapp" - compileSdk = 35 - - defaultConfig { - minSdk = 23 - targetSdk = 35 - } -} diff --git a/gradle-plugins/compose/src/test/test-projects/application/nonJvm/settings.gradle b/gradle-plugins/compose/src/test/test-projects/application/nonJvm/settings.gradle index 3b6258c789..a80014739b 100644 --- a/gradle-plugins/compose/src/test/test-projects/application/nonJvm/settings.gradle +++ b/gradle-plugins/compose/src/test/test-projects/application/nonJvm/settings.gradle @@ -3,7 +3,7 @@ pluginManagement { 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.application' version 'AGP_VERSION_PLACEHOLDER' + id 'com.android.kotlin.multiplatform.library' version 'AGP_VERSION_PLACEHOLDER' } repositories { mavenLocal() From 57718500c28f9e35a301f24d989021d66e36bcf8 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Wed, 29 Oct 2025 17:29:22 +0100 Subject: [PATCH 03/14] Adjust test cases for new configurations. --- .../test/tests/integration/ResourcesTest.kt | 179 ++++++++---------- .../appModule/build.gradle.kts | 21 ++ .../appModule/src/main}/AndroidManifest.xml | 0 .../src/main}/kotlin/me/sample/app/App.kt | 2 +- .../build.gradle.kts | 0 .../featureModule/build.gradle.kts | 14 +- .../composeResources/values/strings.xml | 0 .../kotlin/me/sample/app/Feature.kt | 0 .../gradle.properties | 0 .../settings.gradle.kts | 0 .../misc/commonResources/build.gradle.kts | 52 +---- .../misc/commonResources/settings.gradle.kts | 2 +- .../androidApp/build.gradle.kts | 48 +++++ .../androidApp}/key/debug.keystore | Bin .../androidApp/src/main}/AndroidManifest.xml | 2 +- .../kotlin/org/company/app/AppActivity.kt | 13 ++ .../build.gradle.kts | 9 + .../desktopApp/build.gradle.kts | 15 ++ .../desktopApp/src/main/kotlin/main.kt | 11 ++ .../gradle.properties | 18 ++ .../settings.gradle.kts | 34 ++++ .../sharedUI/build.gradle.kts | 54 ++++++ .../composeResources/files/platform.txt | 1 + .../composeResources/values/strings.xml | 3 + .../commonMain/kotlin/org/company/app/App.kt | 12 ++ .../composeResources/files/platform.txt | 1 + .../sharedUI/src/iosMain/kotlin/main.kt | 7 + .../composeResources/files/platform.txt | 1 + .../composeResources/files/platform.txt | 1 + .../composeResources/files/platform.txt | 1 + .../webApp/build.gradle.kts | 23 +++ .../webApp/src/commonMain/kotlin/main.kt | 1 + .../appModule/build.gradle.kts | 26 +-- .../kmpResourcePublication/build.gradle.kts | 3 +- .../cmplib/build.gradle.kts | 21 +- .../featureModule/build.gradle.kts | 22 +-- .../settings.gradle.kts | 3 +- .../appModule/build.gradle.kts | 37 ---- .../composeResources/values/strings.xml | 3 - .../misc/oldComposePlugin/build.gradle | 18 +- .../misc/oldComposePlugin/settings.gradle | 2 +- .../misc/testResources/settings.gradle.kts | 1 - 42 files changed, 402 insertions(+), 259 deletions(-) create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/appModule/build.gradle.kts rename gradle-plugins/compose/src/test/test-projects/misc/{kmpResourcePublication/appModule/src/androidMain => androidAppWithResources/appModule/src/main}/AndroidManifest.xml (100%) rename gradle-plugins/compose/src/test/test-projects/misc/{newAgpResources/appModule/src/commonMain => androidAppWithResources/appModule/src/main}/kotlin/me/sample/app/App.kt (87%) rename gradle-plugins/compose/src/test/test-projects/misc/{newAgpResources => androidAppWithResources}/build.gradle.kts (100%) rename gradle-plugins/compose/src/test/test-projects/misc/{newAgpResources => androidAppWithResources}/featureModule/build.gradle.kts (63%) rename gradle-plugins/compose/src/test/test-projects/misc/{newAgpResources => androidAppWithResources}/featureModule/src/commonMain/composeResources/values/strings.xml (100%) rename gradle-plugins/compose/src/test/test-projects/misc/{newAgpResources => androidAppWithResources}/featureModule/src/commonMain/kotlin/me/sample/app/Feature.kt (100%) rename gradle-plugins/compose/src/test/test-projects/misc/{newAgpResources => androidAppWithResources}/gradle.properties (100%) rename gradle-plugins/compose/src/test/test-projects/misc/{newAgpResources => androidAppWithResources}/settings.gradle.kts (100%) create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/build.gradle.kts rename gradle-plugins/compose/src/test/test-projects/misc/{commonResources => fullTargetsAppWithResources/androidApp}/key/debug.keystore (100%) rename gradle-plugins/compose/src/test/test-projects/misc/{newAgpResources/appModule/src/androidMain => fullTargetsAppWithResources/androidApp/src/main}/AndroidManifest.xml (85%) create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/src/main/kotlin/org/company/app/AppActivity.kt create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/build.gradle.kts create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/desktopApp/build.gradle.kts create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/desktopApp/src/main/kotlin/main.kt create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/gradle.properties create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/settings.gradle.kts create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/build.gradle.kts create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/androidMain/composeResources/files/platform.txt create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/commonMain/composeResources/values/strings.xml create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/commonMain/kotlin/org/company/app/App.kt create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/iosMain/composeResources/files/platform.txt create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/iosMain/kotlin/main.kt create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/jsMain/composeResources/files/platform.txt create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/jvmMain/composeResources/files/platform.txt create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/wasmJsMain/composeResources/files/platform.txt create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/webApp/build.gradle.kts create mode 100644 gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/webApp/src/commonMain/kotlin/main.kt delete mode 100644 gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/build.gradle.kts delete mode 100644 gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/src/commonMain/composeResources/values/strings.xml 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 bc451f161b..ca6a7b5d37 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,8 +1,6 @@ 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 @@ -26,7 +24,6 @@ import kotlin.io.path.relativeTo import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertNotNull -import kotlin.test.assertNull import kotlin.test.assertTrue class ResourcesTest : GradlePluginTestBase() { @@ -249,13 +246,6 @@ class ResourcesTest : GradlePluginTestBase() { with( testProject("misc/kmpResourcePublication", environment) ) { - if (environment.parsedGradleVersion < GradleVersion.version("7.6")) { - val output = gradle(":tasks").output - output.contains("Compose resources publication requires Gradle >= 7.6") - output.contains("Current Kotlin Gradle Plugin is ${environment.gradleVersion}") - return@with - } - gradle(":cmplib:publishAllPublicationsToMavenRepository").checks { check.logContains("Configure multi-module compose resources") @@ -333,22 +323,12 @@ class ResourcesTest : GradlePluginTestBase() { } @Test - fun testNewAgpResources() { - Assumptions.assumeTrue(defaultTestEnvironment.parsedGradleVersion >= GradleVersion.version("8.10.2")) - - val agpVersion = Version.fromString(defaultTestEnvironment.agpVersion) - Assumptions.assumeTrue(agpVersion >= Version.fromString("8.8.0-alpha08")) - - with(testProject("misc/newAgpResources", defaultTestEnvironment)) { + fun testAndroidAppWithResources() { + with(testProject("misc/androidAppWithResources", defaultTestEnvironment)) { gradle(":appModule:assembleDebug").checks { - if (agpVersion >= Version.fromString("8.10")) { - check.logContains("Configure compose resources with KotlinMultiplatformAndroidComponentsExtension") - } else { - check.logContains("Configure compose resources with outdated KotlinMultiplatformAndroidComponentsExtension < 8.10") - } + check.logContains("Configure compose resources with KotlinMultiplatformAndroidComponentsExtension") val resourcesFiles = sequenceOf( - "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") @@ -385,7 +365,7 @@ class ResourcesTest : GradlePluginTestBase() { println("check '$res' file") if (isAndroid) { //android resources should be only in assets - assertNull(zip.getEntry(res), "file = '$res'") + // assertNull(zip.getEntry(res), "file = '$res'") FIXME uncomment when https://issuetracker.google.com/456114370 is fixed assertNotNull(zip.getEntry("assets/$res"), "file = 'assets/$res'") } else { assertNotNull(zip.getEntry(res), "file = '$res'") @@ -394,7 +374,6 @@ class ResourcesTest : GradlePluginTestBase() { } } - @Test fun testJvmBuildWithResourcesCustomization(): Unit = with(testProject("misc/commonResources")) { file("build.gradle.kts").appendText( @@ -414,92 +393,79 @@ class ResourcesTest : GradlePluginTestBase() { } @Test - fun testFinalArtefacts(): Unit = with(testProject("misc/commonResources")) { - //https://developer.android.com/build/build-variants?utm_source=android-studio#product-flavors - file("build.gradle.kts").appendText( - """ - - kotlin { - js { - browser { - testTask(Action { - enabled = false - }) - } - binaries.executable() - } - } - - android { - flavorDimensions += "version" - productFlavors { - create("demo") - create("full") - } - } - """.trimIndent() - ) - file("src/androidDemoDebug/composeResources/files/platform.txt").writeNewFile("android demo-debug") - file("src/androidDemoRelease/composeResources/files/platform.txt").writeNewFile("android demo-release") - file("src/androidFullDebug/composeResources/files/platform.txt").writeNewFile("android full-debug") - file("src/androidFullRelease/composeResources/files/platform.txt").writeNewFile("android full-release") - file("src/desktopMain/composeResources/files/platform.txt").writeNewFile("desktop") - file("src/jsMain/composeResources/files/platform.txt").writeNewFile("js") - + fun testFinalArtefacts(): Unit = with(testProject("misc/fullTargetsAppWithResources")) { val commonResourcesDir = file("src/commonMain/composeResources") - val repackDir = "composeResources/app.group.resources_test.generated.resources" + val repackDir = "composeResources/multiplatform_app.sharedui.generated.resources" val commonResourcesFiles = commonResourcesDir.walkTopDown() .filter { !it.isDirectory && !it.isHidden } .getConvertedResources(commonResourcesDir, repackDir) - gradle("build").checks { - check.taskSuccessful(":copyDemoDebugComposeResourcesToAndroidAssets") - check.taskSuccessful(":copyDemoReleaseComposeResourcesToAndroidAssets") - check.taskSuccessful(":copyFullDebugComposeResourcesToAndroidAssets") - check.taskSuccessful(":copyFullReleaseComposeResourcesToAndroidAssets") + gradle(":androidApp:assemble").checks { + check.taskSuccessful(":sharedUI:copyAndroidMainComposeResourcesToAndroidAssets") - getAndroidApk("demo", "debug", "Resources-Test").let { apk -> - checkResourcesZip(apk, commonResourcesFiles, true) - assertEquals( - "android demo-debug", - readFileInZip(apk, "assets/$repackDir/files/platform.txt").decodeToString() - ) - } - getAndroidApk("demo", "release", "Resources-Test").let { apk -> - checkResourcesZip(apk, commonResourcesFiles, true) - assertEquals( - "android demo-release", - readFileInZip(apk, "assets/$repackDir/files/platform.txt").decodeToString() - ) - } - getAndroidApk("full", "debug", "Resources-Test").let { apk -> - checkResourcesZip(apk, commonResourcesFiles, true) - assertEquals( - "android full-debug", - readFileInZip(apk, "assets/$repackDir/files/platform.txt").decodeToString() - ) - } - getAndroidApk("full", "release", "Resources-Test").let { apk -> + listOf( + "androidApp/build/outputs/apk/demo/debug/androidApp-demo-debug.apk", + "androidApp/build/outputs/apk/full/debug/androidApp-full-debug.apk", + "androidApp/build/outputs/apk/demo/release/androidApp-demo-release.apk", + "androidApp/build/outputs/apk/full/release/androidApp-full-release.apk" + ).forEach { path -> + val apk = file(path) checkResourcesZip(apk, commonResourcesFiles, true) assertEquals( - "android full-release", + "android", readFileInZip(apk, "assets/$repackDir/files/platform.txt").decodeToString() ) } + } + + gradle(":desktopApp:build").checks { + check.taskSuccessful(":sharedUI:jvmProcessResources") - file("build/libs/Resources-Test-desktop.jar").let { jar -> + file("sharedUI/build/libs/sharedUI-jvm.jar").let { jar -> checkResourcesZip(jar, commonResourcesFiles, false) assertEquals( "desktop", readFileInZip(jar, "$repackDir/files/platform.txt").decodeToString() ) } + } + + gradle(":webApp:build").checks { + check.taskSuccessful(":sharedUI:wasmJsCopyHierarchicalMultiplatformResources") + check.taskSuccessful(":sharedUI:jsCopyHierarchicalMultiplatformResources") - val jsBuildDir = file("build/dist/js/productionExecutable") + val jsBuildDir = file("webApp/build/dist/js/productionExecutable") commonResourcesFiles.forEach { res -> assertTrue(jsBuildDir.resolve(res).exists()) } assertEquals("js", jsBuildDir.resolve("$repackDir/files/platform.txt").readText()) + + val wasmJsBuildDir = file("webApp/build/dist/wasmJs/productionExecutable") + commonResourcesFiles.forEach { res -> + assertTrue(wasmJsBuildDir.resolve(res).exists()) + } + assertEquals("wasm", wasmJsBuildDir.resolve("$repackDir/files/platform.txt").readText()) + } + + + if(currentOS == OS.MacOS) { + gradle(":sharedUI:assembleSharedUIDebugXCFramework").checks { + check.taskSuccessful(":sharedUI:iosArm64AggregateResources") + check.taskSuccessful(":sharedUI:iosSimulatorArm64AggregateResources") + check.taskSuccessful(":sharedUI:iosX64AggregateResources") + + val iosDeviceFramework = file("sharedUI/build/XCFrameworks/debug/SharedUI.xcframework/ios-arm64/SharedUI.framework") + commonResourcesFiles.forEach { res -> + assertTrue(iosDeviceFramework.resolve(res).exists()) + } + assertEquals("ios", iosDeviceFramework.resolve("$repackDir/files/platform.txt").readText()) + + val iosSimFramework = file("sharedUI/build/XCFrameworks/debug/SharedUI.xcframework/ios-arm64_x86_64-simulator/SharedUI.framework") + commonResourcesFiles.forEach { res -> + assertTrue(iosSimFramework.resolve(res).exists()) + } + assertEquals("ios", iosSimFramework.resolve("$repackDir/files/platform.txt").readText()) + } } } @@ -629,15 +595,23 @@ class ResourcesTest : GradlePluginTestBase() { fun testHugeNumberOfResources(): Unit = with(testProject("misc/hugeResources")) { gradle(":generateResourceFiles") gradle(":generateResourceAccessorsForCommonMain").checks { - val buildPath = "build/generated/compose/resourceGenerator/kotlin/commonMainResourceAccessors/app/group/huge/generated/resources" + val buildPath = + "build/generated/compose/resourceGenerator/kotlin/commonMainResourceAccessors/app/group/huge/generated/resources" assertEqualTextFiles(file("$buildPath/Drawable0.commonMain.kt"), file("expected/Drawable0.commonMain.kt")) - assertEqualTextFiles(file("$buildPath/Drawable100.commonMain.kt"), file("expected/Drawable100.commonMain.kt")) + assertEqualTextFiles( + file("$buildPath/Drawable100.commonMain.kt"), + file("expected/Drawable100.commonMain.kt") + ) assertEqualTextFiles(file("$buildPath/String0.commonMain.kt"), file("expected/String0.commonMain.kt")) assertEqualTextFiles(file("$buildPath/String100.commonMain.kt"), file("expected/String100.commonMain.kt")) } gradle(":generateActualResourceCollectorsForDesktopMain").checks { - val desktopPath = "build/generated/compose/resourceGenerator/kotlin/desktopMainResourceCollectors/app/group/huge/generated/resources" - assertEqualTextFiles(file("$desktopPath/ActualResourceCollectors.kt"), file("expected/ActualResourceCollectors.kt")) + val desktopPath = + "build/generated/compose/resourceGenerator/kotlin/desktopMainResourceCollectors/app/group/huge/generated/resources" + assertEqualTextFiles( + file("$desktopPath/ActualResourceCollectors.kt"), + file("expected/ActualResourceCollectors.kt") + ) } } @@ -693,7 +667,8 @@ class ResourcesTest : GradlePluginTestBase() { with( testProject( "misc/appleResources", - defaultTestEnvironment.copy(kotlinVersion = "2.1.21")) + defaultTestEnvironment.copy(kotlinVersion = "2.1.21") + ) ) { file("build.gradle.kts").modify { content -> """ @@ -747,7 +722,8 @@ class ResourcesTest : GradlePluginTestBase() { with( testProject( "misc/appleResources", - defaultTestEnvironment.copy(kotlinVersion = "2.2.0-RC2")) + defaultTestEnvironment.copy(kotlinVersion = "2.2.0-RC2") + ) ) { file("build.gradle.kts").modify { content -> """ @@ -900,7 +876,8 @@ class ResourcesTest : GradlePluginTestBase() { with( testProject( "misc/appleResources", - defaultTestEnvironment.copy(kotlinVersion = "2.2.0-RC2")) + defaultTestEnvironment.copy(kotlinVersion = "2.2.0-RC2") + ) ) { gradle(":podPublishDebugXCFramework").checks { assertDirectoriesContentEquals( @@ -1025,7 +1002,8 @@ class ResourcesTest : GradlePluginTestBase() { with(testProject("misc/macosNativeResources")) { val appName = "Test Resources" gradle(":createDistributableNativeDebugMacosX64").checks { - val targetResourcesDir = "build/compose/binaries/main/native-macosX64-debug-app-image/${appName}.app/Contents/Resources" + val targetResourcesDir = + "build/compose/binaries/main/native-macosX64-debug-app-image/${appName}.app/Contents/Resources" file("$targetResourcesDir/compose-resources/composeResources/appleresources.generated.resources/drawable/compose-multiplatform.xml").checkExists() file("$targetResourcesDir/compose-resources/composeResources/appleresources.generated.resources/drawable/icon.xml").checkExists() } @@ -1043,7 +1021,8 @@ class ResourcesTest : GradlePluginTestBase() { "compose-multiplatform.xml", "icon.xml" ) - val targetResourcesDir = "build/compose/binaries/main/native-macosX64-debug-app-image/${appName}.app/Contents/Resources/compose-resources/composeResources/appleresources.generated.resources/drawable/" + val targetResourcesDir = + "build/compose/binaries/main/native-macosX64-debug-app-image/${appName}.app/Contents/Resources/compose-resources/composeResources/appleresources.generated.resources/drawable/" gradle(taskName).checks { fileNames.forEach { name -> check(!file(targetResourcesDir + name).readText().startsWith(comment)) { @@ -1085,7 +1064,8 @@ class ResourcesTest : GradlePluginTestBase() { } gradle(taskName).checks { - val targetResourcesDir = "build/compose/binaries/main/native-macosX64-debug-app-image/${appName}.app/Contents/Resources" + val targetResourcesDir = + "build/compose/binaries/main/native-macosX64-debug-app-image/${appName}.app/Contents/Resources" file("$targetResourcesDir/compose-resources/composeResources/appleresources.generated.resources/drawable/compose-multiplatform.xml").checkExists() file("$targetResourcesDir/compose-resources/composeResources/appleresources.generated.resources/drawable/compose-multiplatform2.xml").checkExists() file("$targetResourcesDir/compose-resources/composeResources/appleresources.generated.resources/drawable/icon.xml").checkExists() @@ -1093,7 +1073,8 @@ class ResourcesTest : GradlePluginTestBase() { check(file(targetResource).delete()) gradle(taskName).checks { check.taskSuccessful(taskName) - val targetResourcesDir = "build/compose/binaries/main/native-macosX64-debug-app-image/${appName}.app/Contents/Resources" + val targetResourcesDir = + "build/compose/binaries/main/native-macosX64-debug-app-image/${appName}.app/Contents/Resources" file("$targetResourcesDir/compose-resources/composeResources/appleresources.generated.resources/drawable/compose-multiplatform.xml").checkExists() file("$targetResourcesDir/compose-resources/composeResources/appleresources.generated.resources/drawable/compose-multiplatform2.xml").checkNotExists() file("$targetResourcesDir/compose-resources/composeResources/appleresources.generated.resources/drawable/icon.xml").checkExists() diff --git a/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/appModule/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/appModule/build.gradle.kts new file mode 100644 index 0000000000..1c0527b591 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/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 = 24 + targetSdk = 35 + versionCode = 1 + versionName = "1.0" + } +} + +dependencies { + implementation(project(":featureModule")) +} diff --git a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/appModule/src/androidMain/AndroidManifest.xml b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/appModule/src/main/AndroidManifest.xml similarity index 100% rename from gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/appModule/src/androidMain/AndroidManifest.xml rename to gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/appModule/src/main/AndroidManifest.xml diff --git a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/src/commonMain/kotlin/me/sample/app/App.kt b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/appModule/src/main/kotlin/me/sample/app/App.kt similarity index 87% rename from gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/src/commonMain/kotlin/me/sample/app/App.kt rename to gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/appModule/src/main/kotlin/me/sample/app/App.kt index 4c9c113677..b14ec63cbf 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/src/commonMain/kotlin/me/sample/app/App.kt +++ b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/appModule/src/main/kotlin/me/sample/app/App.kt @@ -4,7 +4,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import newagpresources.appmodule.generated.resources.* +import newagpresources.featuremodule.generated.resources.* import org.jetbrains.compose.resources.stringResource @Composable diff --git a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/build.gradle.kts similarity index 100% rename from gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/build.gradle.kts rename to gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/build.gradle.kts diff --git a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/featureModule/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/build.gradle.kts similarity index 63% rename from gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/featureModule/build.gradle.kts rename to gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/build.gradle.kts index 0189bd2cba..6dfcb75a80 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/featureModule/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/build.gradle.kts @@ -6,21 +6,21 @@ plugins { } kotlin { - jvmToolchain(11) + jvmToolchain(17) jvm() androidLibrary { - experimentalProperties["android.experimental.kmp.enableAndroidResources"] = true namespace = "me.sample.feature" compileSdk = 35 minSdk = 24 + androidResources.enable = true } sourceSets { commonMain.dependencies { - implementation(compose.runtime) - implementation(compose.material3) - implementation(compose.components.resources) + api(compose.runtime) + api(compose.material3) + api(compose.components.resources) } } } @@ -28,4 +28,8 @@ kotlin { //https://youtrack.jetbrains.com/issue/CMP-8325 compose.desktop { application { } +} + +compose.resources { + publicResClass = true } \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/featureModule/src/commonMain/composeResources/values/strings.xml b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/src/commonMain/composeResources/values/strings.xml similarity index 100% rename from gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/featureModule/src/commonMain/composeResources/values/strings.xml rename to gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/src/commonMain/composeResources/values/strings.xml diff --git a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/featureModule/src/commonMain/kotlin/me/sample/app/Feature.kt b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/src/commonMain/kotlin/me/sample/app/Feature.kt similarity index 100% rename from gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/featureModule/src/commonMain/kotlin/me/sample/app/Feature.kt rename to gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/src/commonMain/kotlin/me/sample/app/Feature.kt diff --git a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/gradle.properties b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/gradle.properties similarity index 100% rename from gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/gradle.properties rename to gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/gradle.properties diff --git a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/settings.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/settings.gradle.kts similarity index 100% rename from gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/settings.gradle.kts rename to gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/settings.gradle.kts diff --git a/gradle-plugins/compose/src/test/test-projects/misc/commonResources/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/commonResources/build.gradle.kts index ea9ed3f5d6..d7919edef9 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/commonResources/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/commonResources/build.gradle.kts @@ -1,21 +1,18 @@ plugins { kotlin("multiplatform") kotlin("plugin.compose") - id("com.android.application") + id("com.android.kotlin.multiplatform.library") id("org.jetbrains.compose") } group = "app.group" kotlin { - androidTarget { - compilations.all { - compileTaskProvider { - compilerOptions { - jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11) - } - } - } + androidLibrary { + compileSdk = 35 + namespace = "org.jetbrains.compose.resources.test" + minSdk = 23 + androidResources.enable = true } jvm("desktop") @@ -32,43 +29,6 @@ kotlin { } } -android { - compileSdk = 35 - namespace = "org.jetbrains.compose.resources.test" - sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") - defaultConfig { - applicationId = "org.example.project" - minSdk = 23 - targetSdk = 35 - versionCode = 1 - versionName = "1.0" - } - signingConfigs { - create("testkey") { - storeFile = project.file("key/debug.keystore") - storePassword = "android" - keyAlias = "androiddebugkey" - keyPassword = "android" - } - } - buildTypes { - getByName("release") { - isMinifyEnabled = false - signingConfig = signingConfigs.getByName("testkey") - } - getByName("debug") { - signingConfig = signingConfigs.getByName("testkey") - } - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } - lint { - checkReleaseBuilds = false - } -} - abstract class GenerateAndroidRes : DefaultTask() { @get:Inject abstract val layout: ProjectLayout diff --git a/gradle-plugins/compose/src/test/test-projects/misc/commonResources/settings.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/commonResources/settings.gradle.kts index b255604342..498b73d9a6 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/commonResources/settings.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/commonResources/settings.gradle.kts @@ -7,7 +7,7 @@ pluginManagement { maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") } plugins { - id("com.android.application").version("AGP_VERSION_PLACEHOLDER") + id("com.android.kotlin.multiplatform.library").version("AGP_VERSION_PLACEHOLDER") 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") diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/build.gradle.kts new file mode 100644 index 0000000000..eab03ddeff --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/build.gradle.kts @@ -0,0 +1,48 @@ +plugins { + id("com.android.application") +} + +android { + namespace = "org.company.app.androidApp" + compileSdk = 36 + + defaultConfig { + minSdk = 23 + targetSdk = 36 + + applicationId = "org.company.app.androidApp" + versionCode = 1 + versionName = "1.0.0" + } + signingConfigs { + create("testkey") { + storeFile = project.file("key/debug.keystore") + storePassword = "android" + keyAlias = "androiddebugkey" + keyPassword = "android" + } + } + buildTypes { + getByName("release") { + isMinifyEnabled = false + signingConfig = signingConfigs.getByName("testkey") + } + getByName("debug") { + signingConfig = signingConfigs.getByName("testkey") + } + } + flavorDimensions += "version" + productFlavors { + create("demo") + create("full") + } + lint { + checkReleaseBuilds = false + } +} + + + +dependencies { + implementation(project(":sharedUI")) +} diff --git a/gradle-plugins/compose/src/test/test-projects/misc/commonResources/key/debug.keystore b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/key/debug.keystore similarity index 100% rename from gradle-plugins/compose/src/test/test-projects/misc/commonResources/key/debug.keystore rename to gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/key/debug.keystore diff --git a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/src/androidMain/AndroidManifest.xml b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/src/main/AndroidManifest.xml similarity index 85% rename from gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/src/androidMain/AndroidManifest.xml rename to gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/src/main/AndroidManifest.xml index 96aa10f056..792e6a3af7 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/src/androidMain/AndroidManifest.xml +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/src/main/kotlin/org/company/app/AppActivity.kt b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/src/main/kotlin/org/company/app/AppActivity.kt new file mode 100644 index 0000000000..4dee70372c --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/src/main/kotlin/org/company/app/AppActivity.kt @@ -0,0 +1,13 @@ +package org.company.app + +import androidx.compose.runtime.Composable +import multiplatform_app.sharedui.generated.resources.Res +import multiplatform_app.sharedui.generated.resources.cyclone +import org.jetbrains.compose.resources.stringResource + + +@Composable +fun Foo() { + val s = stringResource(Res.string.cyclone) + App() +} diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/build.gradle.kts new file mode 100644 index 0000000000..b37f2ed645 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + id("com.android.kotlin.multiplatform.library").apply(false) + id("com.android.application").apply(false) + id("org.jetbrains.kotlin.multiplatform").apply(false) + id("org.jetbrains.kotlin.android").apply(false) + id("org.jetbrains.kotlin.jvm").apply(false) + id("org.jetbrains.kotlin.plugin.compose").apply(false) + id("org.jetbrains.compose").apply(false) +} diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/desktopApp/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/desktopApp/build.gradle.kts new file mode 100644 index 0000000000..52456e3381 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/desktopApp/build.gradle.kts @@ -0,0 +1,15 @@ +plugins { + id("org.jetbrains.kotlin.jvm") + id("org.jetbrains.kotlin.plugin.compose") + id("org.jetbrains.compose") +} + +dependencies { + implementation(project(":sharedUI")) +} + +compose.desktop { + application { + mainClass = "MainKt" + } +} diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/desktopApp/src/main/kotlin/main.kt b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/desktopApp/src/main/kotlin/main.kt new file mode 100644 index 0000000000..dc170867c8 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/desktopApp/src/main/kotlin/main.kt @@ -0,0 +1,11 @@ +import androidx.compose.runtime.Composable +import multiplatform_app.sharedui.generated.resources.Res +import multiplatform_app.sharedui.generated.resources.cyclone +import org.jetbrains.compose.resources.stringResource + +fun main() {} + +@Composable +private fun Foo() { + val s = stringResource(Res.string.cyclone) +} \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/gradle.properties b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/gradle.properties new file mode 100644 index 0000000000..11db9072f6 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/gradle.properties @@ -0,0 +1,18 @@ +#Gradle +org.gradle.jvmargs=-Xmx4G +org.gradle.caching=true +org.gradle.configuration-cache=true +org.gradle.daemon=true +org.gradle.parallel=true + +#Kotlin +kotlin.code.style=official +kotlin.daemon.jvmargs=-Xmx4G +kotlin.native.binary.gc=cms +kotlin.incremental.wasm=true + +#Android +android.useAndroidX=true +android.nonTransitiveRClass=true +#Compose +org.jetbrains.compose.experimental.jscanvas.enabled=true diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/settings.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/settings.gradle.kts new file mode 100644 index 0000000000..1500b5470c --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/settings.gradle.kts @@ -0,0 +1,34 @@ +rootProject.name = "Multiplatform-App" + +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + google() + maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") + } + plugins { + id("com.android.kotlin.multiplatform.library").version("AGP_VERSION_PLACEHOLDER") + id("com.android.application").version("AGP_VERSION_PLACEHOLDER") + id("org.jetbrains.kotlin.multiplatform").version("KOTLIN_VERSION_PLACEHOLDER") + id("org.jetbrains.kotlin.android").version("KOTLIN_VERSION_PLACEHOLDER") + id("org.jetbrains.kotlin.jvm").version("KOTLIN_VERSION_PLACEHOLDER") + id("org.jetbrains.kotlin.plugin.compose").version("KOTLIN_VERSION_PLACEHOLDER") + id("org.jetbrains.compose").version("COMPOSE_GRADLE_PLUGIN_VERSION_PLACEHOLDER") + } +} +dependencyResolutionManagement { + repositories { + maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") + mavenCentral() + gradlePluginPortal() + google() + mavenLocal() + } +} + +include(":sharedUI") +include(":androidApp") +include(":desktopApp") +include(":webApp") + diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/build.gradle.kts new file mode 100644 index 0000000000..189e82fae5 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/build.gradle.kts @@ -0,0 +1,54 @@ +import org.gradle.kotlin.dsl.withType +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework + +plugins { + id("com.android.kotlin.multiplatform.library") + id("org.jetbrains.kotlin.multiplatform") + id("org.jetbrains.kotlin.plugin.compose") + id("org.jetbrains.compose") +} + +kotlin { + androidLibrary { + namespace = "org.company.app" + compileSdk = 36 + minSdk = 23 + androidResources.enable = true + } + + jvm() + + js { browser() } + wasmJs { browser() } + + iosX64() + iosArm64() + iosSimulatorArm64() + + sourceSets { + commonMain.dependencies { + api(compose.runtime) + api(compose.ui) + api(compose.foundation) + api(compose.components.resources) + } + } + + val xcf = XCFramework("SharedUI") + targets + .withType() + .matching { it.konanTarget.family.isAppleFamily } + .configureEach { + binaries { + framework { + baseName = "SharedUI" + xcf.add(this) + } + } + } +} + +compose.resources { + publicResClass = true +} diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/androidMain/composeResources/files/platform.txt b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/androidMain/composeResources/files/platform.txt new file mode 100644 index 0000000000..1fd74d1981 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/androidMain/composeResources/files/platform.txt @@ -0,0 +1 @@ +android \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/commonMain/composeResources/values/strings.xml b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/commonMain/composeResources/values/strings.xml new file mode 100644 index 0000000000..95f212f38c --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/commonMain/composeResources/values/strings.xml @@ -0,0 +1,3 @@ + + Cyclone + \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/commonMain/kotlin/org/company/app/App.kt b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/commonMain/kotlin/org/company/app/App.kt new file mode 100644 index 0000000000..a494a9ab75 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/commonMain/kotlin/org/company/app/App.kt @@ -0,0 +1,12 @@ +package org.company.app + +import androidx.compose.foundation.text.BasicText +import androidx.compose.runtime.Composable +import multiplatform_app.sharedui.generated.resources.Res +import multiplatform_app.sharedui.generated.resources.cyclone +import org.jetbrains.compose.resources.stringResource + +@Composable +fun App() { + BasicText(text = stringResource(Res.string.cyclone)) +} diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/iosMain/composeResources/files/platform.txt b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/iosMain/composeResources/files/platform.txt new file mode 100644 index 0000000000..d99afd614c --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/iosMain/composeResources/files/platform.txt @@ -0,0 +1 @@ +ios \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/iosMain/kotlin/main.kt b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/iosMain/kotlin/main.kt new file mode 100644 index 0000000000..dea8f49319 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/iosMain/kotlin/main.kt @@ -0,0 +1,7 @@ +import androidx.compose.ui.window.ComposeUIViewController +import org.company.app.App +import platform.UIKit.UIViewController + +fun MainViewController(): UIViewController = ComposeUIViewController { + App() +} \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/jsMain/composeResources/files/platform.txt b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/jsMain/composeResources/files/platform.txt new file mode 100644 index 0000000000..bc42fd64f5 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/jsMain/composeResources/files/platform.txt @@ -0,0 +1 @@ +js \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/jvmMain/composeResources/files/platform.txt b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/jvmMain/composeResources/files/platform.txt new file mode 100644 index 0000000000..8714ca25df --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/jvmMain/composeResources/files/platform.txt @@ -0,0 +1 @@ +desktop \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/wasmJsMain/composeResources/files/platform.txt b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/wasmJsMain/composeResources/files/platform.txt new file mode 100644 index 0000000000..093014dd47 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/src/wasmJsMain/composeResources/files/platform.txt @@ -0,0 +1 @@ +wasm \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/webApp/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/webApp/build.gradle.kts new file mode 100644 index 0000000000..5c73a297e8 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/webApp/build.gradle.kts @@ -0,0 +1,23 @@ +plugins { + id("org.jetbrains.kotlin.multiplatform") + id("org.jetbrains.kotlin.plugin.compose") + id("org.jetbrains.compose") +} + +kotlin { + js { + browser() + binaries.executable() + } + + wasmJs { + browser() + binaries.executable() + } + + sourceSets { + commonMain.dependencies { + implementation(project(":sharedUI")) + } + } +} diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/webApp/src/commonMain/kotlin/main.kt b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/webApp/src/commonMain/kotlin/main.kt new file mode 100644 index 0000000000..d44a1616c0 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/webApp/src/commonMain/kotlin/main.kt @@ -0,0 +1 @@ +fun main() {} diff --git a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/appModule/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/appModule/build.gradle.kts index a05c6eb2a8..0e9b4904b7 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/appModule/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/appModule/build.gradle.kts @@ -4,11 +4,16 @@ plugins { id("org.jetbrains.compose") kotlin("multiplatform") kotlin("plugin.compose") - id("com.android.application") + id("com.android.kotlin.multiplatform.library") } kotlin { - androidTarget() + androidLibrary { + compileSdk = 35 + namespace = "me.sample.app" + minSdk = 24 + androidResources.enable = true + } jvm() iosX64() iosArm64() @@ -38,20 +43,3 @@ kotlin { } } } - -android { - namespace = "me.sample.app" - compileSdk = 35 - sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") - defaultConfig { - applicationId = "org.example.project" - minSdk = 24 - targetSdk = 35 - versionCode = 1 - versionName = "1.0" - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } -} \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/build.gradle.kts index 7dddc27d0a..f104d2a8a1 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/build.gradle.kts @@ -2,6 +2,5 @@ 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) + id("com.android.kotlin.multiplatform.library").apply(false) } diff --git a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/cmplib/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/cmplib/build.gradle.kts index a7a363c44e..2fa9aa60d6 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/cmplib/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/cmplib/build.gradle.kts @@ -3,7 +3,7 @@ plugins { kotlin("multiplatform") kotlin("plugin.compose") id("maven-publish") - id("com.android.library") + id("com.android.kotlin.multiplatform.library") } group = "me.sample.library" @@ -17,7 +17,12 @@ publishing { } kotlin { - androidTarget { publishLibraryVariants("release") } + androidLibrary { + compileSdk = 35 + namespace = "me.sample.library" + minSdk = 24 + androidResources.enable = true + } jvm() iosX64() iosArm64() @@ -36,18 +41,6 @@ kotlin { } } -android { - namespace = "me.sample.library" - compileSdk = 35 - defaultConfig { - minSdk = 24 - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } -} - compose.resources { publicResClass = true packageOfResClass = "me.sample.library.resources" diff --git a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/featureModule/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/featureModule/build.gradle.kts index 924dfe85a7..36726a09ca 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/featureModule/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/featureModule/build.gradle.kts @@ -2,11 +2,16 @@ plugins { id("org.jetbrains.compose") kotlin("multiplatform") kotlin("plugin.compose") - id("com.android.library") + id("com.android.kotlin.multiplatform.library") } kotlin { - androidTarget() + androidLibrary { + compileSdk = 35 + namespace = "me.sample.feature" + minSdk = 24 + androidResources.enable = true + } jvm() iosX64() iosArm64() @@ -24,16 +29,3 @@ kotlin { } } } - -android { - namespace = "me.sample.feature" - compileSdk = 35 - - defaultConfig { - minSdk = 24 - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } -} \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/settings.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/settings.gradle.kts index 703dc4e967..834a699f9a 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/settings.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/settings.gradle.kts @@ -17,8 +17,7 @@ pluginManagement { 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") + id("com.android.kotlin.multiplatform.library").version("AGP_VERSION_PLACEHOLDER") } } dependencyResolutionManagement { diff --git a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/build.gradle.kts deleted file mode 100644 index ce7429f97b..0000000000 --- a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/build.gradle.kts +++ /dev/null @@ -1,37 +0,0 @@ -plugins { - id("org.jetbrains.compose") - kotlin("multiplatform") - kotlin("plugin.compose") - id("com.android.application") -} - -kotlin { - jvmToolchain(11) - androidTarget() - jvm() - - sourceSets { - commonMain.dependencies { - implementation(compose.runtime) - implementation(compose.material3) - implementation(compose.components.resources) - implementation(project(":featureModule")) - } - - jvmMain.dependencies { - implementation(compose.desktop.currentOs) - } - } -} - -android { - namespace = "me.sample.app" - compileSdk = 35 - defaultConfig { - applicationId = "org.example.project" - minSdk = 24 - targetSdk = 35 - versionCode = 1 - versionName = "1.0" - } -} \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/src/commonMain/composeResources/values/strings.xml b/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/src/commonMain/composeResources/values/strings.xml deleted file mode 100644 index fa6300c278..0000000000 --- a/gradle-plugins/compose/src/test/test-projects/misc/newAgpResources/appModule/src/commonMain/composeResources/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - App text str_1 - \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/oldComposePlugin/build.gradle b/gradle-plugins/compose/src/test/test-projects/misc/oldComposePlugin/build.gradle index fc01cd6985..7868890b2e 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/oldComposePlugin/build.gradle +++ b/gradle-plugins/compose/src/test/test-projects/misc/oldComposePlugin/build.gradle @@ -1,7 +1,7 @@ import org.jetbrains.compose.desktop.application.dsl.TargetFormat plugins { - id "com.android.application" + id "com.android.kotlin.multiplatform.library" id "org.jetbrains.kotlin.multiplatform" id "org.jetbrains.compose" } @@ -9,7 +9,11 @@ plugins { kotlin { // empty stub (no actual android app) to detect configuration conflicts // like https://github.com/JetBrains/compose-jb/issues/2345 - android() + androidLibrary { + namespace = "org.jetbrains.compose.testapp" + compileSdk = 35 + minSdk = 23 + } jvm() sourceSets { @@ -23,16 +27,6 @@ kotlin { } } -android { - namespace = "org.jetbrains.compose.testapp" - compileSdk = 35 - - defaultConfig { - minSdk = 23 - targetSdk = 35 - } -} - kotlin { jvm { jvmToolchain { diff --git a/gradle-plugins/compose/src/test/test-projects/misc/oldComposePlugin/settings.gradle b/gradle-plugins/compose/src/test/test-projects/misc/oldComposePlugin/settings.gradle index 63b6efd24f..dfdd21d429 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/oldComposePlugin/settings.gradle +++ b/gradle-plugins/compose/src/test/test-projects/misc/oldComposePlugin/settings.gradle @@ -2,7 +2,7 @@ pluginManagement { plugins { id 'org.jetbrains.kotlin.multiplatform' version 'KOTLIN_VERSION_PLACEHOLDER' id 'org.jetbrains.compose' version 'COMPOSE_GRADLE_PLUGIN_VERSION_PLACEHOLDER' - id 'com.android.application' version 'AGP_VERSION_PLACEHOLDER' + id 'com.android.kotlin.multiplatform.library' version 'AGP_VERSION_PLACEHOLDER' } repositories { mavenLocal() diff --git a/gradle-plugins/compose/src/test/test-projects/misc/testResources/settings.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/testResources/settings.gradle.kts index 59c6b74862..3b88e41b36 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/testResources/settings.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/testResources/settings.gradle.kts @@ -7,7 +7,6 @@ pluginManagement { maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") } plugins { - id("com.android.application").version("AGP_VERSION_PLACEHOLDER") 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") From b9da68832d8824798aa7133cf53a2be448a7242c Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Wed, 29 Oct 2025 17:29:40 +0100 Subject: [PATCH 04/14] Update Gradle test version to 9.2.0. --- gradle-plugins/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle-plugins/gradle.properties b/gradle-plugins/gradle.properties index 511f88e632..87121cf0b5 100644 --- a/gradle-plugins/gradle.properties +++ b/gradle-plugins/gradle.properties @@ -16,7 +16,7 @@ compose.tests.kotlin.version=2.2.20 # 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.13, 9.1.0 +compose.tests.gradle.versions=8.13, 9.2.0 compose.tests.agp.versions=8.11.2, 8.12.3, 9.0.0-alpha11 # gradle and agp versions should be compatible: # https://developer.android.com/build/releases/gradle-plugin#updating-plugin From b9fd7ab42b14f700886bf4793dc7b931ecdcaaa9 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Wed, 29 Oct 2025 17:32:51 +0100 Subject: [PATCH 05/14] Update Gradle to 8.13 and 9.2.0; AGP to 8.11.2, 8.12.3, and 9.0.0-alpha11 in test matrix. --- .github/workflows/gradle-plugin.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gradle-plugin.yml b/.github/workflows/gradle-plugin.yml index d7c48a89fd..d8bce6fa8f 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-15-xlarge', 'windows-2022'] - gradle: ['8.7', '9.0.0'] - agp: ['8.6.0', '8.9.0', '9.0.0-alpha01'] + gradle: ['8.13', '9.2.0'] + agp: ['8.11.2', '8.12.3', '9.0.0-alpha11'] runs-on: ${{ matrix.os }} steps: - name: Checkout Repository From 7ad9e92ca986af511f575cd2b342d6e803ea72ba Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Thu, 30 Oct 2025 12:19:24 +0100 Subject: [PATCH 06/14] Simplify test projects by removing explicit Kotlin version configuration for `misc/appleResources`. --- .../test/tests/integration/ResourcesTest.kt | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) 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 ca6a7b5d37..8bd3d41a3c 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 @@ -719,12 +719,7 @@ class ResourcesTest : GradlePluginTestBase() { @Test fun xcframeworkResources() { Assumptions.assumeTrue(currentOS == OS.MacOS) - with( - testProject( - "misc/appleResources", - defaultTestEnvironment.copy(kotlinVersion = "2.2.0-RC2") - ) - ) { + with(testProject("misc/appleResources")) { file("build.gradle.kts").modify { content -> """ |import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework @@ -872,13 +867,7 @@ class ResourcesTest : GradlePluginTestBase() { @Test fun cocoapodsIosXCFrameworkResources() { Assumptions.assumeTrue(currentOS == OS.MacOS) - - with( - testProject( - "misc/appleResources", - defaultTestEnvironment.copy(kotlinVersion = "2.2.0-RC2") - ) - ) { + with(testProject("misc/appleResources")) { gradle(":podPublishDebugXCFramework").checks { assertDirectoriesContentEquals( file("build/cocoapods/publish/debug/shared.xcframework/ios-arm64/shared.framework/composeResources"), From bdd0b7cadf1fe722c42a95e43a61ed537dfb96c7 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Thu, 30 Oct 2025 12:22:41 +0100 Subject: [PATCH 07/14] Remove `jscanvas` experimental flag from test projects. --- .../test/test-projects/misc/commonResources/gradle.properties | 1 - .../misc/fullTargetsAppWithResources/gradle.properties | 2 -- .../misc/kmpResourcePublication/gradle.properties | 4 ---- .../src/test/test-projects/misc/skikoWasm/gradle.properties | 1 - .../test/test-projects/misc/testResources/gradle.properties | 1 - 5 files changed, 9 deletions(-) diff --git a/gradle-plugins/compose/src/test/test-projects/misc/commonResources/gradle.properties b/gradle-plugins/compose/src/test/test-projects/misc/commonResources/gradle.properties index be233bd353..62c8bd1e33 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/commonResources/gradle.properties +++ b/gradle-plugins/compose/src/test/test-projects/misc/commonResources/gradle.properties @@ -1,4 +1,3 @@ org.gradle.jvmargs=-Xmx8096M android.useAndroidX=true -org.jetbrains.compose.experimental.jscanvas.enabled=true org.jetbrains.compose.resources.content.hash.generation.disable=true \ No newline at end of file diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/gradle.properties b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/gradle.properties index 11db9072f6..297046330f 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/gradle.properties +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/gradle.properties @@ -14,5 +14,3 @@ kotlin.incremental.wasm=true #Android android.useAndroidX=true android.nonTransitiveRClass=true -#Compose -org.jetbrains.compose.experimental.jscanvas.enabled=true diff --git a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/gradle.properties b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/gradle.properties index 3ae7c5803a..36703c15c1 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/gradle.properties +++ b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/gradle.properties @@ -1,8 +1,4 @@ org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx2048M" kotlin.code.style=official -kotlin.js.compiler=ir android.useAndroidX=true -org.jetbrains.compose.experimental.uikit.enabled=true -org.jetbrains.compose.experimental.jscanvas.enabled=true -org.jetbrains.compose.experimental.wasm.enabled=true org.jetbrains.compose.experimental.macos.enabled=true diff --git a/gradle-plugins/compose/src/test/test-projects/misc/skikoWasm/gradle.properties b/gradle-plugins/compose/src/test/test-projects/misc/skikoWasm/gradle.properties index 4fae7bbeff..8ec3c6acb0 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/skikoWasm/gradle.properties +++ b/gradle-plugins/compose/src/test/test-projects/misc/skikoWasm/gradle.properties @@ -1,2 +1 @@ org.gradle.jvmargs=-Xmx8096M -org.jetbrains.compose.experimental.jscanvas.enabled=true diff --git a/gradle-plugins/compose/src/test/test-projects/misc/testResources/gradle.properties b/gradle-plugins/compose/src/test/test-projects/misc/testResources/gradle.properties index 2f532ce0ea..260cded72a 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/testResources/gradle.properties +++ b/gradle-plugins/compose/src/test/test-projects/misc/testResources/gradle.properties @@ -1,4 +1,3 @@ org.gradle.jvmargs=-Xmx8096M android.useAndroidX=true -org.jetbrains.compose.experimental.jscanvas.enabled=true org.jetbrains.compose.experimental.macos.enabled=true \ No newline at end of file From 2b7e3fafe5bb13f87663fadb52750ab97f73d92c Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Thu, 30 Oct 2025 12:50:05 +0100 Subject: [PATCH 08/14] Lower `minSdk` to 23 and align `compileSdk` to 35 in test projects. --- .../misc/androidAppWithResources/appModule/build.gradle.kts | 2 +- .../misc/androidAppWithResources/featureModule/build.gradle.kts | 2 +- .../fullTargetsAppWithResources/androidApp/build.gradle.kts | 2 +- .../misc/fullTargetsAppWithResources/sharedUI/build.gradle.kts | 2 +- .../misc/kmpResourcePublication/appModule/build.gradle.kts | 2 +- .../misc/kmpResourcePublication/cmplib/build.gradle.kts | 2 +- .../misc/kmpResourcePublication/featureModule/build.gradle.kts | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/appModule/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/appModule/build.gradle.kts index 1c0527b591..332da088ad 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/appModule/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/appModule/build.gradle.kts @@ -9,7 +9,7 @@ android { compileSdk = 35 defaultConfig { applicationId = "org.example.project" - minSdk = 24 + minSdk = 23 targetSdk = 35 versionCode = 1 versionName = "1.0" diff --git a/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/build.gradle.kts index 6dfcb75a80..35c854bc19 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/build.gradle.kts @@ -12,7 +12,7 @@ kotlin { androidLibrary { namespace = "me.sample.feature" compileSdk = 35 - minSdk = 24 + minSdk = 23 androidResources.enable = true } diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/build.gradle.kts index eab03ddeff..c49f2fd997 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/androidApp/build.gradle.kts @@ -4,7 +4,7 @@ plugins { android { namespace = "org.company.app.androidApp" - compileSdk = 36 + compileSdk = 35 defaultConfig { minSdk = 23 diff --git a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/build.gradle.kts index 189e82fae5..1e41253d05 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/fullTargetsAppWithResources/sharedUI/build.gradle.kts @@ -12,7 +12,7 @@ plugins { kotlin { androidLibrary { namespace = "org.company.app" - compileSdk = 36 + compileSdk = 35 minSdk = 23 androidResources.enable = true } diff --git a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/appModule/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/appModule/build.gradle.kts index 0e9b4904b7..5362de6c91 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/appModule/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/appModule/build.gradle.kts @@ -11,7 +11,7 @@ kotlin { androidLibrary { compileSdk = 35 namespace = "me.sample.app" - minSdk = 24 + minSdk = 23 androidResources.enable = true } jvm() diff --git a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/cmplib/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/cmplib/build.gradle.kts index 2fa9aa60d6..c31c370fa3 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/cmplib/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/cmplib/build.gradle.kts @@ -20,7 +20,7 @@ kotlin { androidLibrary { compileSdk = 35 namespace = "me.sample.library" - minSdk = 24 + minSdk = 23 androidResources.enable = true } jvm() diff --git a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/featureModule/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/featureModule/build.gradle.kts index 36726a09ca..897a95c76e 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/featureModule/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/kmpResourcePublication/featureModule/build.gradle.kts @@ -9,7 +9,7 @@ kotlin { androidLibrary { compileSdk = 35 namespace = "me.sample.feature" - minSdk = 24 + minSdk = 23 androidResources.enable = true } jvm() From 372d93ca62cec549c031ae3c952d7be789e1e802 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Thu, 30 Oct 2025 15:24:10 +0100 Subject: [PATCH 09/14] Update AGP test version to 9.0.0-alpha13; adjust exclusions accordingly. --- .github/workflows/gradle-plugin.yml | 2 +- gradle-plugins/gradle.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/gradle-plugin.yml b/.github/workflows/gradle-plugin.yml index d8bce6fa8f..6097591bd8 100644 --- a/.github/workflows/gradle-plugin.yml +++ b/.github/workflows/gradle-plugin.yml @@ -18,7 +18,7 @@ jobs: matrix: os: ['ubuntu-24.04', 'macos-15-xlarge', 'windows-2022'] gradle: ['8.13', '9.2.0'] - agp: ['8.11.2', '8.12.3', '9.0.0-alpha11'] + agp: ['8.11.2', '8.12.3', '9.0.0-alpha13'] runs-on: ${{ matrix.os }} steps: - name: Checkout Repository diff --git a/gradle-plugins/gradle.properties b/gradle-plugins/gradle.properties index 87121cf0b5..63ea59c815 100644 --- a/gradle-plugins/gradle.properties +++ b/gradle-plugins/gradle.properties @@ -17,10 +17,10 @@ compose.tests.kotlin.version=2.2.20 # and Publish.Subtasks.buildTypes.gradle.GradlePluginTestKt#gradleVersions in the TC config # minimal and current gradle version compose.tests.gradle.versions=8.13, 9.2.0 -compose.tests.agp.versions=8.11.2, 8.12.3, 9.0.0-alpha11 +compose.tests.agp.versions=8.11.2, 8.12.3, 9.0.0-alpha13 # gradle and agp versions should be compatible: # https://developer.android.com/build/releases/gradle-plugin#updating-plugin -compose.tests.gradle-agp.exclude=8.13/9.0.0-alpha11 +compose.tests.gradle-agp.exclude=8.13/9.0.0-alpha13 # A version of Gradle plugin, that will be published, # unless overridden by COMPOSE_GRADLE_PLUGIN_VERSION env var. From 2fb118417d9f89dde56a725c4b92cd6dc57db015 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Thu, 30 Oct 2025 15:59:38 +0100 Subject: [PATCH 10/14] Remove explicit `jvmToolchain` configuration from test projects. --- .../src/test/test-projects/application/jvm/build.gradle | 6 ------ .../src/test/test-projects/application/mpp/build.gradle | 3 --- .../featureModule/build.gradle.kts | 1 - .../test/test-projects/misc/oldComposePlugin/build.gradle | 8 -------- 4 files changed, 18 deletions(-) diff --git a/gradle-plugins/compose/src/test/test-projects/application/jvm/build.gradle b/gradle-plugins/compose/src/test/test-projects/application/jvm/build.gradle index 6b93854d0c..94047c0507 100644 --- a/gradle-plugins/compose/src/test/test-projects/application/jvm/build.gradle +++ b/gradle-plugins/compose/src/test/test-projects/application/jvm/build.gradle @@ -11,12 +11,6 @@ dependencies { implementation compose.desktop.currentOs } -kotlin { - jvmToolchain { - languageVersion.set(JavaLanguageVersion.of(11)) - } -} - compose.desktop { application { mainClass = "MainKt" diff --git a/gradle-plugins/compose/src/test/test-projects/application/mpp/build.gradle b/gradle-plugins/compose/src/test/test-projects/application/mpp/build.gradle index b9c7b2bf3d..c2cd2dc668 100644 --- a/gradle-plugins/compose/src/test/test-projects/application/mpp/build.gradle +++ b/gradle-plugins/compose/src/test/test-projects/application/mpp/build.gradle @@ -26,9 +26,6 @@ kotlin { } } } - jvmToolchain { - languageVersion.set(JavaLanguageVersion.of(11)) - } } compose.desktop { diff --git a/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/build.gradle.kts b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/build.gradle.kts index 35c854bc19..74d23ce018 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/build.gradle.kts +++ b/gradle-plugins/compose/src/test/test-projects/misc/androidAppWithResources/featureModule/build.gradle.kts @@ -6,7 +6,6 @@ plugins { } kotlin { - jvmToolchain(17) jvm() androidLibrary { diff --git a/gradle-plugins/compose/src/test/test-projects/misc/oldComposePlugin/build.gradle b/gradle-plugins/compose/src/test/test-projects/misc/oldComposePlugin/build.gradle index 7868890b2e..a21bca4f38 100644 --- a/gradle-plugins/compose/src/test/test-projects/misc/oldComposePlugin/build.gradle +++ b/gradle-plugins/compose/src/test/test-projects/misc/oldComposePlugin/build.gradle @@ -27,14 +27,6 @@ kotlin { } } -kotlin { - jvm { - jvmToolchain { - languageVersion.set(JavaLanguageVersion.of(11)) - } - } -} - compose.desktop { application { mainClass = "MainKt" From f2e5a7ee8d33403e942c35d1aab03ceecb098a0f Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Fri, 31 Oct 2025 10:42:08 +0100 Subject: [PATCH 11/14] Reintroduce `jvmToolchain` configuration with Java 11 in test projects. --- .../src/test/test-projects/application/jvm/build.gradle | 6 ++++++ .../src/test/test-projects/application/mpp/build.gradle | 3 +++ 2 files changed, 9 insertions(+) diff --git a/gradle-plugins/compose/src/test/test-projects/application/jvm/build.gradle b/gradle-plugins/compose/src/test/test-projects/application/jvm/build.gradle index 94047c0507..6b93854d0c 100644 --- a/gradle-plugins/compose/src/test/test-projects/application/jvm/build.gradle +++ b/gradle-plugins/compose/src/test/test-projects/application/jvm/build.gradle @@ -11,6 +11,12 @@ dependencies { implementation compose.desktop.currentOs } +kotlin { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } +} + compose.desktop { application { mainClass = "MainKt" diff --git a/gradle-plugins/compose/src/test/test-projects/application/mpp/build.gradle b/gradle-plugins/compose/src/test/test-projects/application/mpp/build.gradle index c2cd2dc668..b9c7b2bf3d 100644 --- a/gradle-plugins/compose/src/test/test-projects/application/mpp/build.gradle +++ b/gradle-plugins/compose/src/test/test-projects/application/mpp/build.gradle @@ -26,6 +26,9 @@ kotlin { } } } + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } } compose.desktop { From e036ee325c289c37668b9d57e573d2469e036642 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Fri, 31 Oct 2025 11:53:36 +0100 Subject: [PATCH 12/14] Add conditional check in `ResourcesTest` for Windows+Gradle 9.0.0 to skip Android-specific validation. --- .../test/tests/integration/ResourcesTest.kt | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) 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 8bd3d41a3c..603cf3cef4 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 @@ -400,21 +400,25 @@ class ResourcesTest : GradlePluginTestBase() { .filter { !it.isDirectory && !it.isHidden } .getConvertedResources(commonResourcesDir, repackDir) - gradle(":androidApp:assemble").checks { - check.taskSuccessful(":sharedUI:copyAndroidMainComposeResourcesToAndroidAssets") - - listOf( - "androidApp/build/outputs/apk/demo/debug/androidApp-demo-debug.apk", - "androidApp/build/outputs/apk/full/debug/androidApp-full-debug.apk", - "androidApp/build/outputs/apk/demo/release/androidApp-demo-release.apk", - "androidApp/build/outputs/apk/full/release/androidApp-full-release.apk" - ).forEach { path -> - val apk = file(path) - checkResourcesZip(apk, commonResourcesFiles, true) - assertEquals( - "android", - readFileInZip(apk, "assets/$repackDir/files/platform.txt").decodeToString() - ) + //FIXME delete the filter when https://issuetracker.google.com/456657404 is fixed + val skipAndroidCheck = currentOS == OS.Windows && defaultTestEnvironment.gradleVersion.contains("9.0.0") + if (!skipAndroidCheck) { + gradle(":androidApp:assemble").checks { + check.taskSuccessful(":sharedUI:copyAndroidMainComposeResourcesToAndroidAssets") + + listOf( + "androidApp/build/outputs/apk/demo/debug/androidApp-demo-debug.apk", + "androidApp/build/outputs/apk/full/debug/androidApp-full-debug.apk", + "androidApp/build/outputs/apk/demo/release/androidApp-demo-release.apk", + "androidApp/build/outputs/apk/full/release/androidApp-full-release.apk" + ).forEach { path -> + val apk = file(path) + checkResourcesZip(apk, commonResourcesFiles, true) + assertEquals( + "android", + readFileInZip(apk, "assets/$repackDir/files/platform.txt").decodeToString() + ) + } } } From e18b3701655337d2d4354de43bd7e2bd111b3c53 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Fri, 31 Oct 2025 12:12:38 +0100 Subject: [PATCH 13/14] Update `isMultiplatformAndroidTarget` to use `KotlinMultiplatformAndroidLibraryTarget`; re-enable specific `ResourcesTest` assertion. --- .../compose/resources/MultimoduleResources.kt | 4 ++-- .../compose/test/tests/integration/ResourcesTest.kt | 11 +++++++---- 2 files changed, 9 insertions(+), 6 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 b34fc9accc..d8acd6e026 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,6 +1,6 @@ package org.jetbrains.compose.resources -import com.android.build.api.dsl.KotlinMultiplatformAndroidTarget +import com.android.build.api.dsl.KotlinMultiplatformAndroidLibraryTarget import org.gradle.api.Project import org.gradle.api.provider.Provider import org.gradle.api.tasks.SourceSet @@ -107,7 +107,7 @@ private fun KotlinTarget.skipResourcesConfiguration(): Boolean = when { @Suppress("UnstableApiUsage") private fun KotlinTarget.isMultiplatformAndroidTarget(): Boolean = try { - this is KotlinMultiplatformAndroidTarget + this is KotlinMultiplatformAndroidLibraryTarget } catch (e: NoClassDefFoundError) { false } 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 603cf3cef4..e1ea15786d 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 @@ -24,6 +24,7 @@ import kotlin.io.path.relativeTo import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertNotNull +import kotlin.test.assertNull import kotlin.test.assertTrue class ResourcesTest : GradlePluginTestBase() { @@ -365,7 +366,7 @@ class ResourcesTest : GradlePluginTestBase() { println("check '$res' file") if (isAndroid) { //android resources should be only in assets - // assertNull(zip.getEntry(res), "file = '$res'") FIXME uncomment when https://issuetracker.google.com/456114370 is fixed + assertNull(zip.getEntry(res), "file = '$res'") assertNotNull(zip.getEntry("assets/$res"), "file = 'assets/$res'") } else { assertNotNull(zip.getEntry(res), "file = '$res'") @@ -452,19 +453,21 @@ class ResourcesTest : GradlePluginTestBase() { } - if(currentOS == OS.MacOS) { + if (currentOS == OS.MacOS) { gradle(":sharedUI:assembleSharedUIDebugXCFramework").checks { check.taskSuccessful(":sharedUI:iosArm64AggregateResources") check.taskSuccessful(":sharedUI:iosSimulatorArm64AggregateResources") check.taskSuccessful(":sharedUI:iosX64AggregateResources") - val iosDeviceFramework = file("sharedUI/build/XCFrameworks/debug/SharedUI.xcframework/ios-arm64/SharedUI.framework") + val iosDeviceFramework = + file("sharedUI/build/XCFrameworks/debug/SharedUI.xcframework/ios-arm64/SharedUI.framework") commonResourcesFiles.forEach { res -> assertTrue(iosDeviceFramework.resolve(res).exists()) } assertEquals("ios", iosDeviceFramework.resolve("$repackDir/files/platform.txt").readText()) - val iosSimFramework = file("sharedUI/build/XCFrameworks/debug/SharedUI.xcframework/ios-arm64_x86_64-simulator/SharedUI.framework") + val iosSimFramework = + file("sharedUI/build/XCFrameworks/debug/SharedUI.xcframework/ios-arm64_x86_64-simulator/SharedUI.framework") commonResourcesFiles.forEach { res -> assertTrue(iosSimFramework.resolve(res).exists()) } From a12196cee07da84ba8bd851e845cdfe01b963826 Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Fri, 31 Oct 2025 14:15:49 +0100 Subject: [PATCH 14/14] Skip `testAndroidAppWithResources` for Windows with Gradle 9.0.0; add FIXME for tracking. --- .../jetbrains/compose/test/tests/integration/ResourcesTest.kt | 4 ++++ 1 file changed, 4 insertions(+) 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 e1ea15786d..49d582e241 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 @@ -325,6 +325,10 @@ class ResourcesTest : GradlePluginTestBase() { @Test fun testAndroidAppWithResources() { + //FIXME delete the filter when https://issuetracker.google.com/456657404 is fixed + Assumptions.assumeFalse { + currentOS == OS.Windows && defaultTestEnvironment.gradleVersion.contains("9.0.0") + } with(testProject("misc/androidAppWithResources", defaultTestEnvironment)) { gradle(":appModule:assembleDebug").checks { check.logContains("Configure compose resources with KotlinMultiplatformAndroidComponentsExtension")