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

标签 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)

应用程序.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 并且在我的第二个项目中我可以使用这个库的功能?

谢谢

最佳答案

您必须从 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引用 DSP

希望这对您有所帮助!

关于android - 在 Android 的第二个项目中添加 .so 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21041231/

相关文章:

java - 删除 ListView 项目 - Android

c++ - Flex 编译文件 (lex.yy.c) 找不到 header /依赖项并且编译异常

java - 从 Java 执行命令而不是等待结果

python - Cython 定义 void 函数基础 c++ 头文件

c++ - 你能安全地检查无穷大的符号吗?

以编程方式设置 Java.library.path

java - JNI UnsatisfiedLinkError 问题

android - 安卓版 ADOBE AIR

javascript - 将函数从 HOC 传递到组件(React、React native)

java - 解密图像时,给出 javax.crypto.BadPaddingException : pad block corrupted Android