背景:
开发SDK过程中,为了兼容Android 7.0以上文件访问问题,引入了FileProvider,但业务方在使用SDK的过程中也引入了FileProvider,导致多个FileProvider共存时,打出的apk包Manifest中少了一个FileProvider或res/xml文件夹缺少xml文件的问题。
关于FileProvider的使用说明见:https://blog.csdn.net/lmj623565791/article/details/72859156
场景:
一、resource相同,但authorities不同
如上图所示,虽然宿主和SDK的aar文件中声明了两个FileProvider,但由于路径相同,编译时会出现属性被覆盖问题,导致程序在获取文件权限时会出现异常,导致崩溃。
解决方案是将FileProvider中的resource和authorities都设置为不同 ,于是出现了第二个场景:
二、resource相同,但authorities不同,但编译不通过,提示Manifest Merge失败。
出现这个问题的原因是注册FileProvider时使用的都是support包中系统提供的FileProvider类,但由于resource和authorities
都不相同,声明了组件一样但属性不同的多个FileProvider,在编译时系统无法判断用哪一个,导致merge失败。
解决方案为:将其中任何一个FileProvider改为自定认的FileProvider即可:
1、创建自定义的FileProvider类,继承自FileProvider:
2、Manifest中声明时,name设置为自定义FileProvider的全路径:
完美解决~