【Gradle】关于jar包冲突

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

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

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

确定冲突的包

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

《【Gradle】关于jar包冲突》 androidDependencies

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

2,通过gradlew指令

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

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

3,插件查看

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

《【Gradle】关于jar包冲突》 搜索1.png
《【Gradle】关于jar包冲突》 搜索2.png

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

《【Gradle】关于jar包冲突》 使用.png

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

《【Gradle】关于jar包冲突》 树结构.png

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

解决包冲突

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


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

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

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

    原文作者:械勒的时间
    原文地址: https://www.jianshu.com/p/804ceb81972b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