在Android 31平台,尝试使用第三方应用调用系统SO 库,会报如下的错误
Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib64/XXX.so" needed or dlopened by "/apex/com.android.art/lib64/libnativeloader.so" is not accessible for the namespace "classloader-namespace"
大体原因是,Android N 开始限制 第三方 应用使用非公开的 系统库
临时解决debug 方法:
将你要用的到 XXX.so 加入到 /system/etc/public.libraries.txt
1. adb remount
2: adb pull /system/etc/public.libraries.txt [你要保存的目录]
3:将你要用的到 XXX.so 加入到 /system/etc/public.libraries.txt
4. adb push [public.libraries.txt 所在的路径] /system/etc/
5. adb reboot
参考:
Android 7.0调用第三方库出现加载失败的问题 - 极客分享
第三方app加载系统/system/lib下的库--is not accessible for the namespace - 代码先锋网https://www.codeleading.com/article/67782154448/