Не получается подключить OpenCV для android-SDK в Intellij IDEA, gradle

201
18 июля 2018, 03:20

Доброе время суток. Уже кучу времени мучаюсь с проблемой подключения OpenCV для android в среду Intellij IDEA. Делала все по этой инструкции: https://habr.com/post/262089/. Она для Anroid Studio, но для IDEA я инструкции не нашла. Скачала с офф сайта последнюю версию OpenCV для android, скопировала папку java, добавила библиотеки в jniLibs, прописала зависимость от импортированного модуля. Поменяла циферки с версиями в AndroidManifest у импорт. модуля, но build.gradle -- который в инструкции тоже сказано поменять -- в папке java отсутствовал. Скопировала пример из той ссылки (то же самое, что и там): Activity:

 package мой пакет;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.SurfaceView;
import android.view.WindowManager;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Mat;
import R из моего пакета;

public class ActivityOpenCVTest extends AppCompatActivity
        implements CameraBridgeViewBase.CvCameraViewListener2
{

   private CameraBridgeViewBase mOpenCvCameraView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        setContentView(R.layout.activity_opencv_test);
        mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.view);
        mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
        mOpenCvCameraView.setCvCameraViewListener(this);

    }
    @Override
    public void onPause()
    {
        super.onPause();
        if (mOpenCvCameraView != null)
            mOpenCvCameraView.disableView();
    }
    @Override
    public void onResume()
    {
        super.onResume();
        OpenCVLoader.initDebug();
        mOpenCvCameraView.enableView();
    }
    public void onDestroy() {
        super.onDestroy();
        if (mOpenCvCameraView != null)
            mOpenCvCameraView.disableView();
    }
    public void onCameraViewStarted(int width, int height) {
    }
    public void onCameraViewStopped() {
    }
    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
        return inputFrame.rgba();
    }

}

Манифест:

   <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="мой пакет"
          android:versionCode = "13"
          android:versionName = "1.5"
        >
    <supports-screens android:resizeable="true"
                      android:smallScreens="true"
                      android:normalScreens="true"
                      android:largeScreens="true"
                      android:anyDensity="true" />
    <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"/>

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission-sdk-23 android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission-sdk-26 android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission-sdk-26 android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <application
            android:allowBackup="true"
            android:icon="@drawable/..."
            android:label="Мой заголовок"
            android:roundIcon="@drawable/..."
            android:supportsRtl="true"
            android:theme = "@style/MyTheme"
            >
        <activity android:name="мой пакет.MainActivity"
                  >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        ... всякие другие активности, включая рассматриваемую ActivityOpenCVTest
    </application>
</manifest>

В итоге сборка прошла успешно, но выскочил Warning "Gradle: module '<этот модуль>' won't be compiled. Unfortunately you can't have non-Gradle Java module and Android-gradle module in one project". Плюс еще в манифесте импортированного модуля подчеркивается красным xmlns:android="http://schemas.android.com/apk/res/android" а так же android versionCode и versionName

При попытке запустить на устройстве выдаются такие вот ошибки:

Error:(8, 26) error: package org.opencv.android does not exist
Error:(9, 26) error: package org.opencv.android does not exist
Error:(10, 23) error: package org.opencv.core does not exist
Error:(16, 40) error: package CameraBridgeViewBase does not exist
Error:(20, 12) error: cannot find symbol class CameraBridgeViewBase
Error:(62, 50) error: package CameraBridgeViewBase does not exist
Error:(62, 12) error: cannot find symbol class Mat
Error:(27, 30) error: cannot find symbol class CameraBridgeViewBase
Error:(46, 9) error: cannot find symbol variable OpenCVLoader
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.

Очевидно, что модуль не может подключиться без gradle, но я не знаю, как грамотно сделать gradle-модуль из простого модуля в Intellij IDEA. Или как иначе импортировать библиотеку OpenCV. Пожалуйста, помогите решить эту проблему.

Answer 1

Скорее всего вы не импортировали opencv как gradle sub-module. В IDEA это тут: File - New - Module from existing source.. Как вариант попробуйте сразу подключить уже собранный модуль например отсюда https://github.com/steveliles/opencv-android

READ ALSO
Как этот char преобразовать в String

Как этот char преобразовать в String

Если нужно просто преобразовать массив байт в строку то можно попробовать так

176
none of the following function can be called with the arguments supplied

none of the following function can be called with the arguments supplied

Пытаюсь получить в приложении Android широту и долготу, но не получается даже запустить GPSПри попытки скомпилировать проект, получаю следующую...

202
Арабские числа-иероглиы

Арабские числа-иероглиы

Есть приложение под андроид которое выполняет простые радиолюбительские расчетыЗа последнюю неделю поймалось около десятка багов вида

177
Как развернуть gradle проект на heroku

Как развернуть gradle проект на heroku

Есть Телеграм бот на java, создан при помощи gradleПодскажите пожалуйста что мне нужно добавить в build

174