天天看點

Android 內建 OpenCV native library

  1. Android內建OpenCV native library:
    1. 目前來看,OpenCV提供的SDK中已經附帶了編譯好的.a和.so庫,使用者可以根據自己的需要選擇動态或者靜态庫連結。
    2. OpenCV SDK下載下傳位址: http://opencv.org/releases.html
    3. 選擇對應版本的Android pack下載下傳。
    4. 解壓開會發現有一個sdk目錄(這裡以3.0.0版本為例)。
    5. sdk/native/libs包含了OpenCV已經編譯好的.a靜态庫和.so動态庫。靜态庫的數量很多,估計是編譯的時候直接分子產品編譯了,個人估計沒準可以按功能選擇性的引入靜态庫。不過動态庫就隻有一個。
    6. sdk/native/libs中包含了OpenCV所依賴的其他第三方庫,這裡就隻有靜态庫,因為這種應用場景下隻能使用靜态庫。
    7. sdk/native/jni包含了include頭檔案和各種cmake/mk來進行內建編譯。
    8. 一般來說,要将庫內建到自己的App中,是需要将庫檔案和頭檔案的路徑加入到Android.mk中的,并且還需要修改其中的一些編譯配置。不過OpenCV在這裡就很友善,其sdk/native/jni/中的OpenCV.mk已經替你将上面這些步驟全部包含了。你要做的主要就是将OpenCV.mk include到你的Android.mk中。
  2. OpenCV.mk使用的一些要點:
    1. OpenCV.mk會修改LOCAL_XXX變量使得你在include之後基本就可以直接使用,是以,在include OpenCV.mk 後,在使用其提供的資訊進行編譯前,不要調用include $(CLEAR_VARS),否則前面OpenCV.mk配置的LOCAL_XXX就被清除了,編譯會失敗
    2. OpenCV.mk內建靜态庫:
      1. 需要在include前這樣設定變量: OPENCV_LIB_TYPE := STATIC OPENCV_LIB_TYPE是OpenCV.mk内部使用的變量
    3. OpenCV.mk內建動态庫
      1. 需要在include前這樣設定變量:
        1. OPENCV_LIB_TYPE := SHARED
        2. OPENCV_INSTALL_MODULES:=on (這一步會将so庫加入到$(PREBUILT_SHARED_LIBRARY)中,後面才能進行link)
        3. LOCAL_SHARED_LIBRARIES中增加opencv_java3 (為什麼叫這個名字,可以參閱OpenCV.mk, 但貌似3.2不需要這一步了)
    4. OpenCV.mk會替你把OpenCV的頭檔案都添加到LOCAL_C_INCLUDES中,是以你不需要在自己的Android.mk中在配置。
    5. 建議通讀OpenCV.mk,本身很簡單。