首先要先安装JDK,下载地址http://www.oracle.com/technetwork/java/javase/downloads/index.html,安装完成后,需要配置系统环境变量(这里是我用的环境变量,请根据具体安装进行修改,对于已经存在的环境变量,在已有值上进行添加)

JAVA_HOME=D:\Program Files\Java\jdk1.7.0_45

Path=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

CLASSPATH=.;%JAVA_HOME%\lib\tool.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib

在Android的官网下载Android的sdk,下载地址http://developer.android.com/sdk/index.html(下图所示下载),这里便于开发者的使用,直接提供了Android开发IDE,这样开发者不用自己安装Eclipse和ADT了,在使用OpenCV时候,常需要调用C/C++代码,这样还要安装CDT,好在这里也集成了CDT。

下载好了开发包,解压了就可以使用了,如有需要可以通过SDK Manager.exe进行更新即可。现在就可以开发普通的Android应用了。配置系统环境变量

ANDROID_SDK_HOME=D:\adt-bundle-windows-x86-20131030\sdk

%ANDROID_SDK_HOME%\tools;%ANDROID_SDK_HOME%\platform-tools;

但是要进行OpenCV开发,还需要Android OpenCV库,下载地址http://opencv.org/,如果要调用C/C++代码还需要安装NDK,下载地址http://developer.android.com/tools/sdk/ndk/index.html,下载你需要的版本。解压备用。

这样,准备工作已基本完成,现在打开解压Android SDK包中的eclipse.exe,先在就应该可以编写Android应用了,如果你没有可以运行的Android设备,可以创建一个安卓虚拟设备(AVD),Window-》Android Virtual Device Manager,点击右侧的New,即可新建AVD,如下图。如果有真实的Android设备最好。

下一步配置NDK,Window-》Preference

然后import Android OpenCV包,可以把OpenCV Library和一些sample import进来,然后编译一下,就可以运行例子看效果了。但前提是你要运行的设备上已经安装了OpenCV Manager,这个可以在Android OpenCV包的apk文件夹中找到。

如果要自己开发Android OpenCV应用分两种情况,一种是基于Java开发,另一种是Java和C/C++混合开发。先说第一种。创建Android项目后右击项目选Properties,如下图。Add加入OpenCV Library。

在继承Activity的activity类中加入

    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {        @Override        public void onManagerConnected(int status) {            switch (status) {                case LoaderCallbackInterface.SUCCESS:                {                    Log.i("ObjDetect/MainActivity", "OpenCV loaded successfully");                } break;                default:                {                    super.onManagerConnected(status);                } break;            }        }    };

然后在onResume()中加入

    public void onResume()    {        super.onResume();        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_8, this,         mLoaderCallback);    }

这样就可以正常使用Android OpenCV了。

下面介绍另一种方法,就是通过JNI调用C/C++来使用OpenCV。这需要把要用的一些头文件包含到项目中,如下图所示


接着要编写入口函数接口,public static nativetype funcName(type arg1,type arg2,...);这里不需要定义这个函数,其实现在C/C++中完成。注意native关键字是必须的,static不是必须的,但将该函数声明为静态的,不需要该类对象就可以调用此方法。右击该项目Android Tools-》Add Native Support,如下图,填写so包的名称(so包其实就是Java要调用的C/C++部分,这个名称就应该对应着你C/C++文件的名称)。

之后你的工程目录就会多一个jni文件夹,此文件夹中会出现一个HelloWorld.cpp和Android.mk文件。然后就是生成cpp文件对应的头文件(这一步不是必须的,但这一步可以为您自动生成jnicall的函数头),先重新编译一下该项目,在命令窗口进入到项目所在目录下,

javah-classpathbin/classes-djni*.*.*. ?Activity(前面的*.*.*代表包名,?Activity代表包含jni函数定义的activity名称),该命令执行后就会在jni文件夹下有多一个*_*_*_?Activity.h的头文件,头文件中有jnicall的函数头,例如JNIEXPORTjstring JNICALL Java_xj_example_jnitest_JavaSource_say
(JNIEnv *, jobject);
将该函数头copy到之前生成的cpp文件中,同时要#include *_*_*_?Activity.h,然后将该函数实现,但这里需要一些类型的转换,可以注意到在Java中定义C/C++函数的返回值和参数类型前都多了一个'j'在函数体中要使用参数或返回函数值都需要做相应的转换,具体的这里不详细说明,用到什么再去网上找。函数实现后是希望在Java中可以调用该函数,需要在调用前先System.loadLibrary("CPPTest");将so包加载,然后再调用相应的函数即可。最后还要在jni文件夹下编写一个Application.mk文件,该文件一般固定,指定运行平台等。代码如下:

APP_STL := gnustl_staticAPP_CPPFLAGS := -frtti -fexceptionsAPP_ABI := armeabiAPP_PLATFORM := android-8

一般不用修改,若想仔细研究请自己查阅相应项所代表的含义。最后再重新编译一下项目在libs文件夹下会多出来一个armeabi文件夹,其中会生成相应的.so文件,接着就可以运行看效果了。

更多相关文章

  1. android 动态创建控件并设置布局
  2. 修改apk调用蓝牙无明确提示
  3. Android(安卓)Binder机制,虚拟机
  4. Provider 权限详解
  5. android开机动画播放流程
  6. [Android] 全面了解Activity
  7. Android(安卓)Service最全面的解析
  8. Android(安卓)NDK 线程回调Java层方法
  9. Android(安卓)Service: 启动service, 停止service

随机推荐

  1. 【转】android APP使用的jar概况
  2. 你知道android的MessageQueue.IdleHandle
  3. com.google.android.providers.GoogleSet
  4. Android学习之RecyclerView
  5. Video的thumbnail抽取算法
  6. Android在一个类中使用Toast,信息显示在另
  7. Android中如何使用列表对话框
  8. Android 开发 TextView中出现参差不齐状
  9. 免费电子书《Android 研发工程师高级进阶
  10. android 连续点击三次跳转到下一面