AndroidStudio Gradle 解决包冲突的方法——开发记录

2022-01-04 16:09:15 浏览数 (2)

方案一、去掉全部依赖

代码语言:javascript复制
 // 依据构建名称排除
 exclude module: 'cglib' 
 // 依据组织名称排除
 exclude group: 'org.jmock' 
 // 依据组织名称 构件名称排除
 exclude group: 'org.unwanted', module: 'iAmBuggy' 
eg:
去除support-v4 包的依赖(去掉全部)
  configurations {
     all*.exclude group: 'com.android.support', module: 'support-v4'
 }

方案二、去掉部分冲突 例如去除 com.github.niorgai:StatusBarCompat:2.1.3 引用的 com.android.support 包下内容

代码语言:javascript复制
 compile('com.github.niorgai:StatusBarCompat:2.1.3', {
       exclude group: 'com.android.support'
   })

 去除 module  引用的 'com.google.code.findbugs:jsr305' 的相关内容
  compile(project(':downlibrary')) {
       exclude group: 'com.google.code.findbugs', module: 'jsr305'
   }

configurations {
   //编译期排除commons模块
   compile.exclude module: 'commons'
   //在整个构建过程中排除pkaq.tiger:share
   all*.exclude group: 'pkaq.tiger', module: 'share'
}

方案三、强制依赖某个版本 包依赖冲突的时候

代码语言:javascript复制
configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '26.1.0'
            }
        }
    }
}

方案四、使用强制版本   当然,有时候你可能仅仅是需要强制使用某个统一的依赖版本,而不是排除他们,那么此时force就该登场了。指定force = true属性可以冲突时优先使用该版本进行解决。

代码语言:javascript复制
compile('org.hibernate:hibernate:3.1') {
    force = true
}

全局配置强制使用某个版本的依赖来解决依赖冲突中出现的依赖

configurations.all {
   resolutionStrategy {
       force 'org.hamcrest:hamcrest-core:1.3'
   }
}

末尾引用

0 人点赞