cygwin下通过ndk交叉编译Android openCV 此博文包含图片

来源:互联网 发布:九分裤 知乎 鞋子 编辑:程序博客网 时间:2024/05/22 07:58
http://blog.sina.com.cn/s/blog_70e6ed3a01019gpv.html
转载
  
   先介绍几个工具:
   Cygwin:在windows平台上运行的unix模拟环境
   NDK:Native Development Kit,android平台的一部分.提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.比较简单的说,NDK是一套交叉编译工具,它可以帮你把你用C或C++书写的代码,编译为.so(类似与win下的.dll)格式的文件,使你可以在你的Android程序当中用Java语言(JNI)调用这些代码
   更多ndk的介绍见:http://blog.sina.com.cn/s/blog_70e6ed3a01019dns.html
   ndk脚本的分析见:http://blog.sina.com.cn/s/blog_70e6ed3a01019ecw.html
  
   下载ndk Download the NDK
   下载cygwin,选择ftp://mirrors.kernel.org这个镜像,搜索Devel Install安装gcc、make、swig等工具

   ps:如此处忘了安装make,
之后编译过程中会找不到make,如何在已安装完成的cygwin中安装make,可参考 http://blog.sina.com.cn/s/blog_70e6ed3a01019dmq.html

  
 Cygwin安装目录下,找到home/username的目录下的.bash_profile文件,打开文件在最后加上:
   NDK=/cygdrive/d:cygwin/android-ndk-r4-crystax(此为ndk的目录路径)
   export NDK
  
  

   下载openCV的源码:
http://android-opencv.googlecode.com/svn/trunk/ 此路径下的源码已不再包含build.sh,不适用于下文的编译方式,可参考 http://code.opencv.org/projects/opencv/wiki/Building_OpenCV4Android_from_trunk  进行编译
    适用于此文编译方法的openCV源码可在此处下载:

     http://download.csdn.net/source/3505737

     在系统环境变量Path加入cygwinbinandroid-ndk-r4-crystax的路径

     拷贝android-ndk-r4-crystax/cygwin/home/你的用户目录/android-ndk-r4-crystax,编译android-opencv时需要,编译成功之后可以删除这份拷贝
   

     启动Cygwin,进入openCV目录,运行build.sh,整个编译过程大约需要20分钟。成功后,会在D:/opencv/android/libs/armeabiarmeabi-v7a两个文件夹生成.so文件

    编译过程中可能会遇到的问题:
    1.提示某些工具not found,可根据提示安装相应软件

2.

“ERROR: You are using a non-Cygwin compatible Make program.
Currently using: C:/cygwin/bin/make

To solve the issue, follow these steps:

1. Ensure that the Cygwin ‘make’ package is installed.
   NOTE: You will need GNU Make 3.81 or later!

2. Define the GNUMAKE environment variable to point to it, as in:

     export GNUMAKE=/usr/bin/make

3. Call ‘ndk-build’ again.”

   通过make -v查看make版本,若make的版本在3.81以上,可检查ndk路径是否有空格,去掉路径空格或许能解决这个问题,如果问题还是存在,笔者建议重装Cygwin及make
   
   以下内容是将openCV导出成jar包以及编译CVCamera为.so文件并通过调用so包来运行android程序,此部分参考: http://blog.sina.com.cn/s/blog_7c0767c5010199j8.html

  
 打开Eclipse,新建Android projects,选择Create projects from existing projects,导入刚才build的工程。如下图所示。

 3

 

 

 导入后选择run as Android application,进行编译。成功后在虚拟机上无任何反应。若显示如下信息则表示成功:4

 

 但可能会出现如下错误:

 

(1). Re-installation failed due to different application signatur

从而导致 launch canceled。

 

解决办法是用adb uninstall命令将opencv卸载,重新安装Opencv即可。

具体步骤为:启动cmd,输入adb uninstall com.opencv,成功后返回Eclipse,点击Run as Android application进行重新安装即可。

5

 

(2).adb命令为无效命令,最简单的做法是把Android SDK 文件夹Tools文件夹里面的 adb.exe 和 AdbWinApi.dll 两个文件放到系统盘的 windows/system32 文件夹里。

 

(3).com.android.ide.eclipse.adt.internal.project.AndroidManifestHelper] Unable to read D:/Android 1/android-sdk-windows/AndroidManifest.xml: java.io.FileNotFoundException: D:/Android 1/android-sdk-windows/AndroidManifest.xml (系统找不到指定的文件。)

此错误经常出现在编译的最初两行。解决办法其实很简单。进入:C:/Documents and Settings/Administrator/.android
删除:debug.keystore及 ddms.cfg即可。

 

Opencv这个工程编译通过之后,就可以Export它,选择JAVA的JAR file,导出时去掉[obj]和[libs]这两个文件夹,AndroidManifest.xml和default.properties,输出文件名为Opencv.jar,Export设置如下图:

也就是export到自己的sample文件夹中。

 

若未遇到上述问题,那么恭喜你可以进入下一个步骤~

 

 

4.打开cygwin,去到/samples/CVCamera/,输入sh build.sh,(与build opencv类似)开始编译CVCamera的JNI,成功编译之后会生成libcvcamera.so

 

 

 

 

5.同样的方法导入CVCamera这个工程,编译CVCamera这个工程,生成CVCamera.apk(有6.06MB大小)

 

 

在这当中同样可能会出现一些错误:

 

 

7

 

 

 出现“Android library projects cannot be launched”时,检查工程属性中的Android选项,其Is library 单选框是不能打勾的。

 

 

6. 最后,虚拟机上出现CVCamera应用程序图标。当然,此程序在虚拟机上运行只会一闪而过。真正的测试需在真机上完成。

 

 至此,OpenCV及其例程CVCamera的编译便全部完成。

0 0