Bug report
After upgrading app.rive:rive-android from 10.4.4 to 11.3.1, our Android app started crashing
on startup on a subset of devices, mostly older / 32-bit Android devices.
The crash happens during Rive.init(...), before any screen is shown.
Versions
- Previous working version:
10.4.4
- Crashing version:
11.3.1
Crash
java.lang.UnsatisfiedLinkError: dlopen failed: unknown reloc type 17 @ 0x... (11815)
App code:
Rive.init(this, defaultRenderer = RendererType.Rive)
Relevant stacktrace:
java.lang.UnsatisfiedLinkError: dlopen failed: unknown reloc type 17 @ 0xbe8f93ac (11815)
at <app>.Application.initializeRive(Application.kt:30)
at <app>.Application.onCreate(Application.kt:43)
at app.rive.runtime.kotlin.core.Rive.init(Rive.kt:138)
at app.rive.runtime.kotlin.core.Rive$NativeLoader.loadLibrary(Rive.kt:36)
at app.rive.runtime.kotlin.core.Rive$NativeLoader.loadWithSystemLoader(Rive.kt)
at java.lang.System.loadLibrary(System.java:1669)
Devices / OS versions seen
Most frequent examples from production:
- Samsung SM-J415G
- Samsung SM-A105FN
- Samsung SM-J737U
OS versions:
- Android 9 mostly
- also Android 8.1.0
- a few on Android 10 and 12
One affected event had:
- ABI/splits: armeabi-v7a
- OS: Android 9
What we observed
We compared 10.4.4 and 11.3.1 locally.
In 10.4.4, the native library load path appears to use ReLinker.
In 11.3.1, the load path appears to use System.loadLibrary() on Android SDK >= 23.
We also inspected the packaged armeabi-v7a native lib and noticed that the 11.3.1 binary appears to
include TLS-related sections / symbols such as __tls_get_addr, while 10.4.4 did not show the same
pattern.
This makes it look like a native compatibility regression in the packaged armeabi-v7a library, or a
loader-path regression, rather than an issue with our usage.
Important note
Changing renderer does not seem to help.
The app crashes while loading librive-android.so, before renderer selection matters, so switching
from RendererType.Rive to another renderer would still hit the same native load failure.
Expected behavior
Rive.init(...) should not crash the process on supported Android devices when loading the packaged
native library.
Actual behavior
Rive.init(...) throws UnsatisfiedLinkError and the app terminates during startup.
Questions
- Is 11.3.1 known to have an armeabi-v7a / older Android compatibility issue?
- Is this related to TLS relocations or linker compatibility on older Android devices?
- Is there a fixed version we should upgrade to?
If helpful, I can provide more device examples or additional stack traces.
Bug report
After upgrading
app.rive:rive-androidfrom10.4.4to11.3.1, our Android app started crashingon startup on a subset of devices, mostly older / 32-bit Android devices.
The crash happens during
Rive.init(...), before any screen is shown.Versions
10.4.411.3.1Crash
App code:
Relevant stacktrace:
Devices / OS versions seen
Most frequent examples from production:
OS versions:
One affected event had:
What we observed
We compared 10.4.4 and 11.3.1 locally.
In 10.4.4, the native library load path appears to use ReLinker.
In 11.3.1, the load path appears to use System.loadLibrary() on Android SDK >= 23.
We also inspected the packaged armeabi-v7a native lib and noticed that the 11.3.1 binary appears to
include TLS-related sections / symbols such as __tls_get_addr, while 10.4.4 did not show the same
pattern.
This makes it look like a native compatibility regression in the packaged armeabi-v7a library, or a
loader-path regression, rather than an issue with our usage.
Important note
Changing renderer does not seem to help.
The app crashes while loading librive-android.so, before renderer selection matters, so switching
from RendererType.Rive to another renderer would still hit the same native load failure.
Expected behavior
Rive.init(...) should not crash the process on supported Android devices when loading the packaged
native library.
Actual behavior
Rive.init(...) throws UnsatisfiedLinkError and the app terminates during startup.
Questions
If helpful, I can provide more device examples or additional stack traces.