ffd64a2e70
Compose Multiplatform 1.11.0 tightened its default ProGuard ruleset so
`proguardReleaseJars` now fails on unresolved references that 1.10.3
tolerated silently. The v1.09.0 release tag-build hit this on every
desktop leg (macOS DMG, Windows MSI, Linux DEB/RPM, Linux AppImage),
which is why only Android APKs and the macOS-arm64 / Linux Amy CLI
bundles made it onto the GitHub release.
Three groups of references were flagged:
- Jackson kotlin-module 2.21.x value-class converters
(`IntValueClassBoxConverter`, `ValueClassKeyDeserializer$*`, …)
invoke `MethodHandle.invokeExact` with polymorphic signatures
ProGuard cannot resolve against the abstract MethodHandle.
- okhttp's optional TLS adapters (`okhttp3.internal.graal.*`,
`BouncyCastle/Conscrypt/OpenJSSEPlatform`) reference classes from
runtime backends that aren't on the desktop classpath; okhttp falls
back to the JDK default in their absence.
- JNA's `com.sun.jna.internal.Cleaner` inner classes touch synthetic
`access$N` accessors that ProGuard's class-member analysis cannot
follow.
Add `desktopApp/compose-rules.pro` with `-dontwarn` rules for each
bucket and wire it through `compose.desktop.application.buildTypes
.release.proguard.configurationFiles`. Verified locally by re-running
`:desktopApp:proguardReleaseJars` (now BUILD SUCCESSFUL) and
`:desktopApp:packageReleaseDeb` (gets past ProGuard; only fails on the
sandbox missing `fakeroot`, which CI installs in the existing
"Install RPM tooling" step).
41 lines
2.1 KiB
Prolog
41 lines
2.1 KiB
Prolog
# ProGuard rules consumed by Compose Multiplatform's `proguardReleaseJars`
|
|
# task (see `compose.desktop.application.buildTypes.release.proguard` wiring
|
|
# in build.gradle.kts).
|
|
#
|
|
# Compose Multiplatform 1.11.0 ships a stricter default ruleset than 1.10.x
|
|
# and now treats unresolved references as fatal. The warnings below come from
|
|
# third-party libraries that have always carried optional code paths; they
|
|
# were silently tolerated on 1.10.3 and broke desktop packaging on 1.11.0.
|
|
|
|
# --- Jackson kotlin-module 2.21.x value-class converters ---------------------
|
|
# Generated converters call `MethodHandle.invokeExact(...)` with polymorphic
|
|
# signatures that ProGuard cannot resolve against the abstract MethodHandle
|
|
# declaration. They are only used reflectively by Jackson when (de)serializing
|
|
# Kotlin `value class` types — safe to suppress.
|
|
-dontwarn com.fasterxml.jackson.module.kotlin.**
|
|
|
|
# --- okhttp optional runtime platforms --------------------------------------
|
|
# okhttp ships TLS adapters for GraalVM native-image, Conscrypt, BouncyCastle,
|
|
# OpenJSSE, and Jetty boot. None of these are on the desktop classpath; okhttp
|
|
# falls back to the JDK default. Suppress the warnings without keeping the
|
|
# unused classes.
|
|
-dontwarn okhttp3.internal.graal.**
|
|
-dontwarn okhttp3.internal.platform.BouncyCastlePlatform
|
|
-dontwarn okhttp3.internal.platform.BouncyCastlePlatform$*
|
|
-dontwarn okhttp3.internal.platform.ConscryptPlatform
|
|
-dontwarn okhttp3.internal.platform.ConscryptPlatform$*
|
|
-dontwarn okhttp3.internal.platform.OpenJSSEPlatform
|
|
-dontwarn okhttp3.internal.platform.OpenJSSEPlatform$*
|
|
-dontwarn org.conscrypt.**
|
|
-dontwarn org.bouncycastle.**
|
|
-dontwarn org.openjsse.**
|
|
-dontwarn org.graalvm.**
|
|
-dontwarn com.oracle.svm.**
|
|
|
|
# --- JNA internal cleaner ---------------------------------------------------
|
|
# `com.sun.jna.internal.Cleaner$CleanerThread` references package-private
|
|
# synthetic accessors (`access$100` …) that ProGuard's class member analysis
|
|
# cannot follow through nested inner classes. The accessors exist at runtime.
|
|
-dontwarn com.sun.jna.internal.Cleaner
|
|
-dontwarn com.sun.jna.internal.Cleaner$*
|