关于 :Android中由于ContentProvider导致的“应用组件的命名与已安装应用有冲突”问题,
该问题的说明参照原址:https://blog.csdn.net/black_bird_cn/article/details/79504487
在此处我说说自己当时遇见该问题使用的处理方式。
在项目开发中,我接到需求,要求出一个中文版无SDK apk 和有SDK apk,我当时也很快把这两个包打出来了,后面就都安装到手上面进行测试,保证安装包能正常安装和运行。但是在安装完第一个包(A包)之后,第二包(B包)始终无法安装。
分析问题:导致两个apk无法同时安装的原因
1、检查两个apk 包名是否一致
我当时确认包名是不一致的,虽然是同一项目工程,但是出包的时候是做了包名区分的。这点可以排除
2、检查项目使用插件中是否存在包名一致的情况。
这个问题,看是简单,排查起来个人认为很麻烦,因为<不同的项目>引用的jar 包 和arr包是不一样的,但是在这里我是使用的<同一项目>,同一项目出步同包名的apk ,注意是 同一个项目 出不同包名的apk,然后无法同时安装。
最后我利用各种手段查询解决方案,最后https://blog.csdn.net/black_bird_cn/article/details/79504487 给出问题的说明。当然我也没注意到无法安装的提示语,有些设备在安装时会给出准确的提示,比如:应用组件的命名与已安装应用有冲突。当我第一次看到这个提示的时候其实我是很懵逼的,看了上面链接的解决方案,说实话第一次看还真没看懂。原文大体上的意思就是:两个APK中的ContentProvider的authorities没有做修改(关于对ContentProvider的理解与使用),ContentProvider中authorities就是为内容提供者指定一个唯一的标识,这样别的应用才可以唯一获取此Provider,同时App中自己的ContentProvider中authorities也不能和Android系统的authorities一致。
原博主建议我们 APP英文名+包名+类名来避免 该问题的发生,我当时真没看懂这句话,直到后来我去项目中排查问题时才明白,我的项目中使用很多arr 插件,我开始从插件中排查,建一个Demo 工程,将我使用的插件拷贝进去出包,使用最笨(虽然最笨但能准确定位问题所在)办法一个个排查,最后查出来在其中一个arr包里面出现了问题(之前离职同事留下来的坑啊),先上图,见此图我想大家也应该明白上面这句 ”APP英文名+包名+类名“ 话了吧,同一工程处不同包名的包,都引用了这个arr ,这种声明方式( android:authorities="com.yycd.fileprovider")必定无法同时安装,正确的声明方式是: android:authorities="packageName.fileprovider"。packageName是你自己项目的包名。
说到这里了,我想问题都已经被解决了,我做了修改之后,能同事安装上了。
此文纯属个人理解见解,仅供读者参考,如有不足欢迎指教。