Search code examples
javaandroidc++java-native-interfaceshared-libraries

Error UnsatisfiedLinkError: dlopen failed: library while trying to create a JNI Service


I am trying create a Service that access a JNI shared library, but when it tries to access the lib it returns an exception.

 8746 05-29 05:00:16.259   921   921 E AndroidRuntime: FATAL EXCEPTION: main                                                                                                  │
 8747 05-29 05:00:16.259   921   921 E AndroidRuntime: Process: vendor.alvenan.javanativetestservice, PID: 921                                                                │
 8748 05-29 05:00:16.259   921   921 E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "libjavanativetestservice_jni.so" not found                     │
 8749 05-29 05:00:16.259   921   921 E AndroidRuntime:    at java.lang.Runtime.loadLibrary0(Runtime.java:1077)                                                                │
 8750 05-29 05:00:16.259   921   921 E AndroidRuntime:    at java.lang.Runtime.loadLibrary0(Runtime.java:998)                                                                 │
 8751 05-29 05:00:16.259   921   921 E AndroidRuntime:    at java.lang.System.loadLibrary(System.java:1661)                                                                   │
 8752 05-29 05:00:16.259   921   921 E AndroidRuntime:    at vendor.alvenan.javanativetestservice.JavaNativeTestServiceImpl.<clinit>(JavaNativeTestServiceImpl.java:14)       │
 8753 05-29 05:00:16.259   921   921 E AndroidRuntime:    at vendor.alvenan.javanativetestservice.JavaNativeTestService.onCreate(JavaNativeTestService.java:14)               │
 8754 05-29 05:00:16.259   921   921 E AndroidRuntime:    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1277)                                   │
 8755 05-29 05:00:16.259   921   921 E AndroidRuntime:    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6759)                                       │
 8756 05-29 05:00:16.259   921   921 E AndroidRuntime:    at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)                                      │
 8757 05-29 05:00:16.259   921   921 E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2133)                                             │
 8758 05-29 05:00:16.259   921   921 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:106)                                                             │
 8759 05-29 05:00:16.259   921   921 E AndroidRuntime:    at android.os.Looper.loopOnce(Looper.java:201)                                                                      │
 8760 05-29 05:00:16.259   921   921 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:288)
 8761 05-29 05:00:16.259   921   921 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:7872)
 8762 05-29 05:00:16.259   921   921 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
 8763 05-29 05:00:16.259   921   921 E AndroidRuntime:    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)

I am using the ARPI13 project: https://github.com/snappautomotive/firmware_rpi-local_manifests/tree/arpi-13

The JNI lib seems to be in the right place:

rpi4:/ # cat vendor/etc/public.libraries.txt
libjavanativetestservice_jni.so
rpi4:/ # ls -l vendor/lib64/libjavanativetestservice_jni.so
-rw-r--r-- 1 root root 10952 2023-05-29 15:40 vendor/lib64/libjavanativetestservice_jni.so

The full code is on github: https://github.com/alvenan/aosp_bench/tree/main/bench_test_jni

The device makefile has the following setup:

PRODUCT_PACKAGES += JavaNativeTestService
PRODUCT_COPY_FILES += \
   vendor/alvenan/aosp_bench/bench_test_jni/public.libraries.txt:$(TARGET_COPY_OUT_VENDOR)/etc/public.libraries.txt

Solution

  • Removing vendor: true tag from the shared lib Android.bp fixed the problem