Java 如何设置.so文件的绝对路径?
我正在使用Java 如何设置.so文件的绝对路径?,java,android,java-native-interface,loadlibrary,Java,Android,Java Native Interface,Loadlibrary,我正在使用System.loadLibrary(“xyz”)加载JNI库,它工作正常。但问题是,当使用java.lang.System.load()加载库时,如果在世界可读位置(如SD卡)指定了动态库的完整路径,则攻击者可以用恶意文件替换或修改原始文件。这可能导致将不受信任的内容加载到Dalvik VM中 因此,可以使用目标库的完全限定路径修复此问题。由于某些原因,我无法成功地提供完全合格的路径 下面是我尝试过但没有运气的事情 System.load ("xyz") System.load (
System.loadLibrary(“xyz”)
加载JNI库,它工作正常。但问题是,当使用java.lang.System.load()
加载库时,如果在世界可读位置(如SD卡)指定了动态库的完整路径,则攻击者可以用恶意文件替换或修改原始文件。这可能导致将不受信任的内容加载到Dalvik VM中
因此,可以使用目标库的完全限定路径修复此问题。由于某些原因,我无法成功地提供完全合格的路径
下面是我尝试过但没有运气的事情
System.load ("xyz")
System.load ("/src/main/jni/lib/xyz")
System.load ("/system/lib/xyz")
谁能告诉我哪里出了问题。您需要在gradle文件中设置'jniLibs.srcDirs' 比如:
main {
...
jniLibs.srcDirs 'lib'
}
我和你有同样的问题。 在java.library.path(位于/data/data/com.xxx.yyy/lib/[abi])中加载lib时,
System.loadLibrary
正常。
但是当从绝对路径加载lib时,我们应该使用System.load
。例如:
System.load("/data/data/com.xxx.yyy/files/xxx/libxyz.so")
确保提供库的全名。我猜在你的情况下,xyz实际上是libxyz。so@mko对它是has.so。这一行应该解决这个问题:System.load(“/some_location/lib/libxyz.so”),假设您有访问权限。“运气不好”不是一个问题描述符。您需要提供准确的错误消息和堆栈跟踪。但是
src
目录在运行时不会出现,并且运行时部署目录也不会与开发系统中的项目位置相同。