好的开始是成功的一半,在第一节中我总结了如何在Eclipse中创建开发带有OpenCv库的Android APP的环境的工作。
本节讲如何在Android程序中加载OpenCv库,以便后续开发工作中调用OpenCv提供的API的接口。
我们知道OpenCv库作为一个.so的库。在Android程序中我们一般是通过System.LoadLibrary(“xxx.so”)来加载.so库的。所以加载OpenCv的库也不例外。在Android程序有两种方式加载OpenCv库,一种是直接加载(做调试同),一种在通过OpenCv Manager提供的服务找到OpenCv库的位置后再加载的,本质是一样的。下面我们来看第二种方式是怎样实现的?根据官方的思路,OpenCv Manager其实提供的是服务。我们通过aidl编程语言暴露服务的接口给client。在D:\work\OpenCv4Android\OpenCV-2.4.11-android-sdk\OpenCV-android-sdk\sdk\java\src\org\opencv\engine\OpenCVEngineInterface.aidl中提供了这样的接口,其内容如下。
package org.opencv.engine;
/**
* Class provides a Java interface for OpenCV Engine Service. It's synchronous with native OpenCVEngine class.
*/
interface OpenCVEngineInterface
{
/**
* @return Returns service version.
*/
int getEngineVersion();
/**
* Finds an installed OpenCV library.
* @param OpenCV version.
* @return Returns path to OpenCV native libs or an empty string if OpenCV can not be found.
*/
String getLibPathByVersion(String version);
/**
* Tries to install defined version of OpenCV from Google Play Market.
* @param OpenCV version.
* @return Returns true if installation was successful or OpenCV package has been already installed.
*/
boolean installVersion(String version);
/**
* Returns list of libraries in loading order, separated by semicolon.
* @param OpenCV version.
* @return Returns names of OpenCV libraries, separated by semicolon.
*/
String getLibraryList(String version);
}
在(一)中我们已经详细讲了加载的流程图。