美文网首页面试题适配
Android开发 - Gradle依赖冲突解决

Android开发 - Gradle依赖冲突解决

作者: zhangchunlin | 来源:发表于2019-07-23 15:19 被阅读0次

在引用依赖时经常会有这样的问题:某些间接引用的依赖项是不需要的;产生了依赖冲突。此时需要排除一些依赖。

下面的内容介绍了几种在gradle中排除依赖的方式。

在dependency中排除

 implementation ('com.github.andnux.ChunLin:ui:0.0.12'){
        exclude module: 'glide' //by module
        exclude group: 'xxxx' //by group
        exclude group: xxxx', module: 'xxxx' //by both name and group
    }

这种方式是粒度最细的,也是最为繁琐的。此时可以考虑全局设置。

在全局配置中排除

  • 全局配置是在configuration中完成的。
configurations {
    compile.exclude module: 'ui'
    all*.exclude group:'com.github.andnux.ChunLin', module: 'ui' 
}

禁用传递依赖

  • 禁用传递依赖需要将属性transitive设置为false。可以在dependency中禁用传递依赖,也可以在configuration中全局禁用:
compile('com.github.andnux.ChunLin:ui:0.0.12') {
    transitive = false
}
configurations.all {
    transitive = false
}
  • 还可以在单个依赖项中使用@jar标识符忽略传递依赖,
    如果是Android项目的用@aar标识符忽略传递依赖:
compile 'com.github.andnux.ChunLin:ui:0.0.12@jar'
implementation 'com.github.andnux.ChunLin:ui:0.0.12@aar'

强制使用某个版本

  • 如果某个依赖项是必需的,而又存在依赖冲突时,此时没必要逐个进行排除,可以使用force属性标识需要进行依赖统一。当然这也是可以全局配置的:
compile('com.github.andnux.ChunLin:ui:0.0.12') {
    force = true
}
configurations.all {
    resolutionStrategy {
        force 'com.github.andnux.ChunLin:ui:0.0.12'
    }
}

在打包时排除依赖

  • 先看一个示例:
task zip(type: Zip) {
    into('lib') {
        from(configurations.runtime) {
            exclude '*unwanted*', '*log*'
        }
    }
    into('') {
        from jar
        from 'doc'
    }
}
  • 代码表示在打zip包的时候会过滤掉名称中包含“unwanted”和“log”的jar包。这里调用的exclude方法的参数和前面的例子不太一样,前面的参数多是map结构,这里则是一个正则表达式字符串。
  • 也可以使用在打包时调用include方法选择只打包某些需要的依赖项:
task zip(type: Zip) {
    into('lib') {
        from(configurations.runtime) {
            include '*ar4j*', '*spring*'
        }
    }
    into('') {
        from jar
        from 'doc'
    }
}

在安卓中排除依赖

android{
   packagingOptions {
      exclude 'lib/x86_64/darwin/libscrypt.dylib'
      exclude 'lib/x86_64/freebsd/libscrypt.so'
      exclude 'lib/x86_64/linux/libscrypt.so'
  }
}

始终选择最新的依赖的项

  • 最后这个特性和排除依赖没有什么关系,只是顺带说一下。
    在依赖项中使用加号+,可以在构建时检查远程仓库是否存在该依赖的新版本,如果存在新版本则下载选用最新版本。更有用的是可以指定依赖某个大版本下的最新子版本,如1.+表示始终采用依赖的1.x序列的最新版本。
    示例如下:
compile 'com.github.andnux.ChunLin:ui:+'

相关文章

网友评论

    本文标题:Android开发 - Gradle依赖冲突解决

    本文链接:https://www.haomeiwen.com/subject/wkqolctx.html