Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install com.xxx.xxx 477 without first uninstalling.]

在安装apk的时候安装不上,提示应用权限冲突

原因:

不同的apk使用了相同的自定义权限,注意: 是自定义权限。一般出现在推送的自定义权限当中,比如极光

<permission
        android:name="${JPUSH_PKGNAME}.permission.JPUSH_MESSAGE"
        android:protectionLevel="signature" />

根源:

Android 5.0为了规范应用程序的权限申请,限制第三方应用胡乱自定义权限,保护数据安全。

在安装程序时对应用申请的自定义权限进行检查。

当新安装的应用中,如果申请的自定义权限是其他 已安装应用 已经申请过的,并且 签名不同,就会提示权限冲突并退出安装。

解决方案:

如果你是普通用户: 遇到这种问题只能是尝试卸载可能出现的冲突的应用,来保证当前应用的正常安装. 卸载的标准是寻找跟当前App同一家的开发公司的App。这种情况一般出现在游戏应用当中,尤其是这些游戏都属于同一家公司的时候。

如果你是普通开发者:如果遇到这种业务需求即两个App必须使用同一个推送权限,那就只能保证两个App使用同一个签名。

如果你是游戏开发者:
1.将推送的包名改成不一样的。
2.游戏使用同一个签名,即使用相同的签名,也架不住渠道那边自己拆包之后重新签名。

所以建议用第一个。

如果以上说的听不懂, 那么我讲一个故事方便理解, 然后再回头看,就能明白了:

情景再现:
apk A 鬼鬼祟祟,小心翼翼申请安装。
Android OS 轻蔑:行了过去吧。

apk B 战战兢兢,如履薄冰申请安装。
Android OS 轻蔑:咦,你怎么和A申请了相同的自定义权限?

apk B 畏畏缩缩:我和他是一家的。
Android OS 轻蔑:一家的?你拿什么证明?

apk B 畏畏缩缩:这有开发者给我的签名。
Android OS 轻蔑:还真是跟A同一个签名,行了,过去吧(如果不是的话直接拍死你,拒绝安装: Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install com.xxx.xxx 477 without first uninstalling.])