Ошибка неудовлетворительной связи в библиотеке Android с файлом JAR - PullRequest
0 голосов
/ 27 июня 2019

У меня есть один проект, который включает sample app и модуль, который мы назовем sdk, который я создал, и который я в конечном итоге упакую в файл .aar, когда все будет завершено. sample app указывает sdk запустить службу. Эта служба требует использования внешних библиотек, которые были упакованы в файл .jar, включающий файлы .so. Проблема в том, что каждый раз, когда я пытаюсь загрузить библиотеки, я получаю сообщение об ошибке неудовлетворительной ссылки, говорящее о том, что файл .so не существует и, следовательно, не может открыть библиотеку. Я не совсем уверен, если я помещаю все в правильном месте, как говорит ошибка. Если я пропускаю шаг, я надеялся, что кто-нибудь может помочь направить меня в правильном направлении. Ниже я покажу файловую структуру моего проекта, а также то, что я делаю, чтобы попытаться открыть библиотеку.

Структура файла

`- MY PROJECT
     - My Sample App  (com.mine.mysampleapp)
           - build
           - src...etc
     - SDK (separate module) (com.mine.mysamplesdk)
           - build
           - libs
                - my-lib.jar
                     - assets
                          - arm64-v8a
                               - my-lib.so
                          - armeabi-v7a
                               - my-lib.so

Код загрузки библиотеки

System.load(context.getFilesDir() + "/my-lib.so");

Я не понимаю, что файл .so находится внутри sdk, но появляется сообщение об ошибке:

dlopen failed: library "/data/user/0/com.mine.mysampleapp/files/my-lib.so" not found

показывает, что он ищет файл в моем примере приложения.

1 Ответ

0 голосов
/ 27 июня 2019

Если вы пытаетесь упаковать как AAR, в них встроена поддержка библиотек JNI: https://www.codepool.biz/build-so-aar-android-studio.html

Вместо того, чтобы помещать библиотеки в каталог ресурсов и пытаться самостоятельно собрать путь System.load, поместите их в этот каталог, и тогда вы можете просто System.loadLibrary("my-lib") (обратите внимание, что System.loadLibrary на самом деле не позволит вам открыть библиотека без префикса "lib", поэтому вам нужно переименовать вашу библиотеку, чтобы это работало).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...