JavaCV + Android Studio + gradle - возможно?
Я пытаюсь использовать JavaCV с Android Studio и Gradle. Я написал такой фрагмент кода:
repositories {
mavenCentral()
maven {
url "http://maven2.javacv.googlecode.com/git/"
}
}
dependencies {
compile files('libs/android-support-v4.jar')
compile group: 'com.googlecode.javacpp', name: 'javacpp', version: '0.5'
compile group: 'com.googlecode.javacv', name: 'javacv', version: '0.5'
}
и я вижу импортированные библиотеки в внешних библиотеках. Поэтому я попытался запустить это:
...
IplImage zdjecie=cvLoadImage(Environment.getExternalStorageDirectory().getPath()+ "/1.bmp");
cvSaveImage(Environment.getExternalStorageDirectory().getPath()
+ "/2.bmp", zdjecie);
...
и я получил ошибку:
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load jniopencv_core: findLibrary returned null
... потому что я не знаю, что мне делать с opencv (и другими).so файлами.
Итак, как мы должны использовать JavaCV в Android Studio?
Ответы
Ответ 1
1.WARNING:
Это не достаточно!:
dependencies { compile group: 'org.bytedeco', name: 'javacv', version: '0.9'}
2.EDIT: Извините за ошибку, мое недавнее решение, которое
Я разместил здесь и сказал, что только о строке выше было неправильно. Но я проверил это, и это работает для меня:
a) Добавить зависимости
dependencies {
compile group: 'org.bytedeco', name: 'javacv', version: '0.9'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.9-0.9', classifier: 'android-arm'
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.3-0.9', classifier: 'android-arm'
}
b) Создайте jniLibs dir внутри вашего проекта (на том же уровне, что и обычный каталог libs. EDIT: If
у вас есть некоторые проблемы, попробуйте переместить jniLibs в app/src/main).
c) Добавьте необходимые .so файлы, извлеченные из opencv-android-arm.jar и ffmpeg-android-arm.jar(или только файлы, которые вам действительно нужны), в созданную директорию jniLibs. (Если вы не знаете, что
Я говорю, вы можете скачать javacv-0.9-bin.zip из страницы JavaCV и внутри нее
вы можете найти эти 2.jars).
Ответ 2
Вставка внутри зависимостей build.gradle
работала для меня:
compile ‘org.bytedeco:javacv:+’
compile group: ‘org.bytedeco.javacpp-presets’, name: ‘opencv’, version: ‘2.4.10–0.10', classifier: ‘android-arm’
compile group: ‘org.bytedeco.javacpp-presets’, name: ‘ffmpeg’, version: ‘2.5.1–0.10', classifier: ‘android-arm’
Ответ 3
Для современного решения (JavaCV 1.1 и Android Studio 2.1.1) см. мои пошаговые инструкции в Gist. JavaCV 1.2 в настоящее время не любит Android 6.
Этот tut будет использовать JavaCV 1.1, в версии 1.2 в настоящее время проблема SIGSEGV. JavaCV 1.1 поставляется с FFmpeg 2.8.1.
- Получите предварительные двоичные файлы здесь.
- Извлеките и скопируйте эти файлы:
- javacpp.jar(существенный).
- javacv.jar(существенный).
- ffmpeg.jar(важно, если вы используете FFmpeg).
- ffmpeg-android-arm.jar(для центрального процессора).
- ffmpeg-android-x86.jar(необязательно для процессора x86).
в папку
libs
вашего проекта (app/libs
в моем случае).
- Нажмите
app
→ F4
→ Dependencies
→ +
→ File dependencies
→ выбрать все предыдущие .jar.
- Временно, из-за этой проблемы, нам нужно установить
targetSdkVersion 22
приложение build.gradle
.
- Возможно, нужно установить эти
packagingOptions
в build.gradle
:
android { compileSdkVersion 23 buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example.test"
minSdkVersion 16
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties'
exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'
//might need these if you use openCV
//exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties'
//exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml'
}
}
Ответ 4
К сожалению, у меня возникли проблемы с решением пользователя2645214 (все еще получаю java.lang.UnsatisfiedLinkError), но я нашел еще один, поэтому решил поделиться им с теми, у кого была бы такая же проблема.
Начиная с версии 0.7.3 есть еще один способ включить ваши *.so файлы - вы можете просто поместить их в /src/main/jniLibs (просто создайте каталог jniLibs, если у вас его нет), и он должен работать.
Также мой файл build.gradle выглядит так:
apply plugin: 'android'
repositories {
mavenCentral()
maven { url 'http://maven2.javacv.googlecode.com/git/' }
}
dependencies {
compile 'com.android.support:appcompat-v7:20.+'
compile 'com.googlecode.javacpp:javacpp:0.7'
compile 'com.googlecode.javacv:javacv:0.7'
}
android {
compileSdkVersion 20
buildToolsVersion '20.0.0'
defaultConfig {
applicationId "com.example.agp.testapplication2"
minSdkVersion 15
targetSdkVersion 20
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
Ответ 5
Я столкнулся с этой проблемой в Windows 7 x64.
Вот раздел из моего файла gradle.build, который разрешил проблему:
compile("org.bytedeco:javacv:0.11")
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")
Ответ 6
ИЗМЕНИТЬ. Решение в этом сообщении устарело и может содержать некоторые ошибки. Пожалуйста, см. Недавнее, правильное сообщение в нижней части страницы.
Хорошо, я сделал это сам:). Итак, вот , что мы должны сделать, чтобы использовать JavaCV в Android Studio:
1). Сначала мы должны добавить такие зависимости для build.gradle внутри проекта:
dependencies {
compile group: 'com.googlecode.javacpp', name: 'javacpp', version: '0.7'
compile group: 'com.googlecode.javacv', name: 'javacv', version: '0.7'}
(я имею в виду: build.gradle внутри нашего каталога модулей)
Спасибо, что мы получаем javacv.jar и javacpp.jar внутри внешних библиотек (если нет, мы
должен перезапустить Android Studio).
2) Если мы следуем инструкциям Eclipse на
официальный сайт javacv
мы сейчас находимся в пункте 4.:
Извлеките все файлы *.so rom javacv-android-arm.jar, opencv-2.4.8-android-arm.jar и ffmpeg-2.1.1-android-arm.jar непосредственно во вновь создаваемую папку "libs/armeabi", без создавая любой из подкаталогов, найденных в файлах JAR.
Мы должны извлечь все *.so файлы, которые нам нужны, но затем мы должны присоединиться к ним в нашем проекте другим специальным способом:
Третий ответ здесь говорит об этом,
но в целом мы должны:
- Создайте новый каталог 'armeabi'
- Поместите интересные .so файлы в каталог 'armeabi'
- Создать armeabi.zip
- Изменить расширение armeabi.zip на armeabi.jar
- Поместите armeabi.jar в каталог 'libs'
- Убедитесь, что build.gradle нашего модуля содержит такую зависимость:
compile fileTree (dir: 'libs', include: ['*.jar'])
3) Наслаждайтесь OpenCV и JavaCv в Android Studio (и не забудьте добавить
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
на ваш AndroidManifest.xml, если вы хотите прочитать/сохранить изображение с/на SDCard и попробуйте это,
что ваш проект работает хорошо).
/////////////////////////////////////////////////////////
Если что-то не так, напишите об этом в комментариях.
Ответ 7
Если вы попробуете с javacv 1.2, мы должны сделать некоторые дополнительные шаги, чтобы приступить к работе. Вот мой файл build.gradle
android {
compileSdkVersion 24
buildToolsVersion "24.0.2"
defaultConfig {
applicationId "org.audiorecording"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties'
exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'
//might need these if you use openCV
exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties'
exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml'
}
}
repositories {
mavenCentral()
}
configurations {
all*.exclude group: 'org.bytedeco', module: 'javacpp-presets'
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:design:24.2.1'
compile 'org.bytedeco:javacv:1.2'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.1.0-1.2', classifier: 'android-arm'
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '3.0.2-1.2', classifier: 'android-arm'
}