Ich möchte eine C++ - Bibliothek in meiner Android App verwenden. Ich habe versucht, entlang der hello-libs
Beispiel von Google NDK Proben zu folgen, aber irgendwie funktioniert es nicht.Verwenden einer vorgefertigten freigegebenen Bibliothek in Android Studio (cmake)
Es scheint, dass meine Bibliothek nicht in die APK gepackt ist. Alle Tutorials, die ich gefunden habe, verwenden *.mk
-Dateien, aber ich möchte cmake
verwenden.
Das ist mein CMakeLists.txt:
# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.4.1)
# native lib
add_library(native-lib SHARED
native-lib.cpp)
set(IMPORT_DIR ${CMAKE_SOURCE_DIR}/../jniLibs)
# shared lib
add_library(shared-lib SHARED IMPORTED)
set_target_properties(shared-lib PROPERTIES IMPORTED_LOCATION
${IMPORT_DIR}/dynamic/lib/${ANDROID_ABI}/libLibrary.so)
target_include_directories(native-lib PRIVATE
${IMPORT_DIR}/dynamic/include)
# linking libs
target_link_libraries(native-lib
android
shared-lib
log)
Sobald ich die shared-lib
zusammen mit den anderen verknüpfen, ich folgende Fehlermeldung erhalten, wenn die App läuft:
E/art: dlopen("/data/app/my.package.name-1/lib/arm/libnative-lib.so", RTLD_LAZY) failed: dlopen failed: library "C:/projects/HelloLibs/app/src/main/cpp/../jniLibs/dynamic/lib/armeabi-v7a/libLibrary.so" not foun
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: my.package.name, PID: 29266
java.lang.UnsatisfiedLinkError: dlopen failed: library "C:/projects/HelloLibs/app/src/main/cpp/../jniLibs/dynamic/lib/armeabi-v7a/libLibrary.so" not found
at java.lang.Runtime.loadLibrary(Runtime.java:371)
at java.lang.System.loadLibrary(System.java:988)
at my.package.name.MainActivity.<clinit>(MainActivity.java:11)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1690)
at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2543)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771)
at android.app.ActivityThread.access$900(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1432)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5912)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
Es sieht wie die Bibliothek nicht auf dem Gerät gefunden wird. Sonst sieht es so aus, als wäre der Weg der Bibliothek immer noch der meiner lokalen Maschine.
'dlopen ("/data/app/mein.package.name-1/lib/arm/libnative-lib.so ", RTLD_LAZY)' Haben Sie dieses Verzeichnis erstellt? Sollte es nicht "lib/armeabi-v7a" sein? –
@DanAlbert, nein: Am Gerät sind die gültigen Pfade unter 'lib' ** Arm **, ** Arm64 **, ** x86 **, ** x86_64 **. Frag mich nicht warum. –