在Android Studio上进行OpenCV 3.1开发
在Android Studio上進(jìn)行OpenCV 3.1開發(fā)
發(fā)布于 2016年1月27日2016.07.08更新:增加Android Studio 2.1.2的配置方法
? ? ? ? 自從Android Studio發(fā)布以后,Google已不再推薦開發(fā)者使用Eclipse+ADT的方式進(jìn)行Android的開發(fā)了。而且,隨著開發(fā)腳步的前進(jìn),Android Studio提供了越來(lái)越多的Eclipse所沒有的優(yōu)秀特性。所以,忍痛放棄老工具,學(xué)習(xí)新工具才是明智之選。
? ? ? ? Android Studio 2發(fā)布之后,增加了若干新功能。相比較1代版本,2.x最主要的變化在于增加了Instant Run功能,免去了每次修改代碼之后都要重新編譯安裝的過程,不過需要minSdkVersion設(shè)置為15以上,而在21以上時(shí)性能最好;另一個(gè)變化就是Android模擬器的速度提升明顯。所以如果你使用的是Android Studio 2,而且對(duì)模擬器的功能的豐富性要求不太高的話,可以略過Android模擬器|Genymotion一節(jié),直接使用默認(rèn)的AVD Manager建立模擬器。
注:本文涉及的某些網(wǎng)站的訪問與工具的下載在國(guó)內(nèi)是受限的。在沒有解決網(wǎng)絡(luò)連接問題的情況下進(jìn)行環(huán)境配置的方法,本文并不涉及。
索引
—環(huán)境配置
—-SDK Manager
—-Android Studio歡迎界面
—-切換深色主題
—-更改編輯器字體
—Android模擬器
—-AVD Manager
——HAXM
—-Genymotion
—為項(xiàng)目配置OpenCV
—-建立Android項(xiàng)目
—-導(dǎo)入OpenCV
——build.gradle
—-將Android項(xiàng)目與OpenCV整合
—OpenCV Manager
開發(fā)環(huán)境:
? ? ? ? Windows 10 x64 專業(yè)版(Windows 7 x64 旗艦版也驗(yàn)證可行)
? ? ? ? Android Studio 1.5.1(Gradle版本2.8)、Android Studio 2.1.2(Gradle版本2.10)
? ? ? ? JDK 1.8.0
? ? ? ? Android 6.0(API 23)
? ? ? ? OpenCV 3.1.0?Android SDK
可能會(huì)用到的工具:
? ? ? ? Genymotion(一個(gè)第三方的Android模擬器)
環(huán)境配置:
? ? ? ? 1.首先要保證計(jì)算機(jī)上有Java環(huán)境。如果沒有的話請(qǐng)參考其他文章(比如《Windows下Android開發(fā)環(huán)境的配置》的第一部分)進(jìn)行Java開發(fā)環(huán)境的配置。
? ? ? ? 2.在http://developer.android.com/sdk/index.html下載最新穩(wěn)定版Android Studio。從這個(gè)鏈接下載的Android Studio可能并不是最新版,我這里給出1.5.1版本的下載鏈接:https://dl.google.com/dl/android/studio/ide-zips/1.5.1.0/android-studio-ide-141.2456560-windows.zip。如果下載到的文件名稱是以“android-studio-bundle”開頭的,說明該安裝包不只包含了Android Studio本身,還包括了最新版本的Android SDK以及相應(yīng)的模擬器系統(tǒng)鏡像;如果文件名稱是以“android-studio-ide”開頭的,則只包含Android Studio本身。
? ? ? ? 雖然Android Studio 2已有預(yù)覽版,但是每一次更新都會(huì)對(duì)工作流程產(chǎn)生一些改變,所以目前還是推薦使用Android Studio 1.5.1。Android Studio 1.x與Android Studio 2.x對(duì)OpenCV Java API的配置方法基本相同,區(qū)別僅在于一些插件的版本和界面略有不同,下文介紹的步驟對(duì)兩種版本都適用,差別之處會(huì)有明顯的標(biāo)記。值得一提的是,不同版本的Anroid Studio相互之間并不沖突,你甚至可以在桌面上同時(shí)打開多個(gè)不同版本的Android Studio。
? ? ? ? 在安裝過程中會(huì)詢問Android Studio安裝位置與Android SDK的安裝位置,假設(shè)SDK的位置選擇在了C:\dev-lib\android-sdk。
? ? ? ? 安裝完成之后,第一次運(yùn)行Android Studio時(shí),軟件會(huì)自動(dòng)連接Google服務(wù)器下載最新的Android SDK。這一步可以跳過,稍后我們自己打開Android SDK Manager來(lái)安裝所需的文件。
? ? ? ? 3.在http://sourceforge.net/projects/opencvlibrary/files/opencv-android/3.1.0/OpenCV-3.1.0-android-sdk.zip/download下載OpenCV 3.1.0?Android SDK,解壓到某個(gè)不限制讀寫權(quán)限的目錄下,比如C:\dev-lib\OpenCV-android-sdk。
? ? ? ? 4.打開Android Studio。第一次運(yùn)行時(shí)會(huì)自動(dòng)下載并安裝最新的Android SDK文件,這里可以取消,直接打開Android Studio。此時(shí)會(huì)彈出一個(gè)歡迎界面。為了安裝必要的SDK文件,點(diǎn)擊Configure:
? ? ? ? 再選擇SDK Manager:
? ? ? ? 在彈出的窗口中點(diǎn)擊下方的Launch Standalone SDK Manager(如果以后想隨時(shí)打開這個(gè)界面,只需要點(diǎn)擊Android Studio界面上方的按鈕):
? ? ? ? 一旦建立項(xiàng)目之后,Android Studio每次都會(huì)默認(rèn)打開最近使用的項(xiàng)目。如果想每次打開Android Studio時(shí)都彈出這個(gè)歡迎界面,需要依次打開File->Settings…->Appearance & Behaviour->System Settings,取消勾選Reopen last project on startup。(參考:http://stackoverflow.com/questions/21181847/how-to-force-android-studio-to-start-with-the-welcome-screen。)
? ? ? ? 另外,我是在暗色主題下截取的圖片。切換Android Studio主題的方法是,依次選擇File->Settings…->Appearance & Behaviour->Apprearance,在Theme后的下拉菜單中選擇Darcula。
? ? ? ? 編輯器默認(rèn)的字體比較小,調(diào)節(jié)字體的方法如下:首先依次選擇File->Settings…->Editor->Colors & Fonts->Font,默認(rèn)的主題是無(wú)法直接修改的,所以要先點(diǎn)擊一下Save As…,新建一個(gè)相同的主題,然后調(diào)整Size值,如下圖所示:
? ? ? ? 在彈出的Android SDK Manager界面中,選擇以下若干項(xiàng):
? ? ? ? 因?yàn)槲彝瑫r(shí)也安裝了API 21的SDK,所以我也勾選了Build-tools 21.1.2。
? ? ? ? 其他包如Samples for SDK與Sources for Android SDK是可選的。雖然平時(shí)采用x86架構(gòu)的手機(jī)并不多見,但我們安裝x86系統(tǒng)鏡像主要是為了模擬器用。用Android Studio自帶的AVD Manager創(chuàng)建虛擬設(shè)備時(shí),它會(huì)推薦你使用帶有Google API的鏡像,所以我把所有鏡像都安裝了。
? ? ? ? 這里的HAXM驅(qū)動(dòng)結(jié)合上一圖中勾選的x86系統(tǒng)鏡像,在大多數(shù)Intel CPU上可以明顯提高模擬器的運(yùn)行速度。其他包是可選的。
? ? ? ? 選擇完畢后,點(diǎn)擊Install packages…就可以開始安裝了。安裝過程十分耗時(shí),而且如果網(wǎng)絡(luò)不穩(wěn)定的話還會(huì)經(jīng)常斷開連接,所以這個(gè)過程很需要耐心。
? ? ? ? 安裝完畢后,關(guān)閉Android SDK Manager。接下來(lái)就可以創(chuàng)建虛擬設(shè)備了。
Android模擬器
? ? ? ? 1.AVD Manager
? ? ? ? 這是Android SDK自帶的Android模擬器,也是Android Studio默認(rèn)的模擬器。
? ? ? ? 如果你之前安裝了HAXM驅(qū)動(dòng),打開C:\dev-lib\android-sdk\extras\intel\Hardware_Accelerated_Execution_Manager,準(zhǔn)備安裝該驅(qū)動(dòng)。先打開命令提示符,把haxm_check.exe拖動(dòng)到命令提示符窗口內(nèi),按回車,檢查你的CPU是否支持VT和NX:
? ? ? ? 如果二者都為Yes,雙擊intelhaxm-android.exe,安裝HAXM。在安裝過程中會(huì)詢問為模擬器占用多少內(nèi)存用來(lái)優(yōu)化速度,采用默認(rèn)值就好。
? ? ? ? 點(diǎn)擊Android Studio上方的按鈕,打開Android Virtual Device Manager。點(diǎn)擊Create Virtual Device…:
? ? ? ? 第二步選擇虛擬設(shè)備的外觀與尺寸,這里采用默認(rèn)的Nexus 5:
? ? ? ? 下一步,選擇模擬器的Android版本。這里我選擇API 23,ABI x86的:
? ? ? ? 再點(diǎn)擊Next,設(shè)置虛擬設(shè)備的詳細(xì)屬性。如果之前安裝了HAXM,這里就要勾選Use Host GPU,以提高模擬器的運(yùn)行速度。在Android Studio 2.1.2中,該項(xiàng)顯示為Graphics,如果你的顯卡支持OpenGL,可以選擇Hardware – GLES 2.0。還有需要注意的是,由于虛擬設(shè)備本身屏幕分辨率就比較高(一般為1080×1920以上),我們還要根據(jù)計(jì)算機(jī)的實(shí)際屏幕分辨率來(lái)設(shè)置Scale,我一般選擇2dp on device=1px on screen,相當(dāng)于把虛擬設(shè)備的屏幕長(zhǎng)寬縮小了一半。如果是在筆記本上進(jìn)行開發(fā),尤其是Orientation采用Portrait(豎屏模式)時(shí),這個(gè)比例還要調(diào)高一些:
? ? ? ? 點(diǎn)擊左下角的Show Advanced Settings,可以設(shè)置更詳細(xì)的參數(shù)。在開發(fā)圖像處理應(yīng)用時(shí),最好為虛擬設(shè)備添加一個(gè)攝像頭:
? ? ? ? 點(diǎn)擊Finish,虛擬設(shè)備就創(chuàng)建好了。在AVD Manager界面中點(diǎn)擊對(duì)應(yīng)虛擬設(shè)備后面的三角形按鈕,就可以啟動(dòng)模擬器,打開相應(yīng)的虛擬設(shè)備:
? ? ? ? Android Studio自帶模擬器的一個(gè)很大的弊端是,運(yùn)行緩慢。甚至在我的年老體衰的筆記本電腦上根本無(wú)法啟動(dòng)。在使用這個(gè)模擬器時(shí),要注意機(jī)器的空閑內(nèi)存、HAXM占用內(nèi)存與虛擬設(shè)備RAM之間的協(xié)調(diào)。否則即使安裝了HAXM,也可能由于內(nèi)存不足的原因無(wú)法開啟加速模式,導(dǎo)致運(yùn)行速度更慢。
? ? ? ? 2.Genymotion
? ? ? ? Genymotion是Genymobile開發(fā)的一款A(yù)ndroid模擬器,運(yùn)行速度比Android SDK自帶的模擬器快很多,而且提供了包括網(wǎng)絡(luò)、攝像頭、電池電量、信號(hào)強(qiáng)度、GPS等參數(shù)的模擬。在某些情況下,它的運(yùn)行速度甚至比實(shí)際設(shè)備還要快。Genymotion的官方網(wǎng)站是https://www.genymotion.com/,需要注冊(cè)一個(gè)賬戶才能下載,選擇personal use就能免費(fèi)使用大部分功能。
? ? ? ? 下載并安裝好Genymotion之后,打開軟件,點(diǎn)擊Settings->ADB->Use custom Android SDK tools,然后選擇之前下載的Android SDK目錄,比如C:/dev-lib/android-sdk。如果下方顯示一個(gè)對(duì)號(hào),則說明Android SDK配置成功,無(wú)需為Genymotion單獨(dú)下載一個(gè)Android SDK了。
? ? ? ? 此外,還要為Android Studio安裝一個(gè)Genymotion插件。打開Android Studio,依次點(diǎn)擊File->Settings…->Plugins->Browse repositories…,在左上角的搜索框搜索“genymotion”,找到Genymotion,點(diǎn)擊Instal plugin。安裝完成之后,關(guān)閉并重新打開Android Studio。(參考:https://docs.genymotion.com/pdf/PDF_Plugin_for_Android_Studio/Plugin-for-Android-Studio-1.0.7-Guide.pdf)
? ? ? ? 點(diǎn)擊Android Studio上方的按鈕,就能打開Genymotion了。
? ? ? ? 用Genymotion創(chuàng)建虛擬設(shè)備的過程非常簡(jiǎn)單,這里就不贅述了。在需要調(diào)試應(yīng)用時(shí),只需要點(diǎn)擊按鈕,然后在彈出的Device Chooser窗口中選擇Genymotion的虛擬設(shè)備即可:
? ? ? ? Genymotion模擬器運(yùn)行時(shí)的效果如下:
? ? ? ? 有時(shí)即使設(shè)置了自定義的Android SDK路徑,新建虛擬設(shè)備時(shí)Genymotion還是會(huì)自己下載一個(gè)兩百多MB的SDK。也許是同一API的SDK具體版本不同造成的,對(duì)此我也沒有什么辦法,好在下載速度不是太慢:)
為項(xiàng)目配置OpenCV
? ? ? ? 1.建立Android項(xiàng)目。打開Android Studio,點(diǎn)擊File->New Project…:
? ? ? ? 為項(xiàng)目設(shè)置應(yīng)用名稱、包名前綴和項(xiàng)目位置:
? ? ? ? 點(diǎn)擊Next。設(shè)置應(yīng)用支持的最低Android API級(jí)別,這里設(shè)置為API 16:
? ? ? ? 點(diǎn)擊Next。選擇默認(rèn)Activity的外觀,為了讓界面盡量簡(jiǎn)潔,這里選擇Empty Activity:
? ? ? ? 點(diǎn)擊Next。設(shè)置Activity文件名稱以及對(duì)應(yīng)Layout文件名稱,這里采用默認(rèn)值:
? ? ? ? 點(diǎn)擊Finish。等待Android Studio載入相關(guān)文件、同步配置并自動(dòng)編譯之后,一個(gè)基本的Android項(xiàng)目就建立好了。
? ? ? ? 2.導(dǎo)入OpenCV庫(kù)。點(diǎn)擊File->New->Import Module…:
? ? ? ? 在彈出的窗口中找到OpenCV Android SDK下的sdk\java文件夾,比如C:\dev-lib\OpenCV-android-sdk\sdk\java:
? ? ? ? 點(diǎn)擊Next。保持默認(rèn)選項(xiàng)不動(dòng),再點(diǎn)擊Finish,完成OpenCV庫(kù)的導(dǎo)入:
? ? ? ? 此時(shí),Android Studio會(huì)自動(dòng)更新項(xiàng)目配置。由于OpenCV庫(kù)本身默認(rèn)配置的原因,在這個(gè)過程中會(huì)產(chǎn)生很多錯(cuò)誤(如下圖最下邊的紅框所示)。這就需要我們修改OpenCVLibrary310\build.gradle文件,然后重新同步Gradle配置:
? ? ? ? 修改OpenCVLibrary310\build.gradle文件為如下內(nèi)容:
apply plugin: 'com.android.library'android {compileSdkVersion 23buildToolsVersion "23.0.2"defaultConfig {minSdkVersion 16targetSdkVersion 23}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'}} }| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | apply plugin: 'com.android.library' android { ????compileSdkVersion 23 ????buildToolsVersion "23.0.2" ????defaultConfig { ????????minSdkVersion 16 ????????targetSdkVersion 23 ????} ????buildTypes { ????????release { ????????????minifyEnabled false ????????????proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' ????????} ????} } |
? ? ? ? 修改好后,點(diǎn)擊上面圖片中標(biāo)示出的Try Again,或者點(diǎn)擊Android Studio上方的按鈕,同步項(xiàng)目的Gradle配置。同步完成后,就可以向Android項(xiàng)目中整合OpenCV模塊了。
? ? ? ? 3.將Android項(xiàng)目與OpenCV整合。點(diǎn)擊File->Project Structure…:
? ? ? ? 在彈出的Project Structure窗口中選擇左邊的app,在右邊選擇Dependencies,然后點(diǎn)擊按鈕,選擇Module dependency:
? ? ? ? 在彈出的窗口中選擇OpenCVLibrary310,點(diǎn)擊兩次OK,保存并關(guān)閉兩個(gè)窗口:
? ? ? ? 至此,你的Android項(xiàng)目就支持OpenCV的開發(fā)了!
? ? ? ? 另外,在設(shè)備上調(diào)試APP之前,不要忘記先安裝對(duì)應(yīng)架構(gòu)的OpenCV Manager,該軟件包包含了所有OpenCV的庫(kù)函數(shù)。否則會(huì)出現(xiàn)Package not found的錯(cuò)誤:
? ? ? ? OpenCV Manager位于OpenCV Android SDK的apk目錄下,比如C:\dev-lib\OpenCV-android-sdk\apk,然后根據(jù)你的設(shè)備來(lái)選擇安裝包。比如,如果手機(jī)的CPU采用ARM v7架構(gòu),就要安裝OpenCV_3.1.0_Manager_3.10_armeabi-v7a.apk;如果是x86架構(gòu),就要安裝OpenCV_3.1.0_Manager_3.10_x86.apk。
? ? ? ? 對(duì)于實(shí)際設(shè)備,把OpenCV Manager的apk直接拷貝到設(shè)備安裝即可;如果是虛擬設(shè)備,需要在命令提示符中用adb install命令來(lái)安裝,比如:
C:\dev-lib\android-sdk\platform-tools\adb install C:\dev-lib\OpenCV-android-sdk\apk\OpenCV_3.1.0_Manager_3.10_x86.apk| 1 | C:\dev-lib\android-sdk\platform-tools\adb install C:\dev-lib\OpenCV-android-sdk\apk\OpenCV_3.1.0_Manager_3.10_x86.apk |
總結(jié)
以上是生活随笔為你收集整理的在Android Studio上进行OpenCV 3.1开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eigen 矩阵运算库在实际项目中的使用
- 下一篇: 使用Java api 和 jni混合方式