// This file is part of OpenCV project. // It is subject to the license terms in the LICENSE file found in the top-level directory // of this distribution and at http://opencv.org/license.html. // // Notes about integration OpenCV into existed Android Studio application project are below (application 'app' module should exist). // // This file is located in /sdk directory (near 'etc', 'java', 'native' subdirectories) // // Add module into Android Studio application project: // // - Android Studio way: // (will copy almost all OpenCV Android SDK into your project, ~200Mb) // // Import module: Menu -> "File" -> "New" -> "Module" -> "Import Gradle project": // Source directory: select this "sdk" directory // Module name: ":opencv" // // - or attach library module from OpenCV Android SDK // (without copying into application project directory, allow to share the same module between projects) // // Edit "settings.gradle" and add these lines: // // def opencvsdk='' // // You can put declaration above into gradle.properties file instead (including file in HOME directory), // // but without 'def' and apostrophe symbols ('): opencvsdk= // include ':opencv' // project(':opencv').projectDir = new File(opencvsdk + '/sdk') // // // // Add dependency into application module: // // - Android Studio way: // "Open Module Settings" (F4) -> "Dependencies" tab // // - or add "project(':opencv')" dependency into app/build.gradle: // // dependencies { // implementation fileTree(dir: 'libs', include: ['*.jar']) // ... // implementation project(':opencv') // } // // // // Load OpenCV native library before using: // // - avoid using of "OpenCVLoader.initAsync()" approach - it is deprecated // It may load library with different version (from OpenCV Android Manager, which is installed separatelly on device) // // - use "System.loadLibrary("opencv_java4")" or "OpenCVLoader.initDebug()" // TODO: Add accurate API to load OpenCV native library // // // // Native C++ support (necessary to use OpenCV in native code of application only): // // - Use find_package() in app/CMakeLists.txt: // // find_package(OpenCV @OPENCV_VERSION_MAJOR@.@OPENCV_VERSION_MINOR@ REQUIRED java) // ... // target_link_libraries(native-lib ${OpenCV_LIBRARIES}) // // - Add "OpenCV_DIR" and enable C++ exceptions/RTTI support via app/build.gradle // Documentation about CMake options: https://developer.android.com/ndk/guides/cmake.html // // defaultConfig { // ... // externalNativeBuild { // cmake { // cppFlags "-std=c++11 -frtti -fexceptions" // arguments "-DOpenCV_DIR=" + opencvsdk + "/sdk/native/jni" // , "-DANDROID_ARM_NEON=TRUE" // } // } // } // // - (optional) Limit/filter ABIs to build ('android' scope of 'app/build.gradle'): // Useful information: https://developer.android.com/studio/build/gradle-tips.html (Configure separate APKs per ABI) // // splits { // abi { // enable true // universalApk false // reset() // include 'armeabi-v7a' // , 'x86', 'x86_64', 'arm64-v8a' // } // } // apply plugin: 'com.android.library' @MAVEN_PUBLISH_PLUGIN_DECLARATION@ try { @KOTLIN_PLUGIN_DECLARATION@ println "Configure OpenCV with Kotlin" } catch (Exception e) { println "Configure OpenCV without Kotlin" } def openCVersionName = "@OPENCV_VERSION@" def openCVersionCode = ((@OPENCV_VERSION_MAJOR@ * 100 + @OPENCV_VERSION_MINOR@) * 100 + @OPENCV_VERSION_PATCH@) * 10 + 0 println "OpenCV: " +openCVersionName + " " + project.buildscript.sourceFile android { @OPENCV_ANDROID_NAMESPACE_DECLARATION@ compileSdkVersion @ANDROID_COMPILE_SDK_VERSION@ defaultConfig { minSdkVersion @ANDROID_MIN_SDK_VERSION@ targetSdkVersion @ANDROID_TARGET_SDK_VERSION@ versionCode openCVersionCode versionName openCVersionName externalNativeBuild { cmake { arguments "-DANDROID_STL=@ANDROID_STL@" targets "opencv_jni_shared" } } } @BUILD_GRADLE_COMPILE_OPTIONS@ buildTypes { debug { packagingOptions { doNotStrip '**/*.so' // controlled by OpenCV CMake scripts } } release { packagingOptions { doNotStrip '**/*.so' // controlled by OpenCV CMake scripts } minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } sourceSets { main { jniLibs.srcDirs = [@SOURSE_SETS_JNI_LIBS_SRC_DIRS@] java.srcDirs = [@SOURSE_SETS_JAVA_SRC_DIRS@] res.srcDirs = [@SOURSE_SETS_RES_SRC_DIRS@] manifest.srcFile @SOURSE_SETS_MANIFEST_SRC_FILE@ } } externalNativeBuild { cmake { path (project.projectDir.toString() + '/libcxx_helper/CMakeLists.txt') } } @BUILD_GRADLE_ANDROID_PUBLISHING_CONFIG@ } @BUILD_GRADLE_PUBLISHING_CONFIG@ dependencies { }