Intereting Posts
Push-уведомления для Android и iPhone Различные скорости прокрутки (размах) на разных устройствах Android с одинаковой плотностью RecyclerView аварийно завершает работу, когда «пересмотренные или присоединенные виды не могут быть переработаны» Добавить иконки в Android-навигатор? Как увеличить размер значков вкладок в TabLayout CertPathValidatorException: привязка доверия для пути сертификата не найдена – обновите Android Могу ли я программировать для android с использованием любого языка JVM? Получение сообщения об ошибке «Android-загрузчик контента sdk застрял на 0%» Лучший способ избежать дублирования кода, если два класса, расширяющие разные классы Частный просмотр устарел в Android WebView по API 17. Какая альтернатива? Обратный отсчет Android Можете ли вы развернуть устройство через Gradle из командной строки Эффект Android Audio на wav-файле и сохранить его Просмотр ресайклера вертикального списка прокрутки с горизонтальной прокручиваемой строкой Динамически меняет макет

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?

Solutions Collecting From Web of "JavaCV + Android Studio + gradle – возможно?"

Вставка внутри зависимостей 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' 

1. ВНИМАНИЕ: Этого недостаточно !:

  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 в своем проекте (на том же уровне, что и обычный каталог libs. EDIT: Если у вас есть проблемы, попробуйте переместить jniLibs в app / src / main).
C) Добавьте необходимые .so файлы, извлеченные из opencv-android-arm.jar и ffmpeg-android-arm.jar (или только эти файлы, которые вам действительно нужны) для созданного каталога jniLibs. (Если вы не знаете, о чем я говорю, вы можете скачать javacv-0.9-bin.zip с страницы JavaCV и внутри нее вы можете найти эти 2 .jars).

Для современного решения (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.

  1. Получите предварительные двоичные файлы здесь .
  2. Извлеките и скопируйте эти файлы:
    • Javacpp.jar ( существенный ).
    • Javacv.jar ( существенный ).
    • Ffmpeg.jar ( важно, если вы используете FFmpeg ).
    • Ffmpeg-android-arm.jar (для центрального процессора).
    • Ffmpeg-android-x86.jar (необязательно для процессора x86). В папку libs вашего проекта ( app/libs в моем случае).
  3. Нажмите app -> F4 -> Dependencies -> + -> File dependencies -> выберите все предыдущие .jar .
  4. Временно из-за этой проблемы нам нужно установить targetSdkVersion 22 в build.gradle приложения.
  5. Возможно, необходимо установить эти параметры 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' } 

}

К сожалению, у меня были проблемы с решением пользователя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' } } } 

Я столкнулся с этой проблемой в 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") 

РЕДАКТИРОВАТЬ. Решение в этом сообщении устарело и может содержать некоторые ошибки. Пожалуйста, см. Недавнее, правильное сообщение в нижней части страницы.

Хорошо, я сделал это сам :). Итак, вот что мы должны сделать, чтобы использовать 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 файлы, которые нам нужны, но тогда мы должны присоединиться к ним в нашем проекте другим специальным способом: третий ответ здесь говорит об этом, но в целом мы должны:

  1. Создайте новый каталог 'armeabi'
  2. Поместите интересные .so файлы в каталог 'armeabi'
  3. Создать armeabi.zip
  4. Измените расширение armeabi.zip на armeabi.jar
  5. Поместите armeabi.jar в каталог 'libs'
  6. Убедитесь, что 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 и попытаться поблагодарить за это, что ваш проект работает хорошо).

////////////////////////////////////////////////// ///////
Если что-то не так, напишите об этом в комментариях.

Если вы попробуете с 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' }