Android loadLibrary - dlopen failed
先前具有系統權限下,使用System.loadLibrary可正常的讀取到system/lib底下的.so檔
但在Android 8 (SDK 26, M) 卻得到以下訊息而Crash
java.lang.UnsatisfiedLinkError: dlopen failed: library “/system/lib/libcutils.so”
is not accessible for the namespace “classloader-namespace”
原因是Anroid 7 (SDK 24, N) 避免載入非公開API時,會使得APP Crash。
網路上解決方式有以下幾種
修改system/etc/public.libraries.txt
將非官方library的名稱libgstreamer.so加入到public.libraries.txt中。
但此方式在我開發的機器上會失敗而無法進入到Android 桌面,
或許是需要燒image的方式才能成功。
指定讀取 vendor lib
可將第三方library放到vendor/lib中,此方法試過是可行的。
device manufactures 機制
在Android 9提供了device manufactures 機制,依然可將library放到system/lib之中,但是必須將library命名為 lib*COMPANYNAME.so 如 libgstreamer.qisda.so
並在system/etc/中增加 public.libraries-COMPANYNAME.txt
由於手上無Android 9 的機器,此方式還未測試過。
Reference
Android loadLibrary - dlopen failed
https://nickcarter9.github.io/2019/03/27/2019/2019_03_27-system_loadlibrary_linkerror/