部分報錯信息如下:
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 不能訪問到該庫
經(jīng)過排查發(fā)現(xiàn),是app打包的libNlscanHostDecodeJni.so其實在系統(tǒng)(/system/lib64)是已經(jīng)存在的,app再次引入該庫所在的命名空間是訪問不了/system/lib64下的庫的,除非是該庫配置了為公開庫(具體可以在/etc/public.library.txt中配置,這是android高版本之后的一個機(jī)制)
最后是打包的時候不把so庫打包進(jìn)去,直接使用系統(tǒng)中的庫(應(yīng)該是系統(tǒng)中對native庫也是做了簽名或者權(quán)限之類的訪問規(guī)則)