2016-04-04 1 views
0

Je développe une application Android, y compris le code natifjava.lang.UnsatisfiedLinkError: JNI_ERR retour de JNI_OnLoad

D'abord, je compile une bibliothèque préconstruite. Le fichier est Android.mk project_path/JNI/qt-bibliothèque/Android.mk:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := qt5Core-prebuilt 
LOCAL_SRC_FILES := libQt5Core.so 
LOCAL_EXPORT_C_INCLUDES += qtbase/include 

include $(PREBUILT_SHARED_LIBRARY) 

Je compilez ma bibliothèque dont le fichier est Android.mk project_path/JNI/ma bibliothèque/Android. mk:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := myLibrary 
LOCAL_SRC_FILES := com_example_qtsignaux_Library.cpp 
LOCAL_SRC_FILES += Receiver.cpp 
LOCAL_SRC_FILES += Emitter.cpp 
LOCAL_SRC_FILES += moc_Receiver.cpp 
LOCAL_SRC_FILES += moc_Emitter.cpp 

LOCAL_SHARED_LIBRARIES := qt5Core-prebuilt 

LOCAL_C_INCLUDES += ../qt-library/qtbase/include 

LOCAL_LDLIBS := -llog 

include $(BUILD_SHARED_LIBRARY) 

lorsque je compile le dossier JNI en utilisant le script NDK-build, tout fonctionne bien, mais l'erreur suivante lors de l'appel:

static { 
    System.loadLibrary("myLibrary"); 
    } 

java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/com.example.qtsignaux-1/lib/arm/libmyLibrary.so" 

Avis J'unziped le dossier apk et tous: libQt5Core.so d'abord des bibliothèques, libmyLibrary.so et libgnustl_shared.so sont dans le répertoire lib/armeabi/lib et/armeabi-V7A/dossiers

Mes regards fichier Application.mk comme:

APP_ABI += armeabi armeabi-v7a 
APP_STL := gnustl_shared 
APP_CPPFLAGS := -frtti -fexceptions 

Je ne comprends pas vraiment ce que les moyens d'erreur et pourquoi le système essaie de charger une bibliothèque dans le application_package_name/lib/bras dossier. Ce dossier existe-t-il vraiment ou est-ce juste armeabi et armeabi-v7a dans ma situation?

Merci d'avance pour votre aide

+0

L'erreur signifie que votre bibliothèque a défini une fonction 'JNI_OnLoad', et retourne' JNI_ERR' de lui. Si vous n'avez pas défini de fonction 'JNI_OnLoad', vous devez déterminer d'où il provient et pourquoi cela pourrait échouer. – fadden

+0

Salut fadden merci d'avoir répondu. Je ne comprends toujours pas car je n'ai qu'une seule fonction dans ma librairie nommée startTest() – suns9

Répondre

1

J'ai finalement résolu mon problème. Cela était dû au fichier libQt5Core.so

En effet, cette bibliothèque implémente la fonction JNI_OnLoad() dans laquelle elle essaie de charger certaines classes Java contenues dans un fichier jar externe.

Pour résoudre mon problème, j'inclus le fichier jar droit dans le répertoire/libs