您当前的位置: 首页 >  ide

命运之手

暂无认证

  • 1浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android】【IDE】AndroidStudio依赖冲突终极解决方案

命运之手 发布时间:2021-05-18 17:17:04 ,浏览量:1

库冲突一般原因

  • 同一个库,引入了多个不同的版本,导致类重复
  • 同一个类,在不同的库中都包含了,导致类重复

查找导致类冲突的Libarary

类冲突在编译时一般会报以下错误:Program type already present

复制类名,双击Shift,输入类名搜索,点击Class,再点击定位,即可定位到Libarary位置

如果类有重复的话,一定会有多个位置都包含相同的Class 在这里插入图片描述 查找导致库冲突的Dependency

找到了冲突的库,但是我们还是不知道这些库来自Gradle中的哪些依赖,因为Gradle中的一个依赖往往对应多个jar包

这时我们可以打开【File】-【Project Structure】-【Dependencies】界面来查看Gradle依赖明细

选中一个Module,点击【See Dependencies】按钮,就能看到这个模块的依赖明细

我们可以看到,Gradle中的一个依赖下面,都会包含诸多的子依赖关系,逐个查找就能找到有冲突的依赖

也可以点击最右侧面板,输入单词直接进行搜索 在这里插入图片描述 排除有冲突的Dependency

当两个依赖都引入了同一个库时,我们选择其中一个依赖,将冲突的库从这个依赖中排除即可


    //GIS工具库:GeoTools
    api('org.geotools:gt-shapefile:25.0', {
        exclude(group: 'jakarta.annotation', module: 'jakarta.annotation-api')
    })
    

排除重复的Resource

jar包中不止包含代码,还能包含so库,assets资源,jar包描述文件,其它与程序无关的文件等等

当这些资源文件重复,编译时一般会报以下错误:More than one file was found with OS independent path

这时我们可以在gradle文件中通过packagingOptions排除这些无用的资源,如果有多个模块,要将这个选项写到主模块的gradle文件中


    packagingOptions {
        doNotStrip "*/*/libdjivideo.so"
        doNotStrip "*/*/libyuv2.so"
        exclude 'META-INF/*'
        exclude 'assets/location_map_gps_locked.png'
        exclude 'assets/location_map_gps_3d.png'
        exclude 'about.*'
        exclude 'plugin.*'
        exclude 'modeling32.png'
    }
    

备注

思路都已经清楚了,具体操作就不详细介绍了,网上很容易搜,没那么多时间把博客写成论文

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0379s