2016-07-30 7 views
1

надеюсь, что вы можете мне помочь здесь. Мне удалось создать проект моей родной деятельности и упаковать его. В папке libs у меня есть общая библиотека, которая динамически загружается (dlopen) внутри собственной активности. Я знаю, что пакеты libs копируются в: /data/data/packagename/lib но как я могу получить к нему доступ с помощью dlopen? Это возможно? Я думал, что могу получить доступ к нему, используя только имя локальной папки, например: ./libMySharedLibrary, потому что все они находятся в подпапке APK/libs. Кто-нибудь, как добраться до правильного имени папки или как получить доступ к этим разделяемым библиотекам?Динамическая загрузка общего объекта, который находится в папке APK libs

ответ

0

Динамический компоновщик уже знает о ваших пакетов частных библиотек - просто передать имя файла и все должно быть в порядке:

dlopen("libawesome.so", RTLD_LAZY); 

P.S. Чтобы избежать неожиданностей, вы должны убедиться, что имя вашей библиотеки уникально и не сталкивается с системными (они размещены по адресу /system/lib и /vendor/lib, а также проверьте каталоги lib64 на 64-битных устройствах).

+0

Скажем, мое имя пакета: ** com.android.example **. Когда я это сделаю: ** adb shell run-as com.android.example ** и просмотрите папку **/lib **, я не вижу свою общую библиотеку. Я вижу общую библиотеку в файле .apk, но после ее установки с ** ant installd ** она не находится в этой папке. Предполагается, что общая библиотека должна быть скопирована в эту папку? – yaakuro

+0

Настраиваемые библиотеки @yaakuro AFAIK копируются в ['nativeLibraryDir'] (https://developer.android.com/reference/android/content/pm/ApplicationInfo.html#nativeLibraryDir). И похоже, что это не всегда ваш пакет 'lib'. В любом случае вопрос был не в расположении библиотеки, а в правильном способе загрузить их в собственный код. Вы пытались использовать 'dlopen()' только с базовым именем библиотеки? – Sergio

Смежные вопросы