Я использую android studio 1.0.2, и я пытаюсь создать андроидную библиотеку, которая использует функции ndk и туземцев. Это в основном архитектура моего проекта:Использование готовых библиотек и jni в Android Studio
MyProject
---| MyAndroidApp
---| MyAndroidLibrary
---| jni
---| jniLibs
В моем андроиде библиотеки, у меня есть один C++ обертки, которая вызывает функцию из общей библиотеки. Я создал эту библиотеку с ndk-build
(она отлично работает с eclipse). Я добавил эту библиотеку в папку/архитектуры jniLibs (arm64-v8a, armeabi, armeabi-v7a, mips, mips64, x86 и x86_64). я определил следующие Ароматизаторы в моем MyAndroidLibrary/build.gradle:
productFlavors {
x86 {
flavorDimension "abi"
ndk {
abiFilter "x86"
}
}
arm {
flavorDimension "abi"
ndk {
abiFilter "armeabi-v7a"
}
}
mips {
flavorDimension "abi"
ndk {
abiFilter "mips"
}
}
fat {
flavorDimension "abi"
}
}
Однако, когда я пытаюсь вызвать мои функции библиотеки из кода JNI, я получаю неопределенную ссылочную ошибку. Другими словами, моя общая библиотека, похоже, не загружена на стороне jni. Но, когда я удаляю вызов этой функции, и я изучаю .aar, который создается на выходе, я могу получить библиотеку .so.
Я не очень хорошо знаком с материалом градиента, поэтому я не уверен, что он действительно построил.
Что я ищу строгий эквивалент этого Android.mk, используя Gradle:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mysharedlib
LOCAL_SRC_FILES := ../shared/mysharedlib.so
LOCAL_EXPORT_C_INCLUDES := ../shared/includes/mysharedlib.h
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := jni
LOCAL_SRC_FILES := jni.cpp
LOCAL_C_INCLUDES += ../shared/includes/mysharedlib.h
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := mysharedlib
include $(BUILD_SHARED_LIBRARY)
Я хотел бы вызывать функции из предварительно встроенной библиотеки на моем JNI коде, например:
#include "MyDLL.h"
JNIEXPORT jint JNICALL Java_com_iskn_dbapi_DBAPI_getNegative(JNIEnv *env, jclass obj, jint integer)
{
return MyDLL::getNegative(integer);
}
Благодарим за ответы.
Вы, наконец, исправились? –