Загрузка родной библиотеки .so из папки obb андроида

У меня есть файл .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 аудит(0.0:8): avc: запрещено {выполнить} для 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- Какой вызов функции я должен сделать?

Спасибо.


person Aaron Azhari    schedule 14.05.2015    source источник


Ответы (1)


Скопируйте файл в любое место по вашему выбору в личной папке внутреннего хранилища вашего приложения, убедитесь, что он помечен как доступный только для чтения и исполняемый (недоступный для записи, особенно кем-либо еще!). Это единственное дерево местоположений, обычно доступных для записи приложением, где разрешены исполняемые файлы.

Вы можете определить расположение личной папки, вызвав getFilesDir() в инициализированном контексте действия или службы.

Здесь есть ряд существующих вопросов, которые демонстрируют механизмы копирования файлов в Java.

person Chris Stratton    schedule 14.05.2015