安卓工作室和Gradle依赖集成

10

我正在使用Android Studio遵循这个教程。我已经完成以下步骤:

在Android Studio中创建一个新项目

将OpenCV-2.4.5-sdk/sdk/java作为模块添加

右键单击我的主模块->更改模块设置->将上述opencv模块添加为依赖项

对于我的MainActivity,我使用了以下代码(从示例中剥离出来):

package com.example.test;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Mat;

public class MainActivity extends Activity implements CvCameraViewListener {
    private CameraBridgeViewBase mOpenCvCameraView;

    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
                case LoaderCallbackInterface.SUCCESS:
                {
                    Log.i("Yay", "OpenCV loaded successfully");
                    mOpenCvCameraView.enableView();
                } break;
                default:
                {
                    super.onManagerConnected(status);
                } break;
            }
        }
    };

    @Override
    public void onResume()
    {
        super.onResume();
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_5, this, mLoaderCallback);
    }

    @Override
    public void onCameraViewStarted(int width, int height) {

    }

    @Override
    public void onCameraViewStopped() {

    }

    @Override
    public Mat onCameraFrame(Mat inputFrame) {
        return null;
    }
}

Android Studio的文本编辑器可以识别我已经导入的包(如org.opencv.android),但是当我编译时出现了以下错误:

Gradle: error: package org.opencv.android does not exist
Gradle: error: package org.opencv.android does not exist
Gradle: error: package org.opencv.android.CameraBridgeViewBase does not exist

有人知道为什么会发生这种情况吗?


此链接允许在没有jar的情况下使用。 - Anthony Keane
7个回答

12

我在使用OS X的Android Studio时遇到了类似的问题。我写代码,Android Studio会看到我引用的.jar文件,并声明了依赖关系,但当Gradle构建项目时就会出现问题。

我打开了'build.gradle'文件,不得不手动添加依赖项。例如,这是我的完整文件:

buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/android-support-v4.jar')
    compile files('libs/gson-2.2.4.jar')
    compile files('libs/jsoup-1.7.2.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 16
    }
}

你可以猜想,我添加的那些行是引用Gson和Jsoup的。


我目前正在研究如何进行多项目配置。 - rynojvr
确保添加的模块与原始模块在同一目录级别。 - rynojvr
你好,感谢你的帮助。但我还是不太明白这些步骤。 目前,每当我在Android Studio中创建一个新项目(比如OpenCVTest),它会创建一个名为OpenCVTest的根项目,然后在其中创建一个同名的Java项目(OpenCVTest)。根项目还包含settings.gradle文件,而Java项目则包含build.gradle文件。我应该将我的依赖模块添加到根项目内部还是外部(但在同一目录下)?如果我将其添加到内部,则无法通过更改模块设置来添加依赖项。 抱歉,因为我从未使用过Gradle。 - Rong den Lang beng
我花了三个小时才找到这个答案。谢谢! - Matt
我遇到了一个问题,配置项目':OpenCV'时出现了错误 - /.../OpenCV/src/main/AndroidManifest.xml中缺少主清单。你有什么想法吗? - fredley
显示剩余7条评论

4
这篇答案启发,我采取了以下步骤:
  • 将OpenCV 2.4.5 jar文件(在我的情况下为“opencv-library-2.4.5.jar”)放入项目的libs文件夹中。
  • 右键单击该文件并选择添加为库
  • build.gradle文件的依赖项部分键入以下内容:compile files('libs/opencv-library-2.4.5.jar')
  • 进行清理构建。可以在Android Studio内完成,但我也运行了项目文件夹内包含的gradlew.bat

现在,该项目应该能够很好地构建和运行。

注意: 在OpenCV的后续版本(例如2.4.7),该库可以在...\build\java中找到。


1
我遇到了类似的问题。
在我的情况下,Android Studio未能为我添加Gradle依赖项。我不得不在项目的gradle文件中自行添加:

compile project(":openCVLibrary2410")

它解决了问题。希望这可以帮到你。

1

最近我通过以下方法解决了上述问题:

  1. 右键单击项目,
  2. 打开模块设置(F4),
  3. 打开依赖选项卡,
  4. 点击 +,添加模块依赖项(使用编译选项),

然后一切都正常工作了。 OpenCV库是我的项目中的另一个模块。


0

我找到了一个解决方法,现在一切都正常了。

我不得不构建一个Jar文件(openCV.jar),然后将其作为库添加,而不是模块,最后在gradle.build文件中添加了这行代码

compile files('libs/openCV.jar')

所以最终我可以使用库代码并且我的构建是正常的。

我不知道这是否好。但这就是我做的。希望能有所帮助。


嗨@Gustavo,我想尝试这种方法。你是如何构建openCV.jar的? - MikeWallaceDev

0
在我的IntelliJ IDE中,我按照以下步骤进行修复:
- 指向您的应用程序(在项目内部)并单击F4(默认情况下将聚焦模块设置)
- 选择Android-Gradle
- 选择选项卡Dependencies
- 添加依赖项(在右上角选择+按钮):您可以选择通过maven、文件或其他方式添加。在我的情况下,我从maven中添加了新的opencsv。
- 单击“确定”完成,您的项目将自动重建。

完成。


0

在Android Studio中尝试添加依赖是徒劳的,因为有一个错误

请尝试以下方法:

  • OpenCV网站下载OpenCV-2.4.5-android-sdk.zip

    • 将其解压到任何位置作为OpenCV-2.4.5-android-sdk,我的位置是

      /home/anthony/Documents/OpenCV-2.4.5-android-sdk/

    • 打开IntelliJ并选择导入

    • 选择要导入的文件夹

      /home/anthony/Documents/OpenCV-2.4.5-android-sdk/sdk/java/

      你的位置可能会有所不同,不用担心,只需选择你解压OpenCV-2.4.5-android-sdk的位置即可

    • 导入向导完成后,使用菜单构建应用程序

构建 -> 重新构建项目
  • 关闭项目

  • 创建新项目或打开现有项目
  • 然后

文件->导入模块

  • 这次选择

/home/anthony/Documents/OpenCV-2.4.5-android-sdk/sdk/java/XXX.iml

我用的是sdk.iml,但你可能会用其他文件名,不过只会有一个。

iml 文件 选择 iml 文件以导入模块

现在你可以开始使用 OpenCV 函数,输入以下内容:

import org.

一旦你输入句号,IntelliJ 应该会列出选项列表,其中之一是

opencv

Now OpenCV is correctly integrated in your IDE

其余的就靠你了。


我刚刚尝试了按照这些步骤操作,但是我无法让Android Studio自动完成。仍在努力找出原因。 - Israel Lopez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接