GVKun编程网logo

如何在Gradle中的buildSrc下的自定义任务中使用第三方依赖项(在build.gradle中添加依赖)

22

在本文中,我们将给您介绍关于如何在Gradle中的buildSrc下的自定义任务中使用第三方依赖项的详细内容,并且为您解答在build.gradle中添加依赖的相关问题,此外,我们还将为您提供关于an

在本文中,我们将给您介绍关于如何在Gradle中的buildSrc下的自定义任务中使用第三方依赖项的详细内容,并且为您解答在build.gradle中添加依赖的相关问题,此外,我们还将为您提供关于android – build.gradle依赖项自动更新自身、android – 如何将依赖项添加到项目的顶级build.gradle文件?、android-Gradle命令行参数来覆盖build.gradle中的属性、Android三方依赖冲突Gradle中exclude的使用的知识。

本文目录一览:

如何在Gradle中的buildSrc下的自定义任务中使用第三方依赖项(在build.gradle中添加依赖)

如何在Gradle中的buildSrc下的自定义任务中使用第三方依赖项(在build.gradle中添加依赖)

我已按照本指南使用Gradle创建自定义任务。 http://www.ysofters.com/2015/02/26/how-to-create-
gradle-project-with-custom-task-classes-in-
groovy/
我也查看了gradle文档。https://docs.gradle.org/current/userguide/custom_tasks.html

非常清楚,我可以得到示例来编译和使用任务,因此到目前为止一切都很好。

但是,示例仅显示gradle api文件的导入,即

import org.gradle.api.DefaultTaskimport org.gradle.api.tasks.TaskAction

我想添加更多的依赖,即

import org.springframework.beans.factory.config.YamlPropertiesFactoryBeanimport org.springframework.core.io.FileSystemResource

但我可以这样做-gradle会抱怨并说“无法解决课程..”

我也尝试在build.gradle的buildscript-> dependencies闭包下设置spring-core和apache-
commons,但是没有任何区别,即

buildscript { dependencies {        classpath group: ''org.springframework'', name: ''spring-core'', version: springVersion        classpath group: ''org.apache.commons'', name: ''commons-lang3'', version: ''3.4''      .....

因此,我缺少什么-如何在自定义任务类中使用第三方依赖关系?

答案1

小编典典

您需要将一个build.gradle文件放入buildSrc目录。您可以buildSrc/build.gradle从gradle项目本身签出文件作为示例:https
:
//github.com/gradle/gradle/blob/v4.1.0/buildSrc/build.gradle

android – build.gradle依赖项自动更新自身

android – build.gradle依赖项自动更新自身

compile ''com.google.android.gms:play-services:8.3.0''
compile ''com.android.support:support-v4:22.2.1''
compile ''com.android.support:design:22.2.1''

compile ''com.google.android.gms:play-services:8.4.0''
compile ''com.android.support:support-v4:23.1.0''
compile ''com.android.support:design:23.1.0''

android studio会不时地自动将值更改为最新版本,这非常烦人并且会破坏我的应用程序.有没有办法防止这种情况发生?

谷歌搜索和stackoverflow搜索了但没有出现.

解决方法

代替:

compile ''com.google.android.gms:play-services:8.3.0''
compile ''com.android.support:support-v4:22.2.1''
compile ''com.android.support:design:22.2.1''

尝试:

playVersion = ''8.3.0''
supportVersion = ''support-v4:22.2.1''
designVersion = ''22.2.1''
compile "com.google.android.gms:play-services:$playVersion"
compile "com.android.support:$supportVersion"
compile "com.android.support:design:$designVersion"

记得用’s替换’s.

android – 如何将依赖项添加到项目的顶级build.gradle文件?

android – 如何将依赖项添加到项目的顶级build.gradle文件?

我正在尝试一个实现Google Cloud Messaging(GCM)的示例代码,该代码由google本身提供,GCM Demo.

我不知道我究竟能添加依赖项

>列表项目
>将依赖项添加到项目的顶级build.gradle:
>当我进入项目结构>模块>单击添加然后选择模块依赖关系,然后会出现一个弹出屏幕,表示找不到依赖的模块.
如果还有另一种方法我可以添加依赖项,那么将会感谢帮助.我已经附加了关于相同的图像.

enter image description here

解决方法:

如link所述.

将依赖项添加到项目的顶级build.gradle :(只需编辑文件)

classpath 'com.google.gms:google-services:1.3.0-beta1'

你应该有这样的somenthing:

//顶级构建文件,您可以在其中添加所有子项目/模块共有的配置选项.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.google.gms:google-services:1.3.0-beta1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

然后将插件添加到您的应用级build.gradle(只需编辑文件):

apply plugin: 'com.google.gms.google-services'

你应该有这样的somenthing:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
  //..
}

最后在app-level build.gradle中添加依赖项

dependencies {
  compile "com.google.android.gms:play-services:7.5.0"
}

android-Gradle命令行参数来覆盖build.gradle中的属性

android-Gradle命令行参数来覆盖build.gradle中的属性

每当导入现有的android项目时,在大多数情况下,我们都需要在安装的工具版本号之后更改值

在project / build.gradle中

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:x.x.x'
    }
}

在project / app / build.gradle中

android {
    compileSdkVersion xx
    buildToolsversion "xx.x.x"

    defaultConfig {
        applicationId "com.example.app.xyz"
        minSdkVersion xx
        targetSdkVersion xx
        versionCode x
        versionName "x.x"
    }
...
}

