在Android的第二个项目中添加.so库

时间:2014-01-10 10:02:07

标签: android c++ java-native-interface

我在Android中使用c ++构建源代码,并创建了一个DSP.so.现在我想在第二个项目中使用这个.so。我能怎么做?在我的第二个项目中,我有这个结构:

Android.mk:

LOCAL_PATH := $(call my-dir)



include $(CLEAR_VARS)

LOCAL_SRC_FILES  := nativo.cpp Parameters.cpp 
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS     += -llog -ldl 
LOCAL_MODULE     := native_code


include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_STL := stlport_static
APP_ABI := armeabi
APP_PLATFORM := android-8

我的nativo.cpp

#include "nativo.h"

#include "Parameters.h"
#include <correlation.h>
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace splab;

#include <android/log.h>

#define LOG_TAG "NATIVO"
#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__))


JNIEXPORT jlong JNICALL Java_com_example_vamostelo_Processing_init_1variables
  (JNIEnv *, jclass){

}



JNIEXPORT jchar JNICALL Java_com_example_vamostelo_Processing_prueba_1nativa
  (JNIEnv *, jclass, jlong, jbyteArray, jint){


}

文件correlation.h是我构建的库中的文件。那么我怎么能添加这个.so在我的第二个项目中我可以使用这个库的功能?

由于

1 个答案:

答案 0 :(得分:1)

您必须从DSP.so创建“本地共享库”,并在构建模块时引用它。

像这样的Android.mk应该这样做:

LOCAL_PATH := $(call my-dir)

# Create `DSP-prebuilt` local prebuilt library from `DSP.so`
include $(CLEAR_VARS)
LOCAL_MODULE            := DSP-prebuilt
LOCAL_SRC_FILES         := path/to/DSP.so
LOCAL_EXPORT_C_INCLUDES := path/to/DSP/headers/folder
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_SRC_FILES  := nativo.cpp Parameters.cpp 
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS     += -llog -ldl 
LOCAL_MODULE     := native_code
# Reference the local prebuilt:
LOCAL_SHARED_LIBRARIES := DSP-prebuilt
include $(BUILD_SHARED_LIBRARY)

请注意,生成的libs文件夹将同时包含libDSP-prebuilt.solibnative_code.so,这两个文件都必须为native_module引用 {{1 }}

希望这有帮助!