以前在Android5.0上直接这样调用是没问题.
s_handle = dlopen("/system/lib/libHWMI.so", RTLD_NOW);
但是项目移植到Android 8.0上就报了如上错误.
说下解决方法,想知道原理的移步:http://jackwish.net/namespace-based-dynamic-linking.html
想看代码的话Android8.0是在: system/core/libnativeloader
其实错误log里面已经提示了,不过会有其它问题.
permitted_paths="/data:/mnt/expand:/data/data/org.ftd.gyn"
放在如上路径下面,虽然dlopen过了,但是报了其他的错误,如"libcutils.so" not found.
/data:/mnt/expand
如上所指的路径在文件system/core/libnativeloader/native_loader.cpp里面,在它的上面一行我们看到了
static constexpr const char* kPublicNativeLibrariesSystemConfigPathFromRoot =
"/etc/public.libraries.txt";
static constexpr const char* kPublicNativeLibrariesVendorConfig =
"/vendor/etc/public.libraries.txt";
系统的public native lib path: /system/etc/public.libraries.txt,
厂商的public native lib path: /vendor/etc/public.libraries.txt, 这个文件可能不存在, 没有的可以新建, 然后预置到vendor/etc/下面
因为我操作的是camera和vendor相关,所以在/vendor/etc/public.libraries.txt里面加入我的libHWMI.so, 然后就不报错了。
————————————————
版权声明:本文为CSDN博主「ngyzqf」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ngyzqf/article/details/78991929