Answers:
当应用尝试重新声明现有权限时出现错误消息,就会发生此问题INSTALL_FAILED_DUPLICATE_PERMISSION
。它主要影响了基于Adobe AIR(带有包前缀com.air
)的应用。的主要原因是棒棒堂5.0不同的代码实现当验证使用证书的签名签署的应用程序。对于解决方案,只需跳至“解决方案”部分。
更新:Google已在Lollipop 5.0.1上修复了此问题。
摘自AOSP问题跟踪器上的条目所链接的Android L Developer Preview问题跟踪器的摘录,
帖子4:
logcat告诉我在安装过程中重新声明权限存在冲突(在我的情况下,Amazon试图重新声明getui.permission.GetuiService,它已由Camera 360拥有)
10-25 08:06:37.805 749 824 W PackageManager: Package com.tencent.mm attempting to redeclare permission com.google.android.c2dm.permission.SEND already owned by com.google.android.gsf
10-25 08:06:37.926 4812 4812 D Finsky : [1] PackageInstallerImpl.cancelSession: Canceling session 121130466 for com.tencent.mm
10-25 08:06:37.926 4812 4812 E Finsky : [1] PackageInstallerImpl.handleCommitCallback: Error -505 while installing com.tencent.mm: INSTALL_FAILED_DUPLICATE_PERMISSION: Package com.tencent.mm attempting to redeclare permission com.google.android.c2dm.permission.SEND already owned by com.google.android.gsf
10-25 08:06:37.926 4812 4812 W Finsky : [1] 4.installFailed: Install failure of com.tencent.mm: -505 null
10-25 08:06:37.933 749 749 D ZenLog : intercepted: 0|com.android.vending|-973170826|null|10017,!priority
10-25 08:06:37.933 749 749 V NotificationService: pkg=com.android.vending canInterrupt=false intercept=true
10-25 08:06:37.964 4812 4812 D Finsky : [1] InstallerTask.cancelCleanup: Cancel running installation of com.tencent.mm
摘自AOSP问题跟踪器,
在API19中,新的X509CertImpl(encCert)包装了证书(已经解析并准备用于SHA1计算),而在API 21中,证书将作为字节流转发,再次进行解析并由证书工厂处理。即哪个工厂取决于上下文。对于我测试过的L设备,工厂将创建一个OpenSSLX509Certificate。不幸的是,我们的证书中存在某些问题,openssl会遇到问题,并且在opensl处理期间会更改指纹。当我将证书转换为其他格式(例如PEM)时,也可以使用openssl工具来重现此内容。
如果SHA1将直接在'encCert.getEncoded()'上计算,则在两种情况下都是正确的。
更新:自2014年12月4日起,Google已在Lollipop 5.0.1上修复了此问题。对于那些没有尝试重新安装应用程序的人,您可以在准备好/等待OTA时刷新Lollipop 5.0.1映像。
看起来此问题已在5.0.1中修复:
https://android.googlesource.com/platform/libcore/+/6632d8c9d8d1a3ac338d541676148677641bafe3
https://android.googlesource.com/platform/frameworks/base/+/32a22c44b8351c1cccd3a1f9c47a33469d9378e0
状态:已发布
使用格式错误的证书恢复应用。
在Lollipop中有一个时间窗,在证书经过解码/编码周期后,我们会保留证书。编写良好的OpenSSL库在解码时是自由的(允许解析格式稍有误的证书),但在编码时则严格,为有效的同一个证书提供了不同的字节。
现在,相关的libcore更改(0c990ab4a90b8a5492a67b2b728ac9a4a1ccfa1b)会逐字返回原始字节,从而修复了Lollipop之前的安装以及在该更改之后进行的安装。
通过进行一次检查以查看证书是否有效,此更改可恢复在上述时间段内安装的所有应用程序。
有关其他建议的解决方案,请参考旧版本。
adb
,但无法重新安装。请注意,我要安装的应用程序具有air.com
前缀作为程序包名称。看来这在Google,Adobe Air和应用程序开发人员之间更是一个问题。在至少其中一个修复它之前,将无法安装该应用程序。我为该问题加注了星标,以获取Google的更新。