Android gradle 动态添加模块依赖

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android gradle 动态添加模块依赖相关的知识,希望对你有一定的参考价值。

参考技术A android 开发过程,可能会遇到依赖模块太多,手动的添加修改依赖就会觉得有点麻烦,这个时候可以考虑使用动态添加模块依赖,也是适用像 Jenkins 自动打包构建,就不需要频繁的去修改模块依赖,提高构建效率。

1、工程 settings.gradle 动态添加模块工程

2、 app 模块 build.gradle 依赖使用

Gradle dependencies: compile project by relative path
Android studio add external project to build.gradle

Android Studio 和 Gradle 依赖集成

【中文标题】Android Studio 和 Gradle 依赖集成【英文标题】:Android Studio and Gradle dependency integration 【发布时间】:2013-05-13 16:11:26 【问题描述】:

我正在关注this tutorial,但使用的是 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 的情况下使用][1] [1]:***.com/a/17368359/2423176 【参考方案1】:

我在 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 的行。

【讨论】:

我目前正在研究如何进行多项目配置。 1.) 确保添加的模块与原始模块处于同一目录级别。 2.) 验证您的项目中的“build.gradle”文件(我在上面谈到的那个)是否包含“compile project(':')”行前面的冒号。 在包含模块的基本目录中,确保 'settings.gradle' 文件状态为“include '', ''” 您好,感谢您的帮助。我仍然不太明白这些步骤。目前,每当我在 Android Studio 中创建一个新项目(例如,OpenCVTest)时,它都会创建一个名为 OpenCVTest 的根项目,然后在其中创建一个同名的 java 项目(OpenCVTest)。根项目还包含 settings.gradle 文件,尽管 java 项目是包含 build.gradle 的项目。我应该将我的依赖模块添加到根项目内部还是外部(但在同一目录中)?如果我在里面添加它,我无法添加依赖项(通过更改模块设置)。抱歉,我从未使用过 Gradle。【参考方案2】:

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

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

compile files('libs/openCV.jar').

所以最后我可以使用库代码并且我的构建是好的。

我不知道这样好不好。但我就是这样做的。希望对您有所帮助。

【讨论】:

嗨@Gustavo,我想试试这种方法。您究竟是如何构建 openCV.jar 的?【参考方案3】:

尝试在 Android Studio 中添加到依赖项徒劳的有一个错误

试试这个:

从OpenCV site下载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 文件

您现在可以开始使用 OpenCV 函数了,首先输入

导入组织。

一旦你输入句点,IntelliJ 应该删除一个选项列表,其中一个是

opencv

剩下的看你自己了。

【讨论】:

我刚刚尝试按照这些步骤操作,但无法让 Android Studio 自动完成。仍在试图找出原因。【参考方案4】:

受this answer的启发,我做了这些步骤:

将 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 中找到该库。

【讨论】:

【参考方案5】:

我遇到了类似的问题。

在我的情况下,Android Studio 未能为我添加 Gradle 依赖项。我必须自己将它添加到我的项目的 gradle 文件中:

编译项目(":openCVLibrary2410")

它解决了这个问题。我希望这会有所帮助。

【讨论】:

【参考方案6】:

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

    右键单击项目, 打开模块设置 (F4) 打开依赖项选项卡窗格 点击+,添加模块依赖(带编译选项)

然后一切正常。 opencv 库是我项目中的另一个模块

【讨论】:

【参考方案7】:

在我的 intellij IDE 中,我修复如下: - 指向您的应用程序(在您的项目内)并单击 F4(模块设置默认为焦点) - 选择 Android-Gradle - 选择选项卡依赖项 - 添加(右上方的选择 + 按钮)依赖项:您可以通过 maven、文件或...选择添加取决于您。就我而言,我从 maven 添加了新的 opencsv。 - 单击确定完成,您的项目将自动重建。

完成。

【讨论】:

以上是关于Android gradle 动态添加模块依赖的主要内容,如果未能解决你的问题,请参考以下文章

如何通过android studio中的自定义插件的操作在项目中动态添加依赖项?

Android编译时动态替换Jar包中的类

如何在Android Gradle中添加原生so文件依赖

如何在Android Gradle中添加原生so文件依赖

如何在Android Gradle中添加原生so文件依赖

[Android] 配置build.gradle 动态传参