Android&OpenCv之Android程式載入OpenCv庫(二)
好的開始是成功的一半,在第一節中我總結了如何在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);
}
在(一)中我們已經詳細講了載入的流程圖。