该文档主要简介Android jni的开发流程。 Android jni开发主要依赖Android开发平台,sdk和ndk三个部分。
Android: C:\Users\CyAlgo_Install\Android-install
Sdk: C:\Users\CyAlgo_Install\Android\Sdk
Ndk: C:\Users\CyAlgo_Install\android-ndk-r17b。
在Android studio上编译c/c++ jni 并自动生成so库,在java类中引用。
新建一个android工程,注意勾选Include C++ support,后面的直接下一步,最后可以勾选Exceptions Support.
在project下的app/src/main/java/下新建package命名为myPackage,在该包中新建Java Class,命名为my_native.并在my_native文件中创建自己的方法。
首先配置编译工具来编译或在terminal通过命令行完成编译。
terminal命令行:javah -d jni -jni -classpath class
如下:
先cd到D:\AndroidStudio\MyApplication\app\src\main目录下,然后输入下面三行命令:
javah -d jni -jni -classpath D:\AndroidStudio\MyApplication\app\build\intermediates\classes\debug
myPackage.my_native
注意:如果找不到build\intermediates\classes\debug路径时,先crtl+F9或者build->make project来生成该文件。
Jni方法声明和实现。步骤三成功编译后在jni下生成如下.h的头文件。复制该头文件然后改后缀为.cpp。
移动这两个文件到指定的文件夹下,文件夹下包含c/c++实现源码,如下图CyAlgo_Engine文件夹下的子文件夹imp下的c/c++文件。注意在.cpp文档中需要包含.h头文件和c/c++的头文件。
在jni中封装c/c++实现。在.cpp文件中封装c/c++函数,注意变量类型转变。charmodelNameBuff = (char)env-> GetStringUTFChars ( ImgName, NULL);
ndk {
moduleName “CyAlgo_DigitalRecog”
moduleName “CyAlgo_PointerInstRecog”
moduleName “CyAlgo_GXrecog”
ldLibs “log”,“jnigraphics” // 引入库,比如要用到的__android_log_print
abiFilters “armeabi-v7a”,“x86” // “x86” 显示指定支持的ABIs
stl “stlport_static”
}
sourceSets {
main {
jniLibs.srcDir ‘src/main/libs’ // jni库目录
jni.srcDirs = [] // jni代码目录
}
}
或者之间替换该文件内容。
LOCAL_PATH := $(call my-dir)
MY_PATH := $(call my-dir)
#include $(MY_PATH)/CyAlgo_CreateModel/Android.mk
#include $(MY_PATH)/CyAlgo_GXrecog/Android.mk
#include $(MY_PATH)/CyAlgo_PointerInstRecog/Android.mk
include $(MY_PATH)/CyAlgo_Engine/Android.mk //需要编译的工程
APP_ABI := armeabi-v7a x86
APP_CPPFLAGS := -fexceptions -frtti
APP_STL := gnustl_static
APP_PLATFORM := android-21
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE :=STATIC
LOCAL_MODULE :=CyAlgo_Engine
LOCAL_SRC_FILES := yaoyu_example_home_myapplication_CyAlgo_Engine.cpp
imp/engine.cpp
LOCAL_LDLIBS := -llog -ljnigraphics -lz
include $(BUILD_SHARED_LIBRARY)
打开dos窗口cd到C:\YaoYu_Study\AndroidStudio\MyApplication\app\src\main下输入ndk-build回车开始编译。这里需要提前配置好android-ndk的环境变量。C:\YaoYu_Study>cd C:\YaoYu_Study\AndroidStudio\CyAlgoA\app\src\main ->Ndk-build