Android开发OpenCV2.4.10环境配置(免Cygwin)-前篇

参考链接:

http://blog.csdn.net/pocoyoshamoo/article/details/23533923

http://jingyan.baidu.com/article/5d6edee22d908799eadeec9f.html

http://blog.csdn.net/yanzi1225627/article/details/27863615


注:以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDTEclipse C/C++开发插件),还要配置编译器,环境变量...

下面讲到的环境配置无需单独下载CDT以及Cygwin

Step1:配置ADT开发环境(略)。

Step2:下载最新的NDK。

Android官网下载最新的NDK,注:NDK版本在r7以上之后就集成了Cygwin,而且还是十分精简版。比起下载Cygwin要方便多啦!下载链接见:

http://developer.android.com/tools/sdk/ndk/index.html,当前最新版本为android-ndk-r10d


下载完成之后,解压到自定义目录,例如:D:\00_dev\android-ndk-r10d


Step3:在Eclipse中配置NDK路径。

打开Eclipse,点Window->Preferences->Android->NDK,设置NDK路径,例如D:\00_dev\android-ndk-r10d,并配置环境变量NDKROOT




Step4:为Android Project添加本地库

新建一个Android工程,在工程上右键点击Android Tools->Add Native Support...,然后给我们的.so文件取个名字,例如: HelloOpenCV。


这时候工程就会多一个jni的文件夹,jni下有Android.mk和HelloOpenCV.cpp文件。Android.mk是NDK工程的Makefile,HelloOpenCV.cpp就是NDK的源文件。


Step5:在Eclipse中配置NDK编译方式。

设置NDK的编译方式。选择Project->Properties,选中C/C++ Build,去掉Use default…前面的勾,选择之前配置好的NDKROOT环境变量,并在${NDKROOT}后面添加/ndk-build,构成${NDKROOT}/ndk-build,点击确定。


Step6:在Eclipse中声明本地方法,并生成JNI接口函数声明。 

新建一个NativeFunctions类,用于声明native方法,加载HelloOpenCV库,如下图所示。


进入Windows命令提示符窗口,先cd到NativeFunctions所在的工程目录的src目录,首先键入javac com\example\helloopencv\NativeFunctions.java命令,生成NativeFunctions.class文件;


再键入javahcom.example.helloopencv.NativeFunctions命令,生成com_example_helloopencv_NativeFunctions.h文件:




Step7:在Eclipse中配置C/C++Include路径。

重新切换到Eclipse,刷新Project,在src目录下多出com_example_helloopencv_NativeFunctions.h文件,如下图:


打开后发现程序报错,提示以下错误:



这是因为当前项目未Include NDK的JNI:D:\00_dev\android-ndk-r10d\platforms\android-19\arch-arm\usr\include路径。

选择Project->Properties->C/C++General->Paths and Symbols,添加路径D:\00_dev\android-ndk-r10d\platforms\android-19\arch-arm\usr\include,并一定要勾选Add to all languages选项,确保该设置对c、cpp均生效,至于All to all configurations,可选可不选,点击确定,ndk 的jni就可以用了。若错误提示未消失,按Ctrl+B快捷键编译一下Workspace后错误才消失。


Step8:在jni文件夹下的C/C++源文件中编写函数实现体。

接下来仿着NDK的demo,Hello-JNI工程写一下。使用Alt + '/'可以代码提示!

JNI接口的命名规范是:Java_ + 调用该方法的包名(包名的点用_代替) + _ + 调用该接口的类名 + _ + 方法名,对于实例方法,有两个参数是必要的,一个JNI的环境指针JNIEnv *,另一个是调用该方法的Java实例jobject或jclass。

JNI函数接口可以我们按照其命名规范手工编辑而来,也可以通过上一步骤自动生成,为方便之后C/C++代码的编写,我们将上一步生成的com_example_helloopencv_NativeFunctions.h文件Move到jni文件夹下,并重命名为HelloOpenCV.h,在HelloOpenCV.cpp中增加头文件#include <HelloOpenCV.h>,这时就可以在HelloOpenCV.cpp编写JNIEXPORTjstringJNICALL Java_com_example_helloopencv_NativeFunctions_getHelloString  (JNIEnv *,jclass)的函数体了。


Step9:在Activity中添加调用本地方法的代码。

在Activity中添加如下代码:


Step10:编译运行。

编译运行,得到如下结果:





  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值