美文网首页
【Gradle】关于jar包冲突

【Gradle】关于jar包冲突

作者: 械勒的时间 | 来源:发表于2018-07-12 20:02 被阅读0次

    前阵子看到一篇文章,大致意思是说年底之前,不支持权限管理的应用会无法安装,出现各种各样的问题云云
    所以趁最近不忙,升级targetSdkVersion到25,添加权限策略。
    早干嘛去了?公司就一个安卓,忙不过来(其实是懒)。


    如果编译出现 transformDexArchiveWithExternalLibsDexMergerForDebug 字样,不要怀疑,这是包冲突。
    我是引入PermissionsDispatcher的时候,报出的异常,因为它自身也引用了
    com.android.support:support-compat:27.1.1
    com.android.support:support-v13:25.3.1
    两个包。

    出现问题,首先是排查手段。

    确定冲突的包

    1,通过android studio自带的gradle工具

    androidDependencies

    从编译器右侧找到这个Gradle,依次打开目录,找到androidDependencies双击,几秒钟之后,会有一个长长的依赖库的列表展示在下方,如果你的依赖比较少的话,到这里就可以开始排查了,但是如果依赖很多的话,嗯,要瞎。
    (ノ`ー´)ノ~~┻━┻

    2,通过gradlew指令

    打开terminal,此时的路径应该为项目根目录,直接输入
    gradlew -q app:dependencies
    其中app换成你想要看依赖的module的名称,我只有一个名为app的module,就直接复制上去了。
    回车之后稍等几秒,terminal界面会为我们显示一个依赖包的树结构,

    这个跟上头那个差不多,但是好歹有树结构,细细看两眼,大概就能确定冲突的位置了。

    3,插件查看

    有这个一个插件,叫做gradle view,是专门用来查看依赖树结构的。
    我们照例打开File->settings,然后按图搜索并安装插件。
    我的已经安装了,所以不显示安装按钮。

    搜索1.png 搜索2.png

    之后重启Android Studio
    不重启不显示。

    使用.png

    在View->Tool Windows菜单里找到刚刚安装的gradle view,点击打开,稍等一会。
    我们会看到类似于下图的一个可打开的菜单。

    树结构.png

    我比较推荐这个方法,因为没有记忆负担,而且不至于一屏太多东西,看的眼花。

    解决包冲突

    确定问题之后,解决问题就很简单了,可以使用exclude指令,简单高效,写法类似于下面代码。

    
        implementation('com.github.hotchemi:permissionsdispatcher:2.4.0') {
            exclude group: 'com.android.support'
            // 或者
            //  exclude module: "support-v13"
        }
    
    

    最后,没有升级targetSdkVersion的朋友们赶快升级,另推荐一篇博文可以看一下。
    《Android targetSdkVersion 从22提到25 你需要知道的一切》


    个人理解,难免有错误纰漏,欢迎指正。转载请注明出处。

    相关文章

      网友评论

          本文标题:【Gradle】关于jar包冲突

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