diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/ProguardSettings.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/ProguardSettings.kt index 14a3e27b8f1..45fdb6315b6 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/ProguardSettings.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/ProguardSettings.kt @@ -22,4 +22,5 @@ abstract class ProguardSettings @Inject constructor( val configurationFiles: ConfigurableFileCollection = objects.fileCollection() val isEnabled: Property = objects.notNullProperty(false) val obfuscate: Property = objects.notNullProperty(false) + val optimize: Property = objects.notNullProperty(false) } diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/internal/configureJvmApplication.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/internal/configureJvmApplication.kt index 5f9a541bd1f..36d51946670 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/internal/configureJvmApplication.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/internal/configureJvmApplication.kt @@ -267,6 +267,7 @@ private fun JvmApplicationContext.configureProguardTask( // That's why a task property is follows ProGuard design, // when our DSL does the opposite. dontobfuscate.set(settings.obfuscate.map { !it }) + dontoptimize.set(settings.optimize.map { !it }) dependsOn(unpackDefaultResources) defaultComposeRulesFile.set(unpackDefaultResources.flatMap { it.resources.defaultComposeProguardRules }) diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/tasks/AbstractProguardTask.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/tasks/AbstractProguardTask.kt index dc8b9187cc2..201d5353b53 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/tasks/AbstractProguardTask.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/tasks/AbstractProguardTask.kt @@ -38,6 +38,10 @@ abstract class AbstractProguardTask : AbstractComposeDesktopTask() { @get:Input val dontobfuscate: Property = objects.nullableProperty() + @get:Optional + @get:Input + val dontoptimize: Property = objects.nullableProperty() + // todo: DSL for excluding default rules // also consider pulling coroutines rules from coroutines artifact // https://github.com/Kotlin/kotlinx.coroutines/blob/master/kotlinx-coroutines-core/jvm/resources/META-INF/proguard/coroutines.pro @@ -109,6 +113,10 @@ abstract class AbstractProguardTask : AbstractComposeDesktopTask() { writer.writeLn("-dontobfuscate") } + if (dontoptimize.orNull == true) { + writer.writeLn("-dontoptimize") + } + writer.writeLn(""" -keep public class ${mainClass.get()} { public static void main(java.lang.String[]); diff --git a/gradle-plugins/compose/src/test/test-projects/application/proguard/src/main/kotlin/Main.kt b/gradle-plugins/compose/src/test/test-projects/application/proguard/src/main/kotlin/Main.kt index e7d73f0092f..616a9bdac12 100644 --- a/gradle-plugins/compose/src/test/test-projects/application/proguard/src/main/kotlin/Main.kt +++ b/gradle-plugins/compose/src/test/test-projects/application/proguard/src/main/kotlin/Main.kt @@ -1,3 +1,4 @@ +import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape @@ -25,7 +26,9 @@ object Main { } val image = renderComposeScene(height = 10, width = 10) { - mainShape() + AnimatedVisibility(true) { + mainShape() + } } val encodedImage = image.encodeToData(EncodedImageFormat.PNG) ?: error("Could not encode image as png") workingDir.resolve("main-image.actual.png").writeBytes(encodedImage.bytes) diff --git a/gradle-plugins/gradle.properties b/gradle-plugins/gradle.properties index cb789135212..5b7ee78a207 100644 --- a/gradle-plugins/gradle.properties +++ b/gradle-plugins/gradle.properties @@ -2,7 +2,7 @@ org.gradle.parallel=true kotlin.code.style=official # Default version of Compose Libraries used by Gradle plugin -compose.version=1.4.1 +compose.version=1.5.0-dev1114 # The latest version of Compose Compiler used by Gradle plugin. Used only in tests/CI. compose.tests.compiler.version=1.5.0 # The latest version of Kotlin compatible with compose.tests.compiler.version. Used only in tests/CI. diff --git a/tutorials/Native_distributions_and_local_execution/README.md b/tutorials/Native_distributions_and_local_execution/README.md index 90e3791f9cc..d60be770d80 100755 --- a/tutorials/Native_distributions_and_local_execution/README.md +++ b/tutorials/Native_distributions_and_local_execution/README.md @@ -637,3 +637,14 @@ compose.desktop { } } ``` + +ProGuard's optimization is disabled by default since Compose 1.5. To enable it, set the following property via Gradle DSL: +``` +compose.desktop { + application { + buildTypes.release.proguard { + optimize.set(true) + } + } +} +```