我有一个.so文件,我打包成一个obb扩展。它大约20兆字节。
我试图使用
parameter (m=10**5,nchar=2000,ncols=110)
character (LEN=*), PARAMETER :: FORM = "(A)"
character(LEN=:),DIMENSION(:),allocatable :: data
integer j
character(LEN=100000) :: temp
* determine the length of the data
nlines = 0
j = 0
do while (ios == 0)
read(12,FORM,end=10,iostat=ios) temp
if (LEN(TRIM(temp)) .gt. j) THEN
j = LEN(TRIM(temp))
end if
nlines = nlines+1
end do
nlines = nlines+1
10 REWIND(unit = 12)
ALLOCATE (character(LEN=j) :: data(nlines))
* read in the data
do i = 1,nlines
read(12,FORM) data(i)
end do
加载库。但是我得到了错误:
dlopen(" /storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so",RTLD_LAZY)失败:dlopen失败:无法映射" /storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so"第2部分:许可被拒绝
type = 1400 audit(0.0:8):avc:拒绝{execute} for path =" /storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so" dev的="保险丝" ino = 367663176224 scontext = u:r:untrusted_app:s0 tcontext = u:object_r:fuse:s0 tclass = file permissive = 0
所以我意识到我们不允许在那里有可执行文件。
所以我的问题是,
1-哪里应该提取文件才能这样做?
2-我应该拨打什么函数?
谢谢。
答案 0 :(得分:1)
将文件复制到您选择的应用程序专用内部存储文件夹下的任何位置,确保将其标记为只读且可执行(不可写,尤其是其他任何人!)。这是唯一一个可以由允许执行的应用程序写入的位置树。
您可以通过在初始化的活动或服务上下文上调用getFilesDir()
来确定私人文件夹位置。
这里有许多问题证明了用Java进行文件复制的机制。