Android jni 开发详细流程

文档简介

该文档主要简介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工程

新建一个android工程,注意勾选Include C++ support,后面的直接下一步,最后可以勾选Exceptions Support.
创建android工程

(二)新建Java包

在project下的app/src/main/java/下新建package命名为myPackage,在该包中新建Java Class,命名为my_native.并在my_native文件中创建自己的方法。

创建Java包

(三)生成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来生成该文件。

(四)native方法声明

Jni方法声明和实现。步骤三成功编译后在jni下生成如下.h的头文件。复制该头文件然后改后缀为.cpp。

native方法声明
移动这两个文件到指定的文件夹下,文件夹下包含c/c++实现源码,如下图CyAlgo_Engine文件夹下的子文件夹imp下的c/c++文件。注意在.cpp文档中需要包含.h头文件和c/c++的头文件。
在这里插入图片描述

(五)native方法实现

在jni中封装c/c++实现。在.cpp文件中封装c/c++函数,注意变量类型转变。charmodelNameBuff = (char)env-> GetStringUTFChars ( ImgName, NULL);

(六)Android.mk文件配置

(1) App/build.gradel中的externalNativeBuild下一单元添加

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代码目录
}
}
或者之间替换该文件内容。

(2)在jni层中添加Android.mk文件

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 //需要编译的工程

(3)在jni层中添加Application.mk文件

APP_ABI := armeabi-v7a x86
APP_CPPFLAGS := -fexceptions -frtti
APP_STL := gnustl_static
APP_PLATFORM := android-21

(4)在native方法下添加CyAlgo/Android.mk文件

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)

(七)Ndk编译.so库

打开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生成.so库

Native方法调用

在MainActivity文档中首先导入库,记得去头lib和去尾.sonative方法调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值