dependencies {
    compile filetree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:x.xx'
    compile 'com.android.support:appcompat-v7:xx.x.x'
    compile 'com.android.support:recyclerview-v7:xx.x.x'
}

如何覆盖以上的值

classpath
compileSdkVersion
buildToolsversion
targetSdkVersion

使用命令行参数例如

./gradlew installDebug -PCompileSdkVersion=26 -PbuildToolsversion=26.0.0

或类似的东西?

我的想法是使用一个相同的命令(以我已安装的sdk版本号作为参数)来构建我不维护的任何项目.

如果我们必须构建由他人管理的多个项目,这将很有帮助.它可以通过命令行参数覆盖我们的构建配置,从而节省大量时间,因此我们不需要每次都通过在每个特定位置进行更改来更改它新导入的项目.

解决方法:

输入您的gradle.properties默认值:

SDK_VERSION=26

在build.gradle中使用:

android {
    compileSdkVersion project.getProperties().get("SDK_VERSION")
}

使用:./ gradlew build -PSDK_VERSION = 26

PS:别忘了,您还必须更改支持库的主要版本.

Android三方依赖冲突Gradle中exclude的使用

Android三方依赖冲突Gradle中exclude的使用

一、场景

Android项目的开发过程中,我们项目中的gradle的dependencies闭包中会引入很多三方依赖库,引入的库越多,越容易产生库之间的依赖冲突。

列举冲突的场景:

  • 1、同一个依赖库引入多个版本;
  • 2、重复引入了同一个依赖库;

编译报错信息一般为:Program type already present

二、如何查看项目中的三方依赖?

方案一: Gradle task工具查看

 按照如图目录找到dependencise双击,会在Run控制台输出打印。

结果如下:

方案二:Terminal控制台查看

在windows上Android studio Terminal中使用这个命令:

gradlew :app:dependencies

在MacOS中使用下面的命令:

gradlew :app:dependencies

其中的“app”为module名称。

这个命令会将gradle执行的各个步骤都打印出来,包括releaseUnitTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseRuntimeClasspath,releaseCompileClasspath,lintClassPath,debugUnitTestRuntimeClasspath等等,反正会打印很多很多。

 这种就可以把依赖树都打印出来。因为存在这种依赖树的问题,所以很容易导致依赖冲突,因为你不知道别的依赖库有没有和另外一个依赖库引入的依赖库或者自己导入的依赖库发生了冲突。同一个依赖库版本不同很容易导致依赖冲突。

这时候我们就需要过滤一下(window):很多资料提示是(gradlew :app:dependencies --configuration compile,这种compile是以前的方式引入依赖,现在换成implementation)

gradlew :app:dependencies --configuration implementation

打印如下:

 但不知道为啥这种不打印出来依赖树。

接下来我又试了一下下面这个过滤条件:

gradlew :app:dependencies --configuration releaseRuntimeClasspath

这样就可以打印出依赖树了:

 这样对项目中的依赖就可以一目了然。然后ctrl + f 查找你认为有问题有冲突的依赖。

三、使用exclude解决依赖冲突的问题

1、以下面这个例子来示范:

 这个cardview是material依赖库下的一个依赖。

 这个是我在module app的MainActivity里面正常使用。

现在假如有另外一个依赖库中也包含了androidx.cardview这个依赖库包的其他版本,注意是也存在的其他版本,就会可能发生冲突。冲突造成的错误,后面遇到再贴出来。

2、那么我们要怎么解除这种依赖库引起的编译问题呢?

//    implementation ''com.google.android.material:material:1.2.1''
    implementation(''com.google.android.material:material:1.2.1'') {
        exclude group: ''androidx.cardview'', module: ''cardview''
    }

现在我使用gradle中的exclude的关键字,来排除app.gradle文件中的这个cardview依赖库。

解释一下:exclude是groovy中的一个函数,group是要排除的包名,module是模块名。

用图说更清楚:

 但正常情况下,写group也就行,不写module也行。

那么排除后的效果是什么?

 排除之后,这个CardView就找不到了。这样就可以使用和这个冲突的另一个CardView的版本,就可以把Android中的依赖库冲突给解决了。(tips:我这里没演示出冲突的问题)

四、总结

上面是介绍了Android查看项目中使用到那些依赖库的几种方案,以及介绍了Android中使用exclude如何处理依赖库存在冲突的问题。当然解除依赖库冲突不止这一种方案,但这种我觉得是比较方便的一种。

到此这篇关于Android三方依赖冲突Gradle中exclude的使用的文章就介绍到这了,更多相关Android  exclude使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

您可能感兴趣的文章:
  • Android Gradle 三方依赖管理详解
  • Kotlin+buildSrc更好的管理Gradle依赖译文
  • Android开发gradle拉取依赖的加速配置
  • Android Gradle模块依赖替换使用技巧
  • IDEA 下 Gradle 删除多余无用依赖的处理方法
  • Gradle 依赖切换源码实践示例详解

关于如何在Gradle中的buildSrc下的自定义任务中使用第三方依赖项在build.gradle中添加依赖的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android – build.gradle依赖项自动更新自身、android – 如何将依赖项添加到项目的顶级build.gradle文件?、android-Gradle命令行参数来覆盖build.gradle中的属性、Android三方依赖冲突Gradle中exclude的使用等相关知识的信息别忘了在本站进行查找喔。

本文标签: