【问题标题】:Loading an .so native library from android's obb folder从 android 的 obb 文件夹加载 .so 本机库
【发布时间】:2015-07-26 06:48:39
【问题描述】:

我有一个 .so 文件,我将其打包到 obb 扩展中。它大约是 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) 失败:dlopen 失败:无法映射“/storage/emulated/0/Android/obb /com.mypackage.myapp/libtest.so" 段 2:权限被拒绝

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- 我应该调用什么函数?

谢谢。

【问题讨论】:

    标签: android android-permissions apk-expansion-files android-native-library


    【解决方案1】:

    将文件复制到您应用的私有内部存储文件夹下您选择的任何位置,确保它被标记为只读和可执行(不可写,尤其是其他任何人!)。这是允许可执行文件的应用程序通常可写的唯一位置树。

    您可以通过在初始化的 Activity 或服务上下文上调用 getFilesDir() 来确定私有文件夹位置。

    这里有许多现有问题演示了 Java 中的文件复制机制。

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      相关资源
      最近更新 更多