Skip to content

Android startup crash in 11.3.1 on armeabi-v7a / older devices: UnsatisfiedLinkError "unknown reloc type 17" #445

@rostyslav-prokopenko-liven

Description

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

  1. Is 11.3.1 known to have an armeabi-v7a / older Android compatibility issue?
  2. Is this related to TLS relocations or linker compatibility on older Android devices?
  3. Is there a fixed version we should upgrade to?

If helpful, I can provide more device examples or additional stack traces.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions