Большинство примеров в Интернете относительно использования 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 относительно этой ошибки, но его решение связано с импортом весь модуль, который действительно работает, но это именно то, что я пытаюсь избежать.)
Если OpenCV использует ресурсы (и я не смотрел на него, а по сообщению об ошибке, похоже, что это так), вы не можете включить его в качестве банки. Вам нужно будет построить aar из этого и включить это. –
Конечно! Это создает общий смысл. Спасибо, что исправил это! –
Добавлено как ответ с большим количеством объяснений. –