公司同事在主板(自己的主板)上给我搞了个自定义的so文件,用来调用。结果我去调用的时候,出现了调用不到的问题。问题如下
java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/inteflyserialport.so" needed or dlopened by "/system/lib/libnativeloader.so" is not accessible for the namespace "classloader-namespace"
一开始我还觉得难道是app有问题,于是各种找问题。各种看代码,同事给我之后也不太管这个,只是觉得之前可以调用了,现在不行应该就是你的问题。没办法,只能用力撸了。带着这个问题,去网络上各种找答案,各种是错。捣鼓了大半天,终于找到答案了。在此记录下,以避免下次再碰壁
原因:当前主板使用的是Android7.0的源代码,生成之后的so库里面的权限都是644的。如下
而你需要调用的so文件如果是644权限,那么就会报上面的错误。一直显示错误。
我们需要的操作:
1.usb连接到Android主板
2.adb remount
adb shell
cd /system/lib 在lib里面找到你想改变权限的so文件。
chmod 744 libtiwolf.so 将其权限更改成744
更改权限后的:
然后重启一下主板
我的问题就解决了
然而,另外一块板也出现同样的问题。这XXX,真尴尬啊。使用上面的方法也不行了。于是换另外的方法是将同事生成的.so文件名复制到/system/lib/public.libraries.txt里面。但是重启的时候查看:
adb shell
cd system/etc
cat public.libraries.txt
发现里面并没有我刚复制进去的.so文件,最终还是只能向同事反映。最后同事将他生成的.so文件写入编译之后,重新烧录程序。生成app,测试,没问题了。
这真的是够折腾的。。。继续努力