Hi, I just bumped from Compose `1.11.0-alpha02` to...
# compose-desktop
d
Hi, I just bumped from Compose
1.11.0-alpha02
to
1.11.0-beta01
and I now have to problems that I don't know how to remediate: • a "Skiko dependencies' versions are incompatible" is now appearing in my build • ``java.lang.UnsatisfiedLinkError`` in `libskiko-linux-arm64.so`:
libEGL.so.1: cannot open shared object file: No such file or directory
Cf. thread for details.
[I know I am on beta versions...] First problem:
Copy code
> Task :apps:desktop-app:checkJvmMainComposeLibrariesCompatibility
w: Skiko dependencies' versions are incompatible.
    io.coil-kt.coil3:coil-core-jvm:3.3.0
    \--- org.jetbrains.skiko:skiko:0.9.4.2 -> 0.144.4

This may lead to compilation errors or unexpected behavior at runtime.
Such version mismatch might be caused by dependency constraints in one of the included libraries.
You can inspect resulted dependencies tree via `./gradlew :apps:desktop-app:dependencies  --configuration jvmRuntimeClasspath`.
See more details in Gradle documentation: <https://docs.gradle.org/current/userguide/viewing_debugging_dependencies.html#sec:listing-dependencies>

Note: Skiko is considered implementation detail in Compose Multiplatform and might be incompatible across versions.
Please align Skiko dependencies to the same version. If possible, avoid direct Skiko references and use Compose APIs instead.
And indeed, Compose 1.11.0-beta01 depends on
org.jetbrains.skiko:skiko:0.144.4
. And Coil 3.3.0 depends on
org.jetbrains.skiko:skiko:0.9.4.2
. I don't understand such a version gap. Am I reading that correctly?
Second problem, during Linux Arm64 build on GitHub Action:
Copy code
java.lang.ExceptionInInitializerError
	at androidx.compose.ui.test.SkikoComposeUiTest.<init>(ComposeUiTest.skiko.kt:240)
	at androidx.compose.ui.test.SkikoComposeUiTest.<init>(ComposeUiTest.skiko.kt)
	at androidx.compose.ui.test.SkikoComposeUiTest.<init>(ComposeUiTest.skiko.kt:164)
	at androidx.compose.ui.test.SkikoComposeUiTest.<init>(ComposeUiTest.skiko.kt:204)
	at androidx.compose.ui.test.SkikoComposeUiTest.<init>(ComposeUiTest.skiko.kt)
	at androidx.compose.ui.test.ComposeUiTest_skikoKt.runSkikoComposeUiTest-uV_hrag(ComposeUiTest.skiko.kt:106)
	at androidx.compose.ui.test.ComposeUiTest_skikoKt.runSkikoComposeUiTest-uV_hrag$default(ComposeUiTest.skiko.kt:97)
	at androidx.compose.ui.test.ComposeUiTest_skikoKt.runComposeUiTest-exY8QGI(ComposeUiTest.skiko.kt:87)
	at androidx.compose.ui.test.ComposeUiTest_skikoKt.runComposeUiTest-exY8QGI$default(ComposeUiTest.skiko.kt:81)
	at io.github.ptitjes.konvo.plugin.core.ui.compose.toolkit.text.RelativeTimestampFormatterTests.formatTimestampRelative returns minutes and hours for recent times(RelativeTimestampFormatterTests.kt:10)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.jetbrains.skiko.LibraryLoadException: Failed to loade library /home/runner/.skiko/skiko-linux-arm64-ac94257825b15ad711b343550c1e7e74df572893fc190fa6bd5e93c88fd5f2fb/libskiko-linux-arm64.so
	at org.jetbrains.skiko.LibraryLoader.loadLibraryOrCopy(LibraryLoader.kt:49)
	at org.jetbrains.skiko.LibraryLoader.findAndLoadLibrary(LibraryLoader.kt:160)
	at org.jetbrains.skiko.LibraryLoader.loadOnce(LibraryLoader.kt:109)
	at org.jetbrains.skiko.Library.load(Library.kt:29)
	at org.jetbrains.skia.impl.Library$Companion.staticLoad(Library.jvm.kt:9)
	at org.jetbrains.skia.Surface.<clinit>(Surface.kt:538)
	... 13 more
Caused by: java.lang.UnsatisfiedLinkError: /home/runner/.skiko/skiko-linux-arm64-ac94257825b15ad711b343550c1e7e74df572893fc190fa6bd5e93c88fd5f2fb/libskiko-linux-arm64.so: libEGL.so.1: cannot open shared object file: No such file or directory
	at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
	at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:331)
	at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:197)
	at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:139)
	at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2418)
	at java.base/java.lang.Runtime.load0(Runtime.java:852)
	at java.base/java.lang.System.load(System.java:2025)
	at org.jetbrains.skiko.LibraryLoader.loadLibraryOrCopy(LibraryLoader.kt:38)
	... 18 more
The full build log is here: https://github.com/ptitjes/konvo/actions/runs/23951954887/job/69861406063
So, after some more investigation, it seems the versioning scheme of Skiko changed recently going from
0.9.47
to
0.144.4
(cf. Sonatype Central). Coil 3.4.0 still uses Compose 1.10's versions of Skiko. So I did some dirty dependency substitution for now. Hoping a 3.5.0 comes soon with support for Compose 1.11.
The second problem was only libEGL missing from the Ubuntu 24.04 arm64 runner, so absolutely nothing to do with Kotlin or Compose. Sorry for the noise.
i
Hi. Please note that "Skiko dependencies' versions are incompatible" is just a warning, so things might work fine, but it cannot be guaranteed. Context: skiko is a Kotlin wrapper around skia C++ library. skia follows Chrome version scheme and does not maintain strict binary compatibility between versions. So, to make it more clear and visible, next changes were made on our side: • Switching to
0.<skia_version>.*
versioning for easier matching with C++ library version that it wraps • Introducing version check/warning in gradle plugin to provide clear message/steps to debug instead of just random crash that some method is not found anymore
Coil 3.4.0 still uses Compose 1.10's versions of Skiko.
Before 1.11, it's a bit more complicated to match the versions. It's: • Compose 1.11.0-beta01 - Skiko 0.144.4 - skia m144 • Compose 1.10.3 - Skiko 0.9.37.4 - skia m138 • Compose 1.9.3 - Skiko 0.9.22.2 - skia m132 • Compose 1.8.2 - Skiko 0.9.4.2 - skia m132
d
@Ivan Matkov thanks a lot for your detailed explanations. That's very clear to me now. And indeed, everything works as intended despite the warning message. Hopefully a beta version of the next Coil release compatible with Compose 1.11 will make it more safe soon. Thanks again.
❤️ 1