手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库

首先是创建一个C++的native的项目工程,为了把cpp文件和gradle配置添加到自己的项目中

手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库_第1张图片

native工程中有cpp这个目录,按照目录结构复制到自己的工程中,先运行native工程要先能跑的通,跑不通基本都是gradle之类的问题还有setting中的ndk和cmakes没有安装,安装一次我们自己的项目中也会有这个,NDK配置完要在project structure上添加ndk,不然会导致后续.cpp文件include不到opencv2的包

手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库_第2张图片手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库_第3张图片手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库_第4张图片

文件复制过来native-lib的名称要改,最后那个是在main中的方法。把main方法的

stringFromJNI和static {
    System.loadLibrary("native-lib");
}也放到自己的工程中

手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库_第5张图片手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库_第6张图片

最后就是app gradle的配置,加上两处的externalNativeBuild添加上

手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库_第7张图片

到此,你的新项目只要能跑的起来,调用起JNI的stringFromJNI方法并显示出来说明JNI就基本配置好了,接下来是opencv的配置

首先是去官网下载opencv对应的android版本,压缩完打开opencv-4.3.0-android-sdk\OpenCV-android-sdk\sdk\native\libs这个目录下,把四个架构的so库放到自己的项目中,如果还没创建文件夹的就如图创建,再把opencv-4.3.0-android-sdk\OpenCV-android-sdk\sdk\native\jni目录下得include文件夹全部拷贝到如图目录下并创建opencv文件夹再配置CMakeLists

手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库_第8张图片手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库_第9张图片手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库_第10张图片

至此你在项目中能includeopencv的包就代表配置完成了,后续就是自己要做的操作了,我这边是有C++团队有写好的c++和.h文件,我的处理是直接把类放到cpp文件夹下,需要在CMakeLists中的add_library添加cpp的文件名称,需要调用c++里面的方法就用static放出来调用,但是这种调用不好,最好是适配c++的用指针的方法new调用,记得最后要返回bool的类型,不然不返回就会卡在里面黑屏不出来了,另外值得一提的是需要java的参数类型和c++的差异化较大需要自行百度去查,我这边传入string类型,c++需要的是char *类型,就需要我们在.cpp文件中做如下方法的转换就可以了

手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库_第11张图片手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库_第12张图片

如果自己的线上项目要用又不想去搞这么多文件可以把native-lib的类名写好,里面代码测试好了去make project,这这个目录下会有两个so包,直接把这两个包放自己工程上就能调用起来了,省了很多的代码。

手把手教你android在已有的项目中添加JNI和opencv,并成功调用起c++代码库_第13张图片

以上就是配置的全过程了,希望能帮到大家。

 

 

你可能感兴趣的:(android,c++,opencv,java,jni)