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
Removing vendor: true
tag from the shared lib Android.bp fixed the problem