TL;DR
Ce problème se produit lorsqu'une application tente de redéclarer une permission existante, avec un message d'erreur INSTALL_FAILED_DUPLICATE_PERMISSION
. Il a principalement affecté les applications basées sur Adobe AIR (préfixe de paquet avec com.air
). Le site principale cause est l'implémentation différente du code dans Lollipop 5.0 lors de la vérification de la signature d'un certificat utilisé pour signer une application. Pour la solution, il suffit de passer à la partie "Solution".
更新情報 : Google a corrigé ce problème sur Lollipop 5.0.1.
Détails techniques
Extraits de Suivi des problèmes liés à l'aperçu pour développeurs d'Android L qui sont liés à une entrée sur l'AOSP issue tracker ,
Poste n°4 :
logcat me dit qu'il y a un conflit avec la redéclaration des permissions pendant l'installation (dans mon cas, Amazon essaie de redéclarer getui.permission.GetuiService, qui est déjà détenu par Camera 360)
LogCat du poste n°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 de Suivi des problèmes de l'AOSP ,
Poste n°4
Dans l'API 19, le nouveau X509CertImpl(encCert) enveloppe le certificat (qui est déjà analysé et prêt pour le calcul SHA1), tandis que dans l'API 21, le certificat est transmis sous forme de flux d'octets, analysé à nouveau et traité par une fabrique de certificats. Laquelle dépend du contexte. Dans le cas des appareils L sur lesquels j'ai testé, la fabrique créera un certificat OpenSSLX509Certificate. Malheureusement, il y a quelque chose dans notre certificat avec lequel openssl a des problèmes et l'empreinte digitale change pendant le traitement openssl. Je peux reproduire ce phénomène également avec l'outil openssl, lorsque je convertis notre certificat dans un autre format (par exemple, PEM).
Si le SHA1 était calculé directement sur 'encCert.getEncoded()', il serait correct dans les deux cas.
Solution
更新情報 : En date du 2014-12-04, Google a corrigé 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 quand elle sera prête/attendre l'OTA.
Postes 20 et 21
Il semble que cela ait été corrigé dans la version 5.0.1 :
https://Android.googlesource.com/platform/libcore/+/6632d8c9d8d1a3ac338d541676148677641bafe3
https://Android.googlesource.com/platform/frameworks/base/+/32a22c44b8351c1cccd3a1f9c47a33469d9378e0
Statut : Libéré
Note du commissaire
Récupérer les applications avec des certificats malformés.
Il y a eu une fenêtre de temps dans Lollipop où nous avons persisté dans les certificats. après qu'ils soient passés par un cycle de décodage/encodage. La bibliothèque OpenSSL, bien écrite bien écrite était libérale lors du décodage (permettant à des certificats légèrement légèrement malformés d'être analysés), mais stricte lors de l'encodage, nous donnant octets différents pour le même certificat.
Une modification connexe de libcore (0c990ab4a90b8a5492a67b2b728ac9a4a1ccfa1b) renvoie maintenant les octets d'origine mot pour mot, corrigeant ainsi les installations et les installations après ce changement.
Ce changement permet de récupérer toutes les applications qui avaient été installées lors de la fenêtre de temps décrite ci-dessus en effectuant une vérification unique pour voir si les certitudes sont effectivement égales.
Veuillez vous référer à ancienne version pour d'autres solutions proposées.