Skip to content

Android build fails for armeabi-v7a linking voltra_js_renderer: undefined JSI/Hermes symbols on RN 0.86 / Expo 57 #209

Description

@zhenyu-hong

Description

npx expo run:android --device fails while building @use-voltra/android-client@2.1.1 in an Expo / React Native app.

The failing task is :use-voltra_android-client:buildCMakeDebug[armeabi-v7a]. The linker cannot resolve JSI/Hermes symbols while linking libvoltra_js_renderer.so.

This looks ABI-related: the generated CMake/Ninja files link libjsi.so and libhermesvm.so for arm64-v8a, but the generated armeabi-v7a link command only links fbjni and omits both JSI and Hermes libraries.

Environment

  • @use-voltra/android-client: 2.1.1
  • expo: 57.0.2
  • react-native: 0.86.0
  • @sentry/react-native: 8.16.0
  • New Architecture: newArchEnabled=true
  • Hermes: hermesEnabled=true
  • Android compileSdk / targetSdk: 36
  • Android minSdk: 24
  • Gradle: 9.3.1
  • Java: 17.0.19
  • Host OS: macOS 26.5.1, aarch64
  • CMake: 3.22.1
  • NDK seen in linker invocation: 27.0.12077973

Android config:

reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
newArchEnabled=true
hermesEnabled=true

The Expo/Gradle command printed at the end includes -PreactNativeArchitectures=arm64-v8a, but Voltra still attempts to build :use-voltra_android-client:buildCMakeDebug[armeabi-v7a].

Reproduction

  1. Use an Expo 57 / React Native 0.86 app with Hermes and the New Architecture enabled.
  2. Install/configure @use-voltra/android-client@2.1.1.
  3. Run:
npx expo run:android --device

Expected behavior

The Android debug build should succeed for the target ABI, or Voltra should avoid building ABIs where the required React Native / Hermes prefab libraries are unavailable.

Actual behavior

The build fails while linking libvoltra_js_renderer.so for armeabi-v7a:

> Task :use-voltra_android-client:buildCMakeDebug[armeabi-v7a] FAILED
C/C++: ld.lld: error: undefined symbol: facebook::jsi::Value::~Value()
C/C++: >>> referenced by voltra_js_renderer.cpp:89
C/C++: >>> referenced by voltra_js_renderer.cpp:114
C/C++: ld.lld: error: undefined symbol: facebook::jsi::Value::asObject(facebook::jsi::IRuntime&) const &
C/C++: >>> referenced by voltra_js_renderer.cpp:98
C/C++: ld.lld: error: undefined symbol: typeinfo for facebook::jsi::JSError
C/C++: ld.lld: error: undefined symbol: facebook::hermes::makeHermesRuntime(hermes::vm::RuntimeConfig const&)
C/C++: >>> referenced by voltra_js_renderer.cpp:50
C/C++: ld.lld: error: undefined symbol: facebook::jsi::Object::asFunction(facebook::jsi::IRuntime&) &&
C/C++: >>> referenced by voltra_js_renderer.cpp:162
C/C++: ld.lld: error: undefined symbol: facebook::jsi::Value::asString(facebook::jsi::IRuntime&) const &
C/C++: >>> referenced by voltra_js_renderer.cpp:174
C/C++: clang++: error: linker command failed with exit code 1

Additional local evidence

@use-voltra/android-client/android/CMakeLists.txt links these targets:

target_link_libraries(voltra_js_renderer
  android
  log
  ReactAndroid::jsi
  hermes-engine::hermesvm
  fbjni::fbjni
)

For arm64-v8a, the generated build.ninja contains:

LINK_LIBRARIES = -landroid -llog .../libjsi.so .../libhermesvm.so .../libfbjni.so -latomic -lm

For armeabi-v7a, the generated build.ninja contains only:

LINK_LIBRARIES = -landroid -llog .../libfbjni.so -latomic -lm

That matches the unresolved JSI/Hermes symbols.

I searched existing issues for voltra_js_renderer, facebook::jsi, armeabi-v7a, and hermesvm, but did not find an existing report for this build failure.

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