从 android 的 obb 文件夹加载 .so 本机库
Loading an .so native library from android's obb folder
我有一个打包到 obb 扩展中的 .so 文件。它大约有 20 兆字节。
我正在尝试使用
System.load("/storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so");
加载库。但我收到错误:
dlopen("/storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so", RTLD_LAZY) failed: dlopen failed: couldn't map "/storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so" segment 2: Permission denied
type=1400 audit(0.0:8): avc: denied { execute } for path="/storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so" dev="fuse" ino=367663176224 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:fuse:s0 tclass=file permissive=0
所以我意识到我们不允许在那里有一个可执行文件。
所以我的问题是,
1- 应该在哪里提取文件才能执行此操作?
2- 我应该调用什么函数?
谢谢。
将文件复制到您应用的私人内部存储文件夹下您选择的任何位置,确保它被标记为只读和可执行(不可写,尤其是其他任何人!)。这是唯一通常可由允许可执行文件的应用程序写入的位置树。
您可以通过在已初始化的 Activity 或服务上下文中调用 getFilesDir()
来确定私人文件夹位置。
这里有许多现有问题,它们演示了 Java 中的文件复制机制。
我有一个打包到 obb 扩展中的 .so 文件。它大约有 20 兆字节。
我正在尝试使用
System.load("/storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so");
加载库。但我收到错误:
dlopen("/storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so", RTLD_LAZY) failed: dlopen failed: couldn't map "/storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so" segment 2: Permission denied
type=1400 audit(0.0:8): avc: denied { execute } for path="/storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so" dev="fuse" ino=367663176224 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:fuse:s0 tclass=file permissive=0
所以我意识到我们不允许在那里有一个可执行文件。
所以我的问题是,
1- 应该在哪里提取文件才能执行此操作?
2- 我应该调用什么函数?
谢谢。
将文件复制到您应用的私人内部存储文件夹下您选择的任何位置,确保它被标记为只读和可执行(不可写,尤其是其他任何人!)。这是唯一通常可由允许可执行文件的应用程序写入的位置树。
您可以通过在已初始化的 Activity 或服务上下文中调用 getFilesDir()
来确定私人文件夹位置。
这里有许多现有问题,它们演示了 Java 中的文件复制机制。