Есть ли способ не включать файл .so, если я использую созданную ndk lib?

Я создал Android-библиотеку, которая использует NDK ArCore

https://developers.google.com/ar/develop/c/enable-arcore

Затем я собрал библиотеку и получил .aar файл. Затем я создал новый образец проекта и включил этот .aar файл как модуль (импорт .JAR / .AAR пакет) и связал его как зависимость, так что все работает нормально.

Проблема в том, что когда я пытаюсь вызвать метод, использующий ArCore, я получаю такую ​​ошибку

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.ar, PID: 7822
    java.lang.UnsatisfiedLinkError: dlopen failed: library "libarcore_sdk_c.so" not found
        at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
        at java.lang.System.loadLibrary(System.java:1669)
        at com..libtetplayer.JniInterface.<clinit>(JniInterface.java:32)
        at com..libtetplayer.JniInterface.createNativeApplication(Native Method)
        at com.example.ar.MainActivity.onCreate(MainActivity.kt:20)
        at android.app.Activity.performCreate(Activity.java:7326)
        at android.app.Activity.performCreate(Activity.java:7317)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3235)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:6990)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)

Чтобы исправить это: после того, как я построил свою библиотеку, в каталоге сборки есть несколько автоматически сгенерированных файлов, там я нашел каталог arcore-native и четыре каталога

введите здесь описание изображения

Я просто переместил этот источник в свой примерный проект в директорию main, и теперь он полностью работает.

Вопрос: есть ли способ не включать эти каталоги с .so файлами в проект при реализации библиотеки? Может мне нужно как-то напрямую включить их в lib?

P.S. Потому что каждый раз, когда бывает сложно попросить пользователя, который хочет реализовать мою библиотеку, также включить несколько каталогов с .so файлами ...


person Aleksey Timoshchenko    schedule 20.11.2019    source источник


Ответы (1)


Вы можете поместить .so файлы из arcore-native в свой .aar файл, и они будут доставлены вместе с вашей библиотекой.

person Alex Cohn    schedule 20.11.2019
comment
Звучит правильно, но теперь AS говорит, что у него более одного файла .so ... Я разместил еще один вопрос об этом stackoverflow.com/questions/58969292 / - person Aleksey Timoshchenko; 21.11.2019
comment
Я смущен. Файл .aar предназначен для поставляемой вами библиотеки. Эта библиотека больше не нуждается в com.google.ar:core зависимости, внутри нее должен быть включен ARCore. - person Alex Cohn; 21.11.2019