Android studio 1.0.2 kullanıyorum ve ndk ve yer işlevleri kullanan bir android kitaplık oluşturmaya çalışıyorum. Bu temelde projemin mimarisidir: my android kütüphanesindeÖnceden oluşturulmuş kütüphaneleri ve jni'yi Android Studio'da kullanma
MyProject
---| MyAndroidApp
---| MyAndroidLibrary
---| jni
---| jniLibs
, ben paylaşılan kitaplıktan işlevlerini çağıran bir tek C++ sarmalayıcı var. Bu kütüphaneyi ndk-build
ile oluşturdum (tutulma ile mükemmel çalışır). Bu kütüphaneyi jniLibs klasörüne/mimarilerine ekledim (arm64-v8a, armeabi, armeabi-v7a, mips, mips64, x86 ve x86_64). benim MyAndroidLibrary/build.gradle aşağıdaki Flavors tanımlamıştır: Ben jni kodundan Kütüphanemin işlevleri çağırmak çalıştığınızda
productFlavors {
x86 {
flavorDimension "abi"
ndk {
abiFilter "x86"
}
}
arm {
flavorDimension "abi"
ndk {
abiFilter "armeabi-v7a"
}
}
mips {
flavorDimension "abi"
ndk {
abiFilter "mips"
}
}
fat {
flavorDimension "abi"
}
}
Ancak, ben tanımlanmamış bir referans hatası alıyorum. Başka bir deyişle, paylaşılan kütüphanem jni tarafında yüklenmemiş gibi görünüyor. Ancak, bu işlevin çağrısını kaldırdığımda ve çıktıda oluşturulan aa'yı keşfettiğimde, kütüphaneyi geri alabilirim .so.
Notlara pek aşina değilim, bu yüzden gerçekten neyi geliştirdiğinden emin değilim.
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)
benim jni kodu önceden oluşturulmuş bir kütüphaneden işlevleri çağırmak istiyorum
, örneğin:
Ne aradığım o Android.mk sıkı bir eşdeğer kullanılarak gradle olduğu
#include "MyDLL.h"
JNIEXPORT jint JNICALL Java_com_iskn_dbapi_DBAPI_getNegative(JNIEnv *env, jclass obj, jint integer)
{
return MyDLL::getNegative(integer);
}
Yanıtlarınız için teşekkür ederiz.
Sonunda bunu düzelttiniz mi? –