java.lang.UnsatisfiedLinkError: сбой dlopen: библиотека "/ Users / ..." не найдена - PullRequest
1 голос
/ 10 марта 2019

Я хочу добавить еще одну библиотеку в пример android-ndk hello-libs .

В CMakeLists.txt я добавлю:

# this is from the hello-libs sample code
add_library(lib_gperf SHARED IMPORTED)
set_target_properties(lib_gperf PROPERTIES IMPORTED_LOCATION
        ${distribution_DIR}/gperf/lib/${ANDROID_ABI}/libgperf.so)

########## I add this after the sample code:  ###########
add_library(lib_py SHARED IMPORTED)
set_target_properties(lib_py PROPERTIES IMPORTED_LOCATION
        ${distribution_DIR}/gperf/lib/${ANDROID_ABI}/libpython.so)

И это:

target_link_libraries(
        hello-libs
        android
        lib_gperf

        #### this line ######
        lib_py

        log)

И скопируйте libpython.so в каталог, где находится libgperf.so:

Также скопируйте заголовки python вкаталог include:

enter image description here

Когда я нажимаю кнопку запуска:

java.lang.UnsatisfiedLinkError: dlopen failed: library "/Users/finn/Downloads/hello-libs/app/src/main/cpp/../../../../distribution/gperf/lib/arm64-v8a/libpython.so" not found
        at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
        at java.lang.System.loadLibrary(System.java:1657)
        at com.example.hellolibs.MainActivity.<clinit>(MainActivity.java:36)
        at java.lang.Class.newInstance(Native Method)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1174)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2747)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2931)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1620)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:173)
        at android.app.ActivityThread.main(ActivityThread.java:6698)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782)

Путь существует в моем компьютере, но почемуapk использовать путь моего компьютера, но не путь устройства Android?

И я использую проводник файлов устройства Android, библиотека находится в каталоге:

enter image description here

Тогда как я могу заставить apk использовать правильный путь?

Или я что-то упускаю, чтобы добавить?

1 Ответ

0 голосов
/ 11 марта 2019

Предположим, что путь /Users/finn/Downloads/hello-libs/app/src/main/cpp/../../../../distribution/gperf/lib правильный, тогда вы можете настроить свои библиотеки JNI, как показано ниже:

sourceSets {
    release {
        jniLibs.srcDirs += ["/Users/finn/Downloads/hello-libs/app/src/main/cpp/../../../../distribution/gperf/lib"]
    }
    debug {
        jniLibs.srcDirs += ["/Users/finn/Downloads/hello-libs/app/src/main/cpp/../../../../distribution/gperf/lib"]
    }
}    

Попробуйте изменить /Users/finn/Downloads/hello-libs/app/src/main/cpp/../../../../distribution/gperf/lib, если это не ваш правильный путь к библиотекам jni.

...