美文网首页Android 踩坑记Android最佳实践Android-gradle
终极方案:快速解决Android项目依赖冲突

终极方案:快速解决Android项目依赖冲突

作者: Aegis | 来源:发表于2021-07-14 12:06 被阅读0次

    你是否还在为依赖冲突而费时费力?

    你是否看到gradle报了重复jar包或重复类而不知所措?

    那么,这篇文章,教你彻底解决依赖冲突问题 ~

    冲突类型无非是类、jar包重复,比如:

    image-20210714115838934

    在此不多做介绍了,直接上解决方案

    解决步骤:

    一、精确查找有冲突的依赖库

    在App模块的build.gradle配置

    位置如下:

     ---> app (项目运行模块)
          --- > build.gradle: (gradle配置文件)
                  ---> android: (android 配置项)
                        --- > defaultConfig: (defaultConfig 配置项)
    

    1、配置显示冲突依赖详细信息

    defaultConfig{
        configurations.all {
            resolutionStrategy {
                // 显示冲突的依赖库版本信息
                failOnVersionConflict()
            }
        }
    }
    

    2、编译,查看控制台详细输出

    显示项目中存在 4.9.0、4.5.0 和 3.7.0 三个版本的 glide

    image-20210713105458943

    3、直接修改对应依赖版本(无法修改的情况,请看以下“二”、 “三” 解决方案)

    修改对应模块的 build.gradle 里面修改即可

    dependencies {
        implementation "com.github.bumptech.glide:glide:4.9.0"
    }
    

    二、使用exclude进行依赖排除

    使用依赖排除的方式

    1、project依赖排除示例

    // 引用 eduhdsdk 模块,并排除 umeng的common模块
    api (project(': eduhdsdk')){
            exclude group: 'com.umeng.umsdk', module: 'common'
        }
    

    2、远程依赖排除示例

    // 引用 socket.io-client 库,并排除 json 模块
    implementation("io.socket:socket.io-client:1.0.0") {
            exclude group: 'org.json', module: 'json'
        }
    

    三、使用全局强制指定依赖版本

    部分情况,可能使用 exclude 排除无法解决,则可以进行全局强制指定依赖库版本

    configurations.all {
                resolutionStrategy {
                        // 强制使用 28.0.2 版本的 support 包
                    force 'com.android.support:support-v4:28.0.2'
                    // 强制使用 4.9.0 版本的 glide 库
                    force 'com.github.bumptech.glide:glide:4.9.0'
                    
                    failOnVersionConflict()
                }
            }
    

    补充:

    1. 要移除的jar包在aar包中的classes.jar中

    参考链接:如何exclude aar包中的某个jar包

    核心:

    ① 解压aar文件到tmpDir目录下

    unzip ×××.aar -d tmpDir
    

    ② 找到classes.jar包,用压缩工具打开,删除目标文件

    ③ 将tmpDir重新打包成一个新的aar

    jar cvf ×××NewLib.aar -C tmpDir/ .
    

    相关文章

      网友评论

        本文标题:终极方案:快速解决Android项目依赖冲突

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