🔰
OpenCV + AndroidStudio + Kotlin (2023/09)
バージョン
- OpenCV 4.8.0 android
- Android Studio Giraffe | 2022.3.1 Patch 1
- Gradle 8
手順(準備)
- OpenCV zip を解凍する
- OpenCV の sdk/build.gradle を編集する
sdk/build.gradle
apply plugin: 'com.android.library'
apply plugin: 'org.jetbrains.kotlin.android' // 変更
android {
defaultConfig {
compileSdkVersion 26 // Import後に修正
namespace 'org.opencv' // 追加
buildFeatures { // 追加
buildConfig true
aidl true
}
- Android Studio で新規プロジェクトを作成しておく
手順(OpenCV の Import)
- プロジェクトの build.gradle.kts(Project: X) を編集する
build.gradle.kts
plugins {
id("com.android.application") version "8.1.1" apply false
id("com.android.library") version "8.1.1" apply false // 追加
id("org.jetbrains.kotlin.android") version "1.8.10" apply false
- Android Studio のメニュー File -> New: -> Import Module...
- "Import module from source" で OpenCV の sdk フォルダを指定する。Module name は ":opencv" とする
- Import で作成された settings.gradle をファイルごと削除する
settings.gradle
include ':opencv' // Import 時に作成されるファイルを削除する
- settings.gradle.kts(Project Settings) を編集する
settings.gradle.kts
include(":app", ":opencv") // 変更
- Gradle の (Sync | Try Again) でエラー無く build されるか確認
- Android Studio のメニュー File -> Project Structure...
- Dependencies を選択し、 app に対して Module Dependency で opencv を追加する
build.gradle.kts
dependencies {
implementation(project(mapOf("path" to ":opencv"))) // 追加される
- build.gradle(Module :opencv) を編集する
build.gradle(Module_opencv)
android {
// 各 SDK バージョンを app 側と合わせる
compileSdkVersion 33
namespace 'org.opencv'
defaultConfig {
minSdkVersion 30
targetSdkVersion 33
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
- 動作を確認
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// OpenCV実装を呼び出す際に No Implementation 例外が送出されることを防ぐ
OpenCVLoader.initDebug();
// OpenCV のバージョンが出力される
Log.d("Test", OpenCVLoader.OPENCV_VERSION);
(参考) 作業中に発生するエラー
Import 直後に出るエラー
Build file 'D:\Users\user1\AndroidStudioProjects\App1\build.gradle.kts' line: 2
Plugin [id: 'com.android.application', version: '8.1.1', apply: false] was not found in any of the following sources:
* Exception is:
org.gradle.api.plugins.UnknownPluginException: Plugin [id: 'com.android.application', version: '8.1.1', apply: false] was not found in any of the following sources:
OpenCV の build.gradle を修正しないと出るエラー
OpenCV の build.gradle に "namespace" が定義されていないエラー
Namespace not specified. Please specify a namespace in the module's build.gradle file like so:
android {
namespace 'com.example.namespace'
}
app と opencv のSDKバージョンが合っていない?
jvm target compatibility should be set to the same Java version.
Consider using JVM toolchain: https://kotl.in/gradle/jvm/toolchain...
クラスを解決できないエラー
mEngineService = OpenCVEngineInterface.Stub.asInterface(service);
import org.opencv.BuildConfig;
onCreate で initDebug しないと出るエラー
FATAL EXCEPTION: pool-2-thread-1
Process: com.example.chipviewer7, PID: 21140
java.lang.UnsatisfiedLinkError: No implementation found for long org.opencv.core.Mat.n_Mat(int, int, int) (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__III)
Discussion