Windows下使用android NDK(JNI)调用OpenCV本地代码——流程梳理

本文介绍如何将Windows环境下使用VS+OpenCV开发的C代码打包成Android可用的.so文件,涵盖环境搭建、NDK配置、JNI方法实现及.so文件生成等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在弄把window下用 vs+opencv写的C代码算法打包成.so文件,供Android平台调用。从零学习Android环境的搭建,参考了各种大神的博客,使用ndk算是走通了一条路。

把整个过程梳理了一下,把参考内容也列出来,自己记录以备遗忘,也希望对和我一样的初学者有所帮助。


一,搭建Android 开发环境。

Android开发环境的搭建,包括JDK、ADT、SDK、NDK等。搭建步骤网上很多,资源下载可参考 http://www.open-open.com/lib/view/open1386252535564.html

我使用的是adt-bundle,已经包含了adt、sdk、eclipse,是一个完整的Android开发环境。中间出现的问题,打开eclipse提示adt版本太低,要求更新adt。由于众所周知的原因,谷歌网站根本无法登陆,用了代理还是慢的要死。我使用的解决方法是,找到sdk目录/tools/lib/plugin.prop,将里面的plugin.version改成已有的adt版本,即可正常运行。

建立一个最简单的Android工程,能正常输出HelloWorld就行。

二,NDK配置

NDK的配置包括路径设置、添加NativeSupport、设置C/C++的Paths and Symbols三个步骤。参考http://blog.csdn.net/u013149325/article/details/40375455

NDK调用本地C/C++文件的简单例子,可参考http://www.tuicool.com/articles/iQZr6z。当然其中头文件可以使用javah命令生成,可以在eclipse中直接生成,后面会说到。

三,添加native方法的类,并生成jni头文件

这部分内容可以网上查Java jni调用c/c++文件的内容,jni头文件生成有两种方式,一是通过命令行利用javah命令生成,二是通过在eclipse中建立编译选项直接生成。第二种方法可以参考http://blog.csdn.net/u013149325/article/details/40375455中的第八部分。

四,编写本地C/C++代码

主要是在C/C++中添加 jni.h和第三步生成的头文件,jni参数与C/C++代码中的参数对应可以查阅jni文档。这一步可以继续参考http://blog.csdn.net/u013149325/article/details/40375455

因为我主要是把调用opencv的C代码打包成.so文件,供Android使用。所以这里的一个关键问题是如何将opencv包加载进来。我的做法是直接把opencv解压缩包中build/include中的opencv2整个文件夹放到到Android工程的jni文件夹中,eclipse会自动加载opencv2文件夹中的内容。这里的opencv是使用Windows版本的opencv2库还是Android版本的opencv2库,实际中貌似这两个都行,也许这两个库本来就是一样的,有待确认。

        这一步还有其他方法,可以参考   http://blog.csdn.net/u013149325/article/details/40554311 ,重点推荐http://blog.csdn.net/yanzi1225627/article/details/27863615,这位大神对于OpenCV4Android有各种深入研究,还建了人满为患的讨论群

五,配置 Android.mk和Application.mk

这两个文件的配置,可以参考http://blog.csdn.net/u013149325/article/details/40554311、http://blog.csdn.net/watkinsong/article/details/8829235,以及opencv自带文档opencv_tutorials.pdf中introduction的Android开发部分

六,生成.so文件

编译文件生成.so文件,运行程序,查看在模拟器中的运行结果。

ps.这里只是初步走通了这个流程,如何在jni环境中,像在VS中一样调试C/C++代码,有待继续学习。还有,如何在C/C++代码中根据路径读取Android平台上的图像,还没走通。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值