小言_互联网的博客

关于:INSTALL_FAILED_DUPLICATE_PERMISSION perm=android.permission.BAIDU_LOCATION_SERVICE pkg=com.exampl

502人阅读  评论(0)

如果是调用我们的定位SDK进行开发,在5.0系统中可以去掉这个权限。

我们最新的官网示例中已经去掉了。
http://developer.baidu.com/map/i ... d-locsdk/guide/v5-0



这个帖子将的很详细:http://c.tieba.baidu.com/p/3237226241


自从google开放了Android L的下载后,很多人为了尝鲜,刷入了这个并不完善的新系统.毕竟是预览版,难免存在各种各样的问题,如保留数据刷入导致通知栏无法下拉,按home键不能回到桌面,sdcard无法读取等等.但是相比程序安装来说这都不是问题,因为前面的可以通过wipe解决,一劳永逸,而后者却会一直存在.


刷了Android L之后,有一部分软件无法正常安装,多表现为 同一家公司开发的软件只能安装一个或者一部分,并且基本上安装的时候都可以在底部看到了非android自带的权限, 于是有人猜测是不是它们相互唤醒的原因,其实仔细一想好像也不对,看看谷歌的一堆app就知道了.


通过实验,发现这些apk有一个或多个相同的自定义权限,但是签名不一致,因而无法正常安装,
并不是什么防止相互唤醒之类的,这应该是Android L的新规则,


碰到这类无法安装问题的解决办法有两个
1 (无需root)将所有冲突的apk用相同的签名文件重新签名即可正常安装.
2 (需要root,这应该是目前大多数人在用的办法)用rootexplorer或es文件管理器等将apk文件复制到/data/app/目录下,然后重启

顺便提一下,如果Android L单纯恢复efs电信3g无法正常使用的话,可以尝试讲efs和cache一起恢复.


=================================过程=====================================


下面以百度贴吧和百度输入法为例说明(这是推测的过程,不是什么严谨的证明,不用过分纠结,有些地方省略),看不懂也没关系,知道上面的解决办法就好了


1. 在手机端安装什么也看不到,只会显示安装失败,为了查找原因,我使用adb通过命令行安装,这样能知道问题出在哪.
首先安装贴吧,没什么问题, 然后安装输入法,问题来了,看绿色框, 提示安装失败因为权限重复(INSTALL_FAILED_DUPLICATE_PERMISSION), 具体的权限是"com.baidu.permission.SHARE",包名是"com.baidu.tieba",也就是已经安装的贴吧.



是不是安装顺序的问题呢,把贴吧卸载,先安装输入法,这次轮到贴吧装不上了,






2. 看看输入法里定义了什么权限,在底下的绿色框可以看到,输入法的确存在"com.baidu.permission.SHARE"这样的permission



再看贴吧,说明一下,因为贴吧要求的权限太多,没法一次完整截屏,只截取了开始和结束的部分,
这里同样存在"com.baidu.permission.SHARE"






3. 到底是不是因为permission相同的原因导致只能安装一个呢,还是弄两个程序验证下吧. 用android studio新建两个项目,在两个项目里都定义了相同的permission,神奇的事情来了,居然两个都安装成功了,难道不是permission相同造成的?



这两者的区别在哪,还有一个地方没注意到,看每个app的最后一行信息,那一长串字符代表的是证书指纹,这里用的是md5, 可以看到 贴吧和输入法的的证书指纹是不一样的,而我创建的两个app使用的是相同的签名文件,所以md5是一样的,在这里又可以推测: 证书指纹相同的情况下,定义了相同permission的程序可以共存




4. 最后来验证一下上面的猜测,给贴吧和输入法用同一个文件重新签名试试,这样两者就有了相同的签名.
用 rar 打开 apk文件, 删掉META-INF文件夹,通过命令行重新签名,两个都安装成功. 这也证实了前面的推测:如果两个apk定义了相同的permission,正常安装的条件之一是两者的签名相同



转载:https://blog.csdn.net/gjy211/article/details/51619422
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场