Android中由于ContentProvider导致的“应用组件的命名与已安装应用有冲突”问题

关于 :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是你自己项目的包名。

说到这里了,我想问题都已经被解决了,我做了修改之后,能同事安装上了。

此文纯属个人理解见解,仅供读者参考,如有不足欢迎指教。







  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值