完成了 NDK(Native Development Kit)安裝和設置後,便可以安裝 OpenCV 程式。Android Studio 配置 OpenCV 的 JNI(Java Native Interface)介面後,可實現 C++ 代碼程式設計,雖然 OpenCV 提供的 Java介面,可以直接在 Android Studio 調用 Java,但由於 OpenCV 是由 C++ 編程組成,使用 JNI 方式調用 OpenCV,會在速度和性能上比較優勝。
- 操作系統:Windows 7 64-bit 版本
- 開發環境:Android Studio 4.0.1 版本
- Gradle 版本:6.1.1
- 手機測試版本:API 19
- 原程式:C:\Development\Development_Android\Android_Project\NDK
- 程式:C:\Development\Development_Android\Android_Project\NDK
- NDK 版本:NDK 21.0.6113669 版本 Android
File→New→Import Module→OpenCV-android-sdk\sdk\java →Next→Finish
C:\Your OpenCV Program\OpenCV-android-sdk\sdk\java
導入 OpenCV 到項目 |
成功 OpenCV 導入 |
openCVLibrary343 / manifests / AndroidManifests.xml修改:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.opencv" android:versionCode="3430" android:versionName="3.4.3">
</manifest> |
4﹒將 openCVLibrary343 的 build.gradle (Module:openCVLibrary343) 修改的 compileSdkVersion 、 buildToolsVersion 、 minSdkVersion 、 targetSdkVersion 值和 app 的build.gradle (Module:app) 相同對應的值。
Gradle Scripts / build.gradle (Module:openCVLibrary343) 修改:
// 匯入的OpenCV作為模組使用 apply plugin: 'com.android.library'
android { //compileSdkVersion 14 //buildToolsVersion "29.0.2"
compileSdkVersion 30 buildToolsVersion "30.0.1"
defaultConfig { //minSdkVersion 8 //targetSdkVersion 21
minSdkVersion 16 targetSdkVersion 30 } |
5﹒然後就是將匯入的 OpenCV 新增為 app 的依賴
File→Project Structure→Dependencies→Modules app→ + →Modules Dependencis → Select openCV343→OK→OK
將匯入的 OpenCV 新增為 app 的依賴 |
Gradle Scripts / build.gradle (Module:app):
externalNativeBuild { cmake { cppFlags "-std=c++11 -frtti -fexceptions" abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' } }
sourceSets { main { //jniLibs.srcDirs = ['src/main/jniLibs'] jniLibs.srcDirs = [] } }
dependencies { implementation project(path: ':openCVLibrary343') } |
- armeabi: 第5代、第6代的 ARM 處理器,早期的手機用的比較多 = 10.4M
- armeabi-v7a: 第7代及以上的 ARM 處理器。2011年15月以後的生產的大部分 Android 設備都使用它 = Vivo 10.7M
- arm64-v8a: 第8代、64位 ARM 處理器,很少設備,三星 Galaxy S6 是其中之一 = 17.4M
- x86:平板、模擬器用得比較多 = 39.2M
- x86_64:64位的平板 = 62.7M
- mips: = 17.9M
- mips64: = 19M
7﹒拷貝 OpenCV 的動態庫
Copy C:\Development\Development_Android\Android _Project\OpenCV_v3.4.3_Android\OpenCV-android-sdk\sdk\native\libs → C:\Development\Development_Android\Android_Working\NDK\app\src\main\jniLibs (修改 libs → jniLibs)
Copy libs → jniLibs |
Copy C:\Development\Development_Android\Android _Project\OpenCV_v3.4.3_Android\OpenCV-android-sdk\sdk\native\jni\include →C:\Development\Development_Android\Android_Working\NDK\app\src\main\cpp
OpenCV 的 JNI 介面 |
app / cpp / CMakeLists.xml 修改:
# 設置include資料夾的位址 set(libs ${CMAKE_SOURCE_DIR}/../) include_directories(${libs}/cpp/include)
# 設置opencv的動態庫,注意這裡需要把專案路徑填寫進去,儘量注意不要填寫錯誤 add_library(libopencv_java3 SHARED IMPORTED) set_target_properties(libopencv_java3 PROPERTIES IMPORTED_LOCATION "${libs}/jniLibs/${ANDROID_ABI}/libopencv_java3.so")
target_link_libraries( # Specifies the target library. native-lib libopencv_java3 |
10﹒完成了 Android Studio NDK + OpenCV 裝和設置。
app / CMakeLists.txt( Default Test OK):
# 設置include資料夾的位址 set(libs ${CMAKE_SOURCE_DIR}/../) include_directories(${libs}/cpp/include) #include_directories(${CMAKE_SOURCE_DIR}/include)
#set(pathToProject C:/Development/Development_Android/Android_Working/NDK) #set(pathToOpenCV C:/Development/Development_Android/Android _Project/OpenCV_v3.4.3_Android/OpenCV-android-sdk)
# 設置opencv的動態庫,注意這裡需要把專案路徑填寫進去,儘量注意不要填寫錯誤 add_library(libopencv_java3 SHARED IMPORTED) set_target_properties(libopencv_java3 PROPERTIES IMPORTED_LOCATION "${libs}/jniLibs/${ANDROID_ABI}/libopencv_java3.so")
libopencv_java3 |
沒有留言:
張貼留言