Я разрабатываю приложение для Android, включая собственный код
Сначала я компилирую готовую библиотеку. Файл Android.mk — это project_path/jni/qt-library/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)
Затем я компилирую свою библиотеку, файл Android.mk которой находится в project_path/jni/my-library/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)
Когда я компилирую папку jni с помощью скрипта ndk-build, все работает хорошо, но при вызове возникает следующая ошибка:
static {
System.loadLibrary("myLibrary");
}
java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/com.example.qtsignaux-1/lib/arm/libmyLibrary.so"
Обратите внимание, что я разархивировал папку apk и все библиотеки: libQt5Core.so, libmyLibrary.so и libgnustl_shared.so находятся в папках lib/armeabi/ и lib/armeabi-v7a/.
Мой файл Application.mk выглядит так:
APP_ABI += armeabi armeabi-v7a
APP_STL := gnustl_shared
APP_CPPFLAGS := -frtti -fexceptions
Я не очень понимаю, что означает ошибка и почему система пытается загрузить библиотеку в папку application_package_name/lib/arm. Эта папка действительно существует или это просто armeabi и armeabi-v7a в моей ситуации?
Заранее спасибо за вашу помощь
JNI_OnLoad
и вернула из нееJNI_ERR
. Если вы не определили функциюJNI_OnLoad
, вам нужно выяснить, откуда она извлекается и почему она может дать сбой. - person fadden   schedule 05.04.2016