记一次native库命名空间引用的问题

部分报错信息如下:

library "/system/lib64/libNlscanCamera.so" ("/system/lib64/libNlscanCamera.so") needed or dlopened by "/data/app/~~efM1mNjqWZAgQVze7nFDdw==/com.kte.pda.scan-G_DHNq5ejn431u27KB22hg==/lib/arm64/libNlscanHostDecodeJni.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="/data/app/~~efM1mNjqWZAgQVze7nFDdw==/com.kte.pda.scan-G_DHNq5ejn431u27KB22hg==/lib/arm64:/data/app/~~efM1mNjqWZAgQVze7nFDdw==/com.kte.pda.scan-G_DHNq5ejn431u27KB22hg==/base.apk!/lib/arm64-v8a", permitted_paths="/data:/mnt/expand:/data/data/com.kte.pda.scan"]


从该报错能得到的信息是:

无法链接到libNlscanCamera.so(该库在/system/lib64路径是存在的),提示是该namespace 不能访问到该库


经过排查发现,是app打包的libNlscanHostDecodeJni.so其实在系统(/system/lib64)是已经存在的,app再次引入该库所在的命名空间是访问不了/system/lib64下的库的,除非是该库配置了为公开库(具体可以在/etc/public.library.txt中配置,这是android高版本之后的一个机制)


最后是打包的时候不把so库打包进去,直接使用系统中的库(应该是系统中对native库也是做了签名或者权限之类的访问规则)

你可能感兴趣的:(记一次native库命名空间引用的问题)