从Android 7 / Android N上的资产加载.so / JNI

时间:2017-06-12 12:17:28

标签: android java-native-interface android-7.0-nougat

我正在寻找一个使用Assets的System.load()方法加载.so文件的解决方案。

我找到了一个解决方案,我可以读取.so文件格式的AssetManager,将其保存到Context.getFilesDir,然后加载它查看System.load()。

但这仅适用于Android 7。 在Android 7上,我得到了

java.lang.UnsatisfiedLinkError: dlopen failed: library "<AppDir>"
needed or dlopened by "/vendor/lib/libnativeloader.so" is not
accessible for the namespace "classloader-namespace"

实际上我想通过System.loadLibrary加载libcrypto.so,它就像一个魅力,例如在三星设备上,没有嵌入我自己的libcrypto.so。但是对于某些设备,比如华为,我需要包含我自己的libcrypto.so - 这很好,但是在某些三星设备上,它会导致内核崩溃如果我使用自己的libcrypto.so,而设备已打开(打开) Android 6)。

顺便说一下,华为有预先构建的libcrypto.so,但是当我想再加载那个时,我又得到了这个: java.lang.UnsatisfiedLinkError:dlopen failed:library

"/system/lib/libcrypto.so" needed or dlopened by "/vendor/lib/libnativeloader.so" is not accessible for the namespace "classloader-namespace"

我知道Android 7.0有一些关于本机库的新安全功能,通过了指南,但我发现没有什么可以帮助我找到解决方法。

任何帮助都会得到满足。

0 个答案:

没有答案