踩了三四天的坑,今天終于順利跑通了,原來是toolchain的問題,外網(wǎng)的教程大多都是用opencv source里的toolchain,會導(dǎo)致各種奇奇怪怪的錯誤(std not a member of std,canot find iostram等等) 環(huán)境配置本文編譯環(huán)境如下: 首先需要下載OpenCV 4.3.0 源碼,根據(jù)需求再加上OpenCV_contrib 4.3.0 源碼,解壓放到你記得住的文件夾 下載 cmake 3.18 圖方便直接選安裝包就行 cmake-3.18.0-rc1-win64-x64.msi
下載 Mingw(建議用installer傻瓜式安裝)選擇下列需要安裝的組件,右鍵選擇 Mark for Installation ,之后選擇 Menu -> Installation -> Apply Changes
安裝完后把mingw加入系統(tǒng)環(huán)境變量(win鍵搜索環(huán)境變量就有,編輯完后重啟系統(tǒng)生效)
下載 Android NDK 和 SDK,可以直接在官網(wǎng)下,但這里推薦直接在 Android Studio 里安排。打開AS任意一個項目,在工具欄選擇Tools -> SDK Maneger 。
打開后選擇SDK Tools,勾選右下角 Show Package Details,勾選一個NDK版本,Apply。
SDK同理,安裝完后打開 Project Structure -> SKD Location 找到SDK路徑。
同樣要寫到環(huán)境變量里 NDK則在 Sdk\ndk\21.2.6472646 ,不寫進環(huán)境變量也沒問題,待會要在cmake里配置
安裝 JDK,最低需要 8,這里用 8u251 (過高版本可能不兼容)
同樣需要配置環(huán)境變量
還需加入
對著打就行,重啟后可以用cmd測試是否配置成功
下載 ANT 1.10.7,放到你記得住的目錄
編譯配置新建一個存放編譯結(jié)果的文件夾,比如我就放在 G:\opencv\android_build ,解壓后源碼放在 G:\opencv\source 運行 cmake-gui (找不到就按win搜索)
將源碼和輸出地址填入這里 點擊 Add Entry ,添加以下幾個屬性 ANDROID_NDK 類型為PATH,填入你的NDK路徑(AS下載的就在Sdk\ndk\21.2.6472646 )
ANDROID_SDK PATH,填入你的SDK路徑
ANDROID_ABI STRING,設(shè)置平臺,不填默認為 armeabi-v7a
ANDROID_NATIVE_API_LEVEL STRING,默認API為21
ANT_EXECUTABLE PATH,填入ANT路徑下的bin(用于java 封裝,便于 AS 導(dǎo)入module)
ANDROID_STL STRING,根據(jù)需求寫入c++_static 或c++_shared (默認是gnustl_static)
這時候你可以看到一片紅,不用慌,這是代表新增,不是報錯。我們點擊下方的Configure。 選擇這個選項,Next。 這里需要配置toolchain路徑,注意了,不要用源碼包里的toolchain,用你自己的ndk目錄下的toolchain,不然可能導(dǎo)致一系列頭文件丟失的錯誤,血的教訓(xùn)=_=。 等待Configure完成,一切正常的話應(yīng)該是這樣 如果你需要的話,現(xiàn)在可以添加opencv-contrib模塊,搜索 extra ,在 OPENCV_EXTRA_MODULES_PATH 添加路徑 ....../opencv_contrib-4.3.0/modules 。(需要重新添加NDK路徑) 參數(shù)調(diào)整以下參數(shù)根據(jù)自己需求調(diào)整 BUILD_ANDROID_PROJECTS 不需要示例項目可直接取消勾選
BUILD_ANDROID_EXAMPLES = OFF
BUILD_PERF_TESTS = OFF
BUILD_TESTS = OFF
BUILD_opencv_world = OFF (生成 .so 庫 libopencv_world.so,這是一個集合,不清楚和默認編譯的 libopencv_java3.so 有什么區(qū)別,默認不開啟,如果開啟的話不會復(fù)制 java 層函數(shù),也就是 cmake 的 gui 界面會顯示 Java wrappers: NO)
BUILD_SHARED_LIBS = OFF (如果 On 則只編譯 so 庫)
WITH_CUDA = OFF (CUDA 是 NVidia 推出的并行計算架構(gòu),編譯非安卓 SDK 時建議添加)
WITH_OPENCL = ON (因為我們編譯的是 android sdk,所以建議添加移動端的并行架構(gòu)支持)
WITH_OPENCL_SVM = ON (建議開啟共享虛擬內(nèi)存)
調(diào)整完后再次點擊Configure,完成后點擊Generate。 執(zhí)行編譯完成后通過命令行工具 cmd (管理員身份) 進入 你的build文件夾,或者直接在 buid 文件夾右鍵選擇 Gitbash 輸入命令 mingw32-make.exe 如果沒有出現(xiàn)報錯,則再輸入 mingw32-make.exe install 編譯完成,打開AS的項目,在工具欄選擇File -> New -> Import_Module ,把 build/install/sdk/java 導(dǎo)入即可(如果你有配置ANT的話)或者直接copy編譯出來的.a 或者.so 在AS里連接,之后可能會寫。 錯誤處理總結(jié)我之后在寫,可以把報錯貼到評論區(qū)或者私聊問我。
|