一、首先说明一下文件放置的目录结构如下:
----jni
| prebuild
|libturbojpeg.so
|libturbojpeg.h
|prebuild.mk
Android.mk
Application.mk
com_XXX_XXX_XXX.cpp
com_XXX_XXX_XXX.h
说明:prebuild是我们需要调用的第三方的so文件的放置的目录,里面还有一个prebuild.mk文件,主要是用来声明预编译用的.libturbojpeg.h 为相应的头文件。
其中libturbojpeg.h里面定义函数:
Mat decodeJpg(...,...,...)
二、我的需求:在com_XXX_XXX_XXX.cpp中需要使用到decodeJpg,详细如下:
#include "prebuild/libturbojpeg.h"
void myDecode()
{
Mat m = decodeJpg(...);
}
三、具体说明: (1)prebuild.mk内容:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := turbojpeg
LOCAL_SRC_FILES := libturbojpeg.so
TARGET_PRELINK_MODULES := false
include $(PREBUILT_SHARED_LIBRARY)
(2)Android.mk内容:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=STATIC
include ../../../../sdk/native/jni/OpenCV.mk
MY_FILES_PATH := $(LOCAL_PATH) \
# $(LOCAL_PATH)/../../Classes
MY_FILES_SUFFIX := %.cpp %.c %.cc
My_All_Files := $(foreach src_path,$(MY_FILES_PATH), $(shell find "$(src_path)" -type f) )
My_All_Files := $(My_All_Files:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)
MY_SRC_LIST := $(filter $(MY_FILES_SUFFIX),$(My_All_Files))
MY_SRC_LIST := $(MY_SRC_LIST:$(LOCAL_PATH)/%=%)
**LOCAL_SHARED_LIBRARIES += turbojpeg**
LOCAL_SRC_FILES += $(MY_SRC_LIST)
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS += -llog -ldl
LOCAL_CFLAGS += -std=gnu++11
LOCAL_MODULE := LPR
include $(BUILD_SHARED_LIBRARY)1. 这里是列表文本
**include $(LOCAL_PATH)/prebuild/prebuild.mk**
注:加粗部分是需要加载第三方so库需要的mk脚本
(3)ndk-build 做好上面的工作了之后就可以执行NDK编译了