Android 踩坑记Android最佳实践Android-gradle

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

2021-07-14  本文已影响0人  Aegis

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

你是否看到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/ .
上一篇下一篇

猜你喜欢

热点阅读