2021年3月5日 星期五

Android Studio - Android Studio + NDK + OpenCV 安裝和設置(二十三)

Android Studio - Android Studio + NDK + OpenCV 安裝和設置(二十三):

完成了 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
1﹒導入 OpenCV 到項目
File→New→Import Module→OpenCV-android-sdk\sdk\java →Next→Finish
C:\Your OpenCV Program\OpenCV-android-sdk\sdk\java
導入 OpenCV 到項目
2﹒選擇 OpenCV 導入後,會自動生成一個 openCVLibrary343 模組名,自己也可以修改,建議使用預設值,因為隨 sdk 的那些 samples 裡面都用的是這個名字。然後就是將匯入的 OpenCV AndroidManifests.xml、build.gradle 修改
成功 OpenCV 導入
3﹒將 openCVLibrary343 的 AndroidManifests.xml 刪除 <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" />
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">

 

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" />

</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 的依賴
6﹒app 的 build.gradle 加入 implementation project(path: ':openCVLibrary343')。
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
8﹒拷貝 OpenCV 的 JNI 介面
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 介面
9﹒對 CMakeList.txt 設定檔進行修改,作為通過 JNI 調用 C++ 設置,主要是修改 CMakeLists.xml使用 OpenCV 動態庫及設置 include 資料夾的位址。
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

2021年 3月 5日(Fri)天氣報告
氣溫:65.0°F / 18.0°C @ 08:00
風速:每小時 14 公里
相對濕度:百分之 91%
天氣:多雲

沒有留言:

張貼留言