I created an OpenCV project in C++ and would like to run it on an Android device. I have tried to set up my android project to run native code with no success. I am currently facing this error:
Error:(23,0) Gradle DSL method not found: 'compile()'
I used the following github sample for native android development with opencv as a foundation: https://github.com/jlhonora/opencv-android-sample
So far I have done the following to try and get gradle to synce properly:
updated project properties to look like this:
ndk.dir=C\:\\Android\\sdk\\ndk-bundle
sdk.dir=C\:\\Android\\sdk
opencv.dir=C\:\\Android\\OpenCV-android-sdk
Imported {OpenCV_DIR}\sdk\java as a module and added it as a module dependency in the project structure settings
This is the opencv-sample-master\build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.7.0-beta1'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
dependencies {
compile project(':OpenCVLib')
}
Here is the project's build.gradle:
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
applicationId = "org.honorato.opencvsample"
minSdkVersion.apiLevel = 15
targetSdkVersion.apiLevel = 23
versionCode = 1
versionName = "1.0"
}
ndk {
moduleName = "native"
cppFlags.add("-I${file(getOpenCVDir())}".toString())
cppFlags.add("-frtti")
cppFlags.add("-fexceptions")
ldLibs.addAll(["log", "opencv_java3"])
stl = "gnustl_static"
}
}
android.buildTypes {
release {
// minifyEnabled = false
// proguardFiles = getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
android.productFlavors {
// for detailed abiFilter descriptions, refer to "Supported ABIs" @
// https://developer.android.com/ndk/guides/abis.html#sa
create("arm") {
ndk.abiFilters.add("armeabi")
ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi')}".toString())
}
create("arm7") {
ndk.abiFilters.add("armeabi-v7a")
ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi-v7a')}".toString())
}
create("arm8") {
ndk.abiFilters.add("arm64-v8a")
ndk.ldFlags.add("-L${file('src/main/jniLibs/arm64-v8a')}".toString())
}
}
}
def getOpenCVDir() {
Properties properties = new Properties()
properties.load(new File(rootDir.absolutePath + "/local.properties").newDataInputStream())
def externalModuleDir = properties.getProperty('opencv.dir', null)
if (externalModuleDir == null) {
throw new GradleException(
"OpenCV location not found. Define location with opencv.dir in the local.properties file!")
}
return externalModuleDir
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.1.1'
compile project(':openCVLibrary300')
}
And finally, the opencv library's build.gradle:
apply plugin: 'com.android.library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':{DIR}:workspace:appcompat_v7')
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}
If anyone can help me with this issue and how to get started with native android development with opencv, I would highly appreciate it!
Your problem might come from your depenciencies flag:
compile project(':openCVLibrary300')
As you defined your project with gradle.0.7.0 alpha and probably your opencv gradle files are compiled from gradle stable release 2.8 or 2.10.
gradle 0.7.0
apply plugin: 'com.android.model.application'
gradle 2.10
apply plugin: 'com.android.library'
So probably, your opencv gradle file is not correctly defined.
So you have two options.
If you are going to debug your app in native mode, change your opencv gradle files to 0.7.0 or change your code to gradle 2.10.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With