我正在检查Android 5.0中selinux(SE Linux)的许可和强制机制。 我已将.so文件放在/data/data/packageName/files/libtestcalc.so中。
当设备处于许可模式时, System.load( “/数据/数据/包/文件/ libtestcalc.so”); - 工作正常,我可以访问.so文件的方法,没有任何例外。
同样,System.load(“/ data / data / packageName / files / libtestcalc.so”);当设备处于执行模式时,我无法正常工作,我的异常情况如下。
java.lang.UnsatisfiedLinkError:dlopen失败:无法映射“/data/data/packageName/files/libtestcalc.so”段1:权限被拒绝
我猜两种模式都会出现相同的呼叫流程。 我的意思是System.load(..) - > Runtime.getRuntime()。load(..) - > Runtime.getRuntime(..)。doload(..) - > Runtime.getRuntime()。nativeLoad( ..)
@ Runtime.java-> doLoad(..)文档提到为 “nativeLoad应该同步,所以只有一个LD_LIBRARY_PATH在使用,无论......”
何时更新LD_LIBRARY_PATH?
android如何通过模式区分加载文件? 想知道从“/ data / data / packageName / files /".
加载.so文件的其他方法答案 0 :(得分:0)
将文件复制到您选择的应用程序专用内部存储文件夹下您选择的任何位置,确保将其标记为只读且可执行(不可写,尤其是其他任何人!)。这是唯一一个可以由允许执行的应用程序写入的位置树。
您可以通过在初始化的Activity或Service Context上调用getFilesDir()来确定私有文件夹位置。
这里有许多问题证明了用Java进行文件复制的机制。