前阵子看到一篇文章,大致意思是说年底之前,不支持权限管理的应用会无法安装,出现各种各样的问题云云
所以趁最近不忙,升级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,然后按图搜索并安装插件。
我的已经安装了,所以不显示安装按钮。
之后重启Android Studio
不重启不显示。
在View->Tool Windows菜单里找到刚刚安装的gradle view,点击打开,稍等一会。
我们会看到类似于下图的一个可打开的菜单。
我比较推荐这个方法,因为没有记忆负担,而且不至于一屏太多东西,看的眼花。
解决包冲突
确定问题之后,解决问题就很简单了,可以使用exclude指令,简单高效,写法类似于下面代码。
implementation('com.github.hotchemi:permissionsdispatcher:2.4.0') {
exclude group: 'com.android.support'
// 或者
// exclude module: "support-v13"
}
最后,没有升级targetSdkVersion的朋友们赶快升级,另推荐一篇博文可以看一下。
《Android targetSdkVersion 从22提到25 你需要知道的一切》
个人理解,难免有错误纰漏,欢迎指正。转载请注明出处。
网友评论