안녕하세요
지금 JavaCV를 이용해서 이미지 관련 처리를 하고있는데
현재 갤럭시 S4에서는 아무 이상없이 잘 작동하는데
Note2 에서는 이상하게 javacv를 사용할때 에러가 뜹니다..
뜨는 부분은
opencv_core.MAT test = opencv_imgcodecs.imread(~~);
처음사용하는 이 부분에서 바로 뜹니다..
에러 내용을 보면 길게도 뜨는데
처음
dlopen("/data/app-lib/kr.co.~~~-78/libjniopencv_core.so") failed: dlopen failed: cannot locate symbol "_ZNK2cv14DefaultDeleterI13CvFileStorageEclEPS1_" referenced by "libjniopencv_core.so"...
중간
Caused by: java.lang.NoClassDefFoundError: java.lang.ClassNotFoundException: org.bytedeco.javacpp.opencv_core
끝
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load gnustl_static from loader dalvik.system.PathClassLoader
이 3부분이 의심되는데 결국 opencv_core.so 파일을 못찾아서 그런것 같습니다
저 3개에러 내용으로 5일정도 구글링해서 계속 수정해봤는데 역시 노트2에서만 계속 에러를
못잡고있습니다..
구글링 해보니 대부분 셋팅이 잘못됬다던가 그런내용이라 dependencies 수없이 많이 추가해봤는데
결국 해결을 못하였습니다.. 혹시나 도움좀 주실분 있으시면 감사하겠습니다.
아래는 build.gradle 입니다.. 모든걸 다 넣은듯한..
android {
packagingOptions {
exclude 'META-INF/services/javax.annotation.processing.Processor'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/1.2/javacpp-presets-1.2.pom.xml'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/org.bytedeco.javacpp-presets-1.2.pom.xml'
}
configurations {
all*.exclude group: 'org.bytedeco', module: 'javacpp-presets'
}
sourceSets {
main {
jniLibs.srcDir 'src/main/jniLibs'
}
}
productFlavors {
fat {
flavorDimension "abi"
ndk {
abiFilters "x86", "armeabi-v7a", "armeabi"
versionCode = 0;
}
}
arm {
flavorDimension "abi"
ndk {
abiFilter "armeabi"
versionCode = 1;
}
}
armv7a {
flavorDimension "abi"
ndk {
abiFilter "armeabi-v7a"
versionCode = 3;
}
}
x86 {
flavorDimension "abi"
ndk {
abiFilter "x86"
versionCode = 6;
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'org.bytedeco:javacv:1.2'
compile 'org.bytedeco:javacpp:1.2'
compile group: 'org.bytedeco', name: 'javacv', version: '1.2'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.11-0.11', classifier: 'android-arm'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.11-0.11', classifier: 'android-x86'
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.6.1-0.11', classifier: 'android-arm'
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.6.1-0.11', classifier: 'android-x86'
compile files('libs/opencv.jar')
compile files('libs/ffmpeg.jar')
compile files('libs/javacpp.jar')
compile files('libs/javacv.jar')
compile files('libs/ffmpeg-android-x86.jar')
compile files('libs/ffmpeg-android-arm.jar')
compile files('libs/opencv-android-arm.jar')
compile files('libs/opencv-android-x86.jar')
compile files('libs/javacv-android-arm.jar')
compile files('libs/javacv-android-x86.jar')
compile("org.bytedeco.javacpp-presets:opencv:2.4.11-0.11:windows-x86_64")
compile("org.bytedeco.javacpp-presets:ffmpeg:2.6.1-0.11:windows-x86_64")
compile("org.bytedeco.javacpp-presets:opencv:2.4.11-0.11:android-arm")
compile("org.bytedeco.javacpp-presets:ffmpeg:2.6.1-0.11:android-arm")
compile("org.bytedeco.javacpp-presets:opencv:2.4.11-0.11:android-x86")
compile("org.bytedeco.javacpp-presets:ffmpeg:2.6.1-0.11:android-x86")
}
셋팅 말고도
libs, jinLibs 등등 폴더에 armeabi, armeabi-v7a-x86 생성해서 모든 *.so 파일 다 넣어져 있는 상태입니다.