diff --git a/examples/imageviewer/desktopApp/build.gradle.kts b/examples/imageviewer/desktopApp/build.gradle.kts index 3d062b17179..f452548dfee 100755 --- a/examples/imageviewer/desktopApp/build.gradle.kts +++ b/examples/imageviewer/desktopApp/build.gradle.kts @@ -39,5 +39,9 @@ compose.desktop { iconFile.set(iconsRoot.resolve("icon-linux.png")) } } + + buildTypes.release.proguard { + configurationFiles.from(project.file("rules.pro")) + } } } diff --git a/examples/imageviewer/desktopApp/rules.pro b/examples/imageviewer/desktopApp/rules.pro index a01578e9999..61e5d104104 100644 --- a/examples/imageviewer/desktopApp/rules.pro +++ b/examples/imageviewer/desktopApp/rules.pro @@ -2,11 +2,10 @@ -keep class io.ktor.** { *; } -keepclassmembers class io.ktor.** { volatile ; } -keep class io.ktor.client.engine.cio.** { *; } --keep class kotlinx.coroutines.** { *; } -dontwarn kotlinx.atomicfu.** -dontwarn io.netty.** -dontwarn com.typesafe.** -dontwarn org.slf4j.** - -# Obfuscation breaks coroutines/ktor for some reason --dontobfuscate +-dontnote io.ktor.** +-dontnote org.slf4j.** +-dontnote kotlinx.serialization.** diff --git a/examples/issues/desktop/compose-desktop.pro b/examples/issues/desktop/compose-desktop.pro index 6ab65259612..3d8f4ccf252 100644 --- a/examples/issues/desktop/compose-desktop.pro +++ b/examples/issues/desktop/compose-desktop.pro @@ -13,4 +13,7 @@ -dontwarn org.bouncycastle.** -dontwarn org.openjsse.** --keep class org.ocpsoft.prettytime.i18n** \ No newline at end of file +-keep class org.ocpsoft.prettytime.i18n** + +-dontnote okhttp3.** +-keep class okio.Okio__JvmOkioKt { *; } diff --git a/examples/nav_cupcake/composeApp/build.gradle.kts b/examples/nav_cupcake/composeApp/build.gradle.kts index 66022174d4e..6d806200907 100644 --- a/examples/nav_cupcake/composeApp/build.gradle.kts +++ b/examples/nav_cupcake/composeApp/build.gradle.kts @@ -141,6 +141,10 @@ compose.desktop { packageName = "org.jetbrains.nav_cupcake" packageVersion = "1.0.0" } + + buildTypes.release.proguard { + configurationFiles.from(project.file("rules.pro")) + } } } diff --git a/examples/nav_cupcake/composeApp/rules.pro b/examples/nav_cupcake/composeApp/rules.pro new file mode 100644 index 00000000000..c3e63c934cd --- /dev/null +++ b/examples/nav_cupcake/composeApp/rules.pro @@ -0,0 +1 @@ +-keep enum org.jetbrains.nav_cupcake.** { *; } 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 a3459d40d5c..6469df1efe8 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 @@ -12,7 +12,7 @@ import org.jetbrains.compose.internal.utils.notNullProperty import org.jetbrains.compose.internal.utils.nullableProperty import javax.inject.Inject -private const val DEFAULT_PROGUARD_VERSION = "7.2.2" +private const val DEFAULT_PROGUARD_VERSION = "7.7.0" abstract class ProguardSettings @Inject constructor( objects: ObjectFactory, diff --git a/gradle-plugins/compose/src/main/resources/default-compose-desktop-rules.pro b/gradle-plugins/compose/src/main/resources/default-compose-desktop-rules.pro index 7e470733d3a..f4b0967dc3d 100644 --- a/gradle-plugins/compose/src/main/resources/default-compose-desktop-rules.pro +++ b/gradle-plugins/compose/src/main/resources/default-compose-desktop-rules.pro @@ -29,6 +29,15 @@ -dontwarn java.lang.ClassValue -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement +# https://youtrack.jetbrains.com/issue/CMP-3818/Update-ProGuard-to-version-7.4-to-support-new-Java-versions +# https://youtrack.jetbrains.com/issue/CMP-7577/Desktop-runRelease-crash-when-upgrade-to-CMP-1.8.0-alpha02 +-keep,allowshrinking,allowobfuscation class kotlinx.coroutines.flow.FlowKt { *; } +-keep,allowshrinking,allowobfuscation class kotlinx.coroutines.Job { *; } +-dontnote kotlinx.coroutines.** + +# org.jetbrains.kotlinx:kotlinx-coroutines-swing +-keep class kotlinx.coroutines.swing.SwingDispatcherFactory + # Kotlinx Datetime # Material3 depends on it, and it references `kotlinx.serialization`, which is optional # Copied from https://github.com/Kotlin/kotlinx-datetime/blob/v0.6.2/core/jvm/resources/META-INF/proguard/datetime.pro @@ -56,4 +65,6 @@ -dontwarn org.graalvm.compiler.core.aarch64.AArch64NodeMatchRules_MatchStatementSet* # Androidx +-keep,allowshrinking,allowobfuscation class androidx.compose.runtime.SnapshotStateKt__DerivedStateKt { *; } +-keep class androidx.compose.material3.SliderDefaults { *; } -dontnote androidx.**