TL; DR
Ce problème se produit lorsqu'une application tente de re-déclarer une autorisation existante, avec un message d'erreur INSTALL_FAILED_DUPLICATE_PERMISSION
. Il a principalement affecté les applications basées sur Adobe AIR (préfixe de package avec com.air
). La principale cause est l'implémentation de code différente dans Lollipop 5.0 lors de la vérification de la signature d'un certificat utilisé pour signer une application. Pour la solution, passez simplement à la partie "Solution".
Mise à jour : Google a résolu ce problème sur Lollipop 5.0.1.
Détails techniques
Extraits du traqueur de problèmes d'Aperçu du développeur Android L qui sont liés à partir d' une entrée sur le traqueur de problèmes AOSP ,
Message n ° 4 :
logcat m'indique qu'il y a un conflit avec les autorisations de redéclaration lors de l'installation (dans mon cas, Amazon essaie de redéclarer getui.permission.GetuiService, qui appartient déjà à Camera 360)
LogCat du message # 12 :
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
Extraits du traqueur de problèmes AOSP ,
Message n ° 4
Dans API19, le nouveau X509CertImpl (encCert) encapsule le certificat (qui est déjà analysé et prêt pour le calcul SHA1), tandis que dans API 21, le certificat est transmis sous forme de flux d'octets, analysé à nouveau et traité par une fabrique de certificats. Quelle usine dépend du contexte. Dans le cas des appareils L sur lesquels j'ai testé, l'usine créera un certificat OpenSSLX509. Malheureusement, il y a quelque chose dans notre certificat qui a des problèmes avec openssl et les empreintes digitales changent pendant le traitement avec openssl. Je peux le reproduire également avec l'outil openssl, lorsque je convertis notre certificat en un autre format (par exemple, PEM).
Si le SHA1 était calculé directement sur 'encCert.getEncoded ()', ce serait correct dans les deux cas.
Solution
Mise à jour : Depuis le 2014-12-04, Google a résolu ce problème sur Lollipop 5.0.1. Pour ceux qui n'ont pas fait de solution de contournement en essayant de réinstaller l'application, vous pouvez flasher l'image Lollipop 5.0.1 lorsqu'elle est prête / attendre l'OTA.
Message # 20, # 21
On dirait que cela a été corrigé dans 5.0.1:
https://android.googlesource.com/platform/libcore/+/6632d8c9d8d1a3ac338d541676148677641bafe3
https://android.googlesource.com/platform/frameworks/base/+/32a22c44b8351c1cccd3a1f9c47a33469d9378e0
Statut: libéré
Note du Committer
Récupérez des applications avec des certificats mal formés.
Il y avait une fenêtre de temps dans Lollipop où nous avons persisté les certificats après qu'ils aient traversé un cycle de décodage / encodage. La bibliothèque OpenSSL bien écrite était libérale lors du décodage (permettant l'analyse des certificats légèrement mal formés), mais stricte lors du codage, nous donnant différents octets pour effectivement le même certificat.
Un changement de libcore connexe (0c990ab4a90b8a5492a67b2b728ac9a4a1ccfa1b) renvoie désormais les octets originaux textuellement, corrigeant les installations pré-Lollipop et les installations après ce changement.
Cette modification récupère toutes les applications qui avaient été installées pendant la fenêtre de temps décrite ci-dessus en effectuant une vérification unique pour voir si les certificats sont effectivement égaux.
Veuillez vous référer à l' ancienne révision pour d'autres solutions suggérées.