Verwenden von NDK mit STL im Android Studio gradle Projekt

Ich habe Probleme mit der Verknüpfung von stlport in das gradle Projekt in Android Studio.

Eclipse Android-Projekt mit NDK migriert in Android Studio.

Das Projekt verwendet STL und ich habe android.mk Datei mit Inhalt

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := MyProject LOCAL_SRC_FILES := jniapi.cpp renderer.cpp LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM -ljnigraphics include $(BUILD_SHARED_LIBRARY) 

Es scheint gradle zu ignorieren. MB-Datei, und ich fügte den folgenden Code in build.gradle Datei:

 ndk { moduleName "MyProject" stl "stlport_shared" ldLibs "log", "EGL", "android", "jnigraphics", "GLESv1_CM" //No equivalent for the "include $(BUILD_SHARED_LIBRARY)" here } 

Nachdem dieses gradle Gebäude erfolgreich wurde, aber das Ausführen der Anwendung auf Gerät verursacht einen Fehler:

 27446-27446/com.example.test E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libstlport_shared.so" needed by "libMyProject.so"; caused by load_library(linker.cpp:745): library "libstlport_shared.so" not found 

  • Verknüpfen von STL in eine eigenständige Android NDK ausführbare Datei
  • Android NDK STL c ++ _ geteilt mit LIBCXX_FORCE_REBUILD Ergebnisse in std :: stringstream NOP
  • Was ist der Unterschied zwischen gnustl und stlport in android ndk Entwicklung?
  • Warum verhalten sich native Threads anders, wenn App im Hintergrund ist?
  • Mit dem STL mit Android NDK C ++
  • Kann nicht C ++ - Header wie Vektor in Android NDK enthalten
  • C ++ 11 cmath funktioniert nicht im std namespace für android NDK w / gcc-4.8 oder clang 3.4
  • Kompilieren von STXXL unter Android NDK r8b
  • 3 Solutions collect form web for “Verwenden von NDK mit STL im Android Studio gradle Projekt”

    Sie müssen die stlport geteilte Bibliothek manuell in Ihren Java-Code laden, wenn Sie die freigegebene Variante verwenden. Wenn Sie die freigegebene Variante nicht benötigen, geben Sie stattdessen stlport_static an:

     ndk { moduleName "MyProject" stl "stlport_static" ldLibs "log", "EGL", "android", "jnigraphics", "GLESv1_CM" //No equivalent for the "include $(BUILD_SHARED_LIBRARY)" here } 

    Füge diese Ziellink-Bibliotheken in der CMake.txt-Datei hinzu.

     target_link_libraries( # Specifies the target library. livecamera android jnigraphics #add target libraries # Links the target library to the log library # included in the NDK. ${log-lib} ) 

    Für mich gearbeitet

    Ich denke, der neuere Weg, dies zu tun ist, APP_STL in Ihrem Application.mk zu verwenden, so etwas wie dieses:

     APP_STL := c++_shared APP_ABI := armeabi-v7a NDK_TOOLCHAIN_VERSION := clang 

    Siehe hierzu die offizielle Dokumentation: https://developer.android.com/ndk/guides/application_mk.html

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.