完美解决主工程与lib库的FileProvider冲突

1.问题

在android系统6.0以上的系统对权限的管理越来越严格了,特别是存储权限,需要通过FileProvider来读写文件,或许很多朋友像我一样都遇到过主工程与lib库的provider冲突,导致工程无法编译,错误信息如下:

错误信息

2.原因分析

在主工程manifest文件中引用了FileProvider:

错误信息

同样在lib库的manifest文件中也引用了FileProvider:

错误信息

编译器在编译工程合并manifest文件时候就抛出了provider冲突问题,显而易见是其中的authrities冲突了。

在as的log日志里和在网上查找资料都是说在主工程的manifest文件里的provider下加上tools:replace就能成功解决问题。加上后,看似确实编译通过了,但是在主工程或者lib库用到FileProvider读写文件的时候还是报错了,各种修改manifest文件也没能解决这个问题。

3.解决方法

其实一想,我们在应用中用的都是v4包提供的FileProvider类来读写文件的,从而导致冲突,如果我们自己在工程中新写个FileProvider类继承自系统的FileProvider类来读写文件不就问题解决了么?带着这个想法一试,果然成功了。皇天不负有心人呐!下面是所有的代码片段:

图片

图片

图片

上面这种做法有种好处就是不用将lib库下载下来然后修改lib库里的provider了,lib库里还是可以用原来的provider。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值