TL; DR
Esse problema ocorre quando um aplicativo está tentando declarar novamente uma permissão existente, com mensagem de erro INSTALL_FAILED_DUPLICATE_PERMISSION
. Isso afetou principalmente os aplicativos baseados no Adobe AIR (prefixo do pacote com com.air
). A principal causa é a implementação de código diferente no Lollipop 5.0 ao verificar a assinatura de um certificado usada para assinar um aplicativo. Para a solução, pule para a parte "Solução".
Atualização : o Google corrigiu esse problema no Lollipop 5.0.1.
Detalhes técnicos
Trechos do rastreador de problemas do Android L Developer Preview, vinculado a uma entrada no rastreador de problemas do AOSP ,
Postagem nº 4 :
O logcat me diz que há um conflito com a redeclaração de permissões durante a instalação (no meu caso, a Amazon está tentando redeclarar getui.permission.GetuiService, que já é de propriedade da Câmera 360)
LogCat da publicação # 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
Trechos do rastreador de problemas do AOSP ,
Post # 4
Na API19, o novo X509CertImpl (encCert) agrupa o certificado (que já está analisado e pronto para computação SHA1), enquanto na API 21, o certificado é encaminhado como fluxo de bytes, analisado novamente e processado por uma fábrica de certificados. Qual fábrica depende do contexto. No caso dos dispositivos L em que testei, a fábrica criará um certificado OpenSSLX509. Infelizmente, há algo em nosso certificado com o qual o openssl tem problemas e a impressão digital é alterada durante o processamento do openssl. Também posso reproduzir isso com a ferramenta openssl, quando converto nosso certificado em outro formato (por exemplo, PEM).
Se o SHA1 fosse computado diretamente em 'encCert.getEncoded ()', estaria correto nos dois casos.
Solução
Atualização : a partir de 04/12/2014, o Google corrigiu esse problema no Lollipop 5.0.1. Para aqueles que não fizeram nenhuma solução alternativa tentando reinstalar o aplicativo, você pode exibir a imagem do Lollipop 5.0.1 quando estiver pronta / aguardar a OTA.
Post # 20, # 21
Parece que isso foi corrigido no 5.0.1:
https://android.googlesource.com/platform/libcore/+/6632d8c9d8d1a3ac338d541676148677641bafe3
https://android.googlesource.com/platform/frameworks/base/+/32a22c44b8351c1cccd3a1f9c47a33469d9378e0
Status: Lançado
Nota do Committer
Recupere aplicativos com certificados malformados.
Houve uma janela de tempo no Lollipop em que persistimos os certificados depois que eles passaram por um ciclo de decodificação / codificação. A bem-escrita biblioteca OpenSSL era liberal ao decodificar (permitindo a análise de documentos ligeiramente malformados), mas depois rigorosa ao codificar, fornecendo-nos bytes diferentes para efetivamente o mesmo certificado.
Uma alteração de libcore relacionada (0c990ab4a90b8a5492a67b2b728ac9a4a1ccfa1b) agora retorna os bytes originais literalmente, corrigindo as instalações e instalações pré-pirulito após essa alteração.
Essa alteração recupera todos os aplicativos que foram instalados durante o período de tempo descrito acima, fazendo uma verificação única para verificar se os certificados são efetivamente iguais.
Consulte a revisão mais antiga para outras soluções sugeridas.