如果你还没有JDK的话,可以去这里下载,接下来的工作就是安装提示一步一步走。设置环境变量步骤如下:
安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入java –version 查看JDK的版本信息。出现类似下面的画面表示安装成功了:
在Android Developers下载android-sdk_r05-windows.zip,下载完成后解压到任意路径。
完成之后:
由于NDK开发大都涉及到C/C++在GCC环境下编译、运行,所以在Windows环境下,需要模拟Linux模拟编译环境,下载地址:
http://www.cygwin.com/
下载后是个setup.exe文件,使用过程如下:
第一步:运行setup程序,第一步图略,直接点击Next进入下一步。
第二步:选择安装方式,第一次可以采用Direct Connection在线下载安装,如有现成的离线包,可以选择离线安装(Install from Local Directory)。
第四步:设置本地包暂存路径
暂存目录默认是放到setup.exe的同级目录下,下载后名字类似ftp%3a%2f%2fcygwin.mirrors.pair.com%2f这样格式。
第五步:设置网络连接方式
第六步:选择下载站点地址
起初尝试几个看哪个速度快就用哪个地址(如果感觉不快就点取消,再次来过)。
第七步:等待加载安装项载入,选择安装项
我们编译NDK,在默认设置下,只需选择Devel(点击列表中Devel,将后面的Default改为Install,图中箭头所示),其它均为默认状态。
第八步:等待下载完成
下载完成时间决定于你选择的安装包数量及网络连接速度,比如按照本文默认的选择方式,可能需要4-5个小时,下载后压缩包约750M,下载完成后会自动安装到上文设置的安装目录。
安装完成后,先运行Cygwin一次(Cygwin.bat),以便创建一些用户环境文件,分别输入:
make -v
和,
gcc -v
如果检测成功,会有make和gcc相关版本信息打印出来,如下图。
可以在cygwin中通过vim修改,也可以在windows安装目录中修改 home\<你的用户名>\.bash_profile 文件中最后添加环境变量
NDKROOT=/cygdrive/e/Andriod/develop/android-ndk-r8
export NDKROOT
其中NDK=/cygdrive/<你的盘符>/<android ndk 目录> ,"NDK"这个名字随便起,以后经常用不要太长。
重启cygwin,输入:
cd $NDK
可进入ndk对应目录说明设置OK。
3.用ls命令查看libs/armeabi/下是否生成了so文件,有libhello-jni.so说明ndk运行正常。
$ ls libs/armeabi/
gdb.setup gdbserver libhello-jni.so
也可以到E:\android\android-ndk-r8\samples\hello-jni\libs\armeabi目录下看有没有生成的.so文件。
2)导入NDK的hello-jni示例到Eclipse中
1.在Eclipse中新建一个Android工程HelloJni。
在Create Android Project时勾选“Create project from existing source”,Location中填E:\android\android-ndk-r8\samples\hello-jni
2.直接以Android Aplication运行com.example.hellojni.HelloJni项目。要先有.so文件才能运行起来。 os放在工程根目录下
进入官网(http://opencv.org/)下载OpenCV4Android并解压,其目录结构如下:
其中,sdk目录即是我们开发opencv所需要的类库;samples目录中存放着若干opencv应用示例(包括人脸检测等),可为我们进行android下的opencv开发提供参考;doc目录为opencv类库的使用说明及api文档等;而apk目录则存放着对应于各内核版本的OpenCV_2.4.3.2_Manager_2.4应用安装包。此应用用来管理手机设备中的opencv类库,在运行opencv应用之前,必须确保手机中已经安装了OpenCV_2.4.3.2_Manager_2.4_*.apk,否则opencv应用将会因为无法加载opencv类库而无法运行。
2.2 将SDK引入工作空间
(1) 选择一个路径,新建文件夹做为工作空间(我在E盘根目录下新建workspace目录来做为工作空间);
(2) 将OpenCV-2.4.3.2-android-sdk中的sdk目录copy至工作空间,并将其更名为OpenCV-SDK(是否更改名称无所谓,这是我个人习惯而已);
(3) 以新建的目录为工作空间,打开eclipse;
(4) 将OpenCV-SDK引入到工作空间中,如下图所示:
创建工程
(1) 打开eclipse,创建android应用工程GrayProcess;
(2) 将测试图像lena.jpg添加到资源目录res/drawable-hdpi中;
(3) 在Package Explorer中选择项目GrayProcess,单击右键在弹出菜单中选择Properties,然后在弹出的Properties窗口中左侧选择Android,然后点击右下方的Add按钮,选择OpenCV Library 2.4.3并点击OK,操作完成后,会将OpenCV类库添加到GrayProcess的Android Dependencies中,如下图所示:
创建工程
步骤如工程一,创建新工程GrayProcess2,将lena.jpg添加到资源文件,并按上面所示将opencv类库添加到工程中。
编写上层代码(java)
(1)Stings.xml
(4) ImageProc.java
编写JNI及C相关代码
在项目中新建目录jni,在jni目录中分别添加文件Android.mk,Application.mk,ImageProc.h,ImageProc.cpp,这四个文件的内容分别如下所示。
(1) Android.mk
代码说明:
第一行:指明当前编译路径;
第二行:清空变量;
第三行:将OpenCV类库中的编译文件包含进来,如此一来在我们的工程中即可使用OpenCV类库;
第四行:指定需要编译的C++源文件;
第五行:指定编译生成的类库名称;
第六行:调用命令将源文件编译为静态库。
注:第三行指定的路径很关键,当opencv类库与工程路径相关位置发生改变时,此路径也要随之改变。
(2) Application.mk(配置文件)
说明:
1.首先当年写完ImageProc.java 这个保存 以后 eclipse会自动帮你生成 java 的class文件
你可以再工程目录--》 bin --》classes -》com -------。。。。。 的文件里找到
比如我的 在E:\work\op\OpenCV-2.4.5-android-sdk\samples\Test2\bin\classes\com\test2\test2 这个路径下
2.将classes文件拷贝到e盘根目录下
然后打开 cmd
e:
cd classes
javah com.test2.test2.ImageProc
然后就会在classes文件里找到一个 xxx.的头文件 如图
----------------------------------------------------------------------------------------------------------------------
上述是将整个classes文件拷贝到E盘根目录,事实上不必这样,参见下面这篇文章:http://www.cnblogs.com/fww330666557/archive/2012/12/14/2817387.html(错误: 找不到 'fingerveinutility.JNInterface' 的类文件。)
打开命令行cmd,到达bin目录:
F:\fww\workspace\TestJNI\bin>
输入如下命令:
F:\fww\workspace\TestJNI\bin>javah -d header -classpath classes -jni com.YCan.testjni.MainActivity
java的命令我也不熟,这个命令的含义这里简单解释下:
-d header 表示将在当前目录下生成一个header文件夹,产生的头文件就在这里面了;
-classpath classes 指明类所在的位置
-jni com.YCan.testjni.MainActivity 指定类名
注意:要区分大小写。
----------------------------------------------------------------------------------------------------------------------
你可以将这个头文件改成任意名字 比如我们上面的ImageProc.h 然后放入工程目录的jni中
编译运行方法有两种
1 配置eclipse自动运行
第一步:转换工程。点击“文件 -> 新建 -> 其他”(快捷键:Ctrl+N)。选择“C/C++”下的“Convert to a C/C++ Project(Adds C/C++ Nature)”。进 入“下一步”。
----------------------------------------------------------------------------------------------------------------------
这里,一定!!!!不能!!!!右键Project->Android tools->add navive support,否则会导致无法编译
----------------------------------------------------------------------------------------------------------------------
第二步:选中你刚才建的“HelloJni”工程,下面左边选“Makefile project”右边选“Cygwin GCC”。确定后提示的“透视图”不清楚是什么,点击“是”即可。
第三步:在“HelloJni”工程上右键,选择“属性”。配置“C/C++ Build”和“C/C++ General -> Paths and Symbols”。
C/C++ Build:点击“C/C++ Build”,在右边的“Builder Settings”中去掉默认勾选的“Use default build command”复选框。设置Build command为“
${NDKROOT}/ndk-build.cmd "
C/C++ General -> Paths and Symbols:在Includes下add新的GNU C依赖路径。此“HelloJni”工程需要“D:\Java\android-ndk-r8\platforms\android-8\arch-arm\usr\include”即可,以后根据不同项目选择不同的依赖库。
___________________________________________________________________________________________________________
${NDKROOT}/platforms/android-9/arch-arm/usr/include
${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include
${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include
${ProjDirPath}/../sdk/native/jni/include //如果sdk目录与project同在workspace目录里,本文中的即用此
${ProjDirPath}/../../sdk/native/jni/include //如果sdk目录跟workspace同级,比如自带的sdk目录和simple目录下的工程
特别是下句,Opencv教程里面没有下面这个,导致resize memset,memccpy,memchr,memcmp等无法识别,请见http://blog.csdn.net/donglynn/article/details/25242459
F:\android-ndk-r9b\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\lib\gcc\arm-linux-androideabi\4.8\include
其中,eclipse ->windows->prefrences->c/c++->build->envirenment里新建NDKROOT指向NDK绝对目录。
___________________________________________________________________________________________________________
这里只要是你cpp文件里头文件包含目录
你可以直接在NDK 和opencv jni那个目录下搜索头文件名 然后看看在那个路径有
配置好后运行就行了
2.手动使用Cygwin 生成os 然后运行
由于程序中涉及到了JNI编程,因此需要用cygwin对其中的C/C++代码进行编译。打开cygwin,进入到工程的根目录中执行命令:$NDKROOT/ndk-build完成相关编译;之后在eclipse中刷新工程GrayProcess2,运行即可。编译及运行结果分别如下所示。
到这里两种方法都结束了!
有问题请留言