2014-06-07 4 views
3

Большинство примеров в Интернете относительно использования OpenCV с Android Studio включают в себя импорт модуля OpenCV в ваш проект. Тем не менее, я пытаюсь использовать OpenCV как банку, чтобы я не загромождал свой исходный репозиторий с копиями OpenCV.

Итак, это шаги, которые я делаю для своего приложения под названием «приложение».

A. Создайте каталог libs в/Project/apps. Поместите туда банку OpenCV. Также поместите туда opencv native libs в подкаталоги.

B. В /Project/app/build.gradle сделайте следующее

Поместите эти строки: в верхней части

repositories { flatDir { dirs 'libs' } } 

Помещенный эти строки в разделе андроида:

sourceSets.main.jniLibs.srcDirs = ['libs'] 

Положить эту строку в раздел зависимостей:

compile fileTree(dir: 'libs', include: ['*.jar']) 

C. Добавьте эти строки в AndroidManifest.xml после тега приложения.

<uses-sdk android:minSdkVersion="9"/> 
    <uses-permission android:name="android.permission.CAMERA"/> 
    <uses-feature android:name="android.hardware.camera" android:required="false"/> 
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/> 
    <uses-feature android:name="android.hardware.camera.front" android:required="false"/> 
    <uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/> 

D. Не уверен, если это требуется или нет, я пробовал и без - кажется, нет никакой разницы: добавить следующую строку внутри тега приложения в AndroidManifest.xml:

 <uses-library android:name="org.opencv.android.JavaCameraView" /> 

Е. Наконец вот мой макет XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:opencv="http://schemas.android.com/apk/lib/org.opencv.android.JavaCameraView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <org.opencv.android.JavaCameraView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:visibility="gone" 
     android:id="@+id/main_activity_surface_view" 
     opencv:show_fps="true" 
     opencv:camera_id="any" /> 

    </LinearLayout> 

Это все работает отлично. Я могу ссылаться на OpenCV в своей деятельности без ошибок. Однако редактор макета дает следующую ошибку: Следующие классы не могут быть созданы: org.opencv.android.JavaCameraView. java.lang.ClassNotFoundException: org.opencv.R $ стиль.

Если бы это была просто проблема с рендерингом, возможно, я мог бы ее игнорировать, однако аналогичная ошибка возникает, когда я запускаю ее.

Что мне не хватает?

(Я знаю несколько похожий вопрос в SO относительно этой ошибки, но его решение связано с импортом весь модуль, который действительно работает, но это именно то, что я пытаюсь избежать.)

+0

Если OpenCV использует ресурсы (и я не смотрел на него, а по сообщению об ошибке, похоже, что это так), вы не можете включить его в качестве банки. Вам нужно будет построить aar из этого и включить это. –

+0

Конечно! Это создает общий смысл. Спасибо, что исправил это! –

+0

Добавлено как ответ с большим количеством объяснений. –

ответ

3

сообщение об ошибке of

The following classes could not be instantiated: org.opencv.android.JavaCameraView. java.lang.ClassNotFoundException: org.opencv.R$styleable

указывает, что он не находит ресурсы OpenCV при выполнении сборки. Если вы включите OpenCV в библиотеку jar, это станет источником проблемы - банки не имеют в них ресурсов.

Решение заключается в создании OpenCV как AAR, поскольку у AARs есть ресурсы. Создайте для него библиотечный модуль, скомпилируйте его в AAR и повторно используйте этот архив везде, где вам нужно.

+1

Я использую Gradle и включаю OpenCV в качестве модуля градиента. Я все еще сталкиваюсь с той же ошибкой. Можете ли вы поделиться тем, как включить OpenCV в качестве AAR в градиенте? – inder

Смежные вопросы