JNI编译so库文件,要看个人的需求,以下分两种需求
公共部分(无论那种需求都需要的步骤 如下):
1,下载ndk,并进行配置环境变量:如 :F:\android-ndk-r16b\build
2,需要创建Android.mk Application.mk两个文件文件
3,编写接口文件 如
4,然后找到工程路径下com级目录 ,如下图
打开命令行,输入
1) javac com\example\administrator\myapplication\jni\Demo.java
2) javah com.example.administrator.myapplication.jni.Demo
后生成一个,如下图:
把.h文件复制到 openCV中jni文件夹中 ,复制.h文件并进行修改后缀名为 .cpp ,如下图
打开cpp文件并添添加 #include <jni.h>和添加参数 ,如下图
然后修改android.mk文件 ,如下图
到此需要的公共文件就已经准备好了,然后按照如下选择自己的需求
第一种需求: 普通的so库文件编译要求:
在自己觉得合适的地方创建一个文件夹名称随便起 : XXX,然后在XXX文件夹中再创建一个文件夹,这个取名为: jni
然后把生成的com_xxx_xxx_xx_Demo.h Android.mk Application.mk 需要的.cpp .h文件放到 jni 文件夹中 ,在该目录下打开命令输入 ndk-build 就可以编译了
Android.mk 内容如下:
LOCAL_PATH := $(call my-dir)
OPENCV_PATH := ../sdk/native/jni
include $(CLEAR_VARS)
OPENCV_CAMERA_MODULES:=off
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=STATIC
LOCAL_LDLIBS:= -L$(SYSROOT)/usr/lib -llog
LOCAL_C_INCLUDES := \
$(LOCAL_PATH) \
$(OPENCV_PATH)/include
LOCAL_MODULE := MapAPIs
LOCAL_SRC_FILES := map_compress.cpp com_yx_b34_jni_MapAPIs.cpp
LOCAL_LDLIBS += -lm -llog -lc -ldl -lz -Wl,--gc-sections,-ljnigraphics
LOCAL_CPPFLAGS += -ffunction-sections -fdata-sections -fvisibility=hidden
LOCAL_CFLAGS += -ffunction-sections -fdata-sections -fvisibility=hidden -std=c++11
include $(BUILD_SHARED_LIBRARY)
Application.mk 内容如下:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := all
APP_PLATFORM := android-8
第二种需求: 需要opencv的so库文件编译要求:
把上面公共部分准备好之后,然后下载 opencv android版本:如下:
opencv-3.4.2-android-sdk
下载地址 : https://sourceforge.net/projects/opencvlibrary/
下载完成后进行解压,配置环境变量 如下: F:\opencv-3.4.2-android-sdk\OpenCV-android-sdk\sdk
配置成功后,在opencv解压文件中创建一个名为JNI文件夹 ,如下图:
然后把生成的com_xxx_xxx_xx_Demo.h Android.mk Application.mk 需要的.cpp .h文件放到 jni 文件夹中 ,在该目录下打开命令输入 ndk-build 就可以编译了
Android.mk 内容如下:
LOCAL_PATH := $(call my-dir)
OPENCV_PATH := ../sdk/native/jni
include $(CLEAR_VARS)
OPENCV_CAMERA_MODULES:=off
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=STATIC
include $(OPENCV_PATH)/OpenCV.mk
LOCAL_LDLIBS:= -L$(SYSROOT)/usr/lib -llog
LOCAL_C_INCLUDES := \
$(LOCAL_PATH) \
$(OPENCV_PATH)/include
LOCAL_MODULE := XXXAPIs
LOCAL_SRC_FILES := xxx.cpp com_xx_xx_jni_XXXAPIs.cpp xxx.cpp xxx.cpp
LOCAL_LDLIBS += -lm -llog -lc -ldl -lz -Wl,--gc-sections,-ljnigraphics
LOCAL_CPPFLAGS += -ffunction-sections -fdata-sections -fvisibility=hidden
LOCAL_CFLAGS += -ffunction-sections -fdata-sections -fvisibility=hidden -std=c++11
include $(BUILD_SHARED_LIBRARY)
Application.mk 内容如下:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := all
APP_PLATFORM := android-8
下载示例代码连接 : https://download.youkuaiyun.com/download/qq_20212147/12581723