TL; DR
Masalah ini terjadi ketika aplikasi mencoba untuk mendeklarasikan ulang izin yang ada, dengan pesan kesalahan INSTALL_FAILED_DUPLICATE_PERMISSION
. Ini terutama mempengaruhi aplikasi yang didasarkan pada Adobe AIR (awalan paket dengan com.air
). Penyebab utama adalah implementasi kode yang berbeda di Lollipop 5.0 ketika memverifikasi tanda tangan sertifikat yang digunakan untuk menandatangani aplikasi. Untuk solusinya, langsung saja ke bagian "Solusi".
Pembaruan : Google telah memperbaiki masalah ini di Lollipop 5.0.1.
Detail Teknis
Kutipan dari pelacak masalah Pratinjau Pengembang Android L yang ditautkan dari entri pada pelacak masalah AOSP ,
Posting # 4 :
logcat memberi tahu saya ada konflik dengan izin redeclaring selama instalasi (dalam kasus saya, Amazon sedang mencoba untuk redecare getui.permission.GetuiService, yang sudah dimiliki oleh Camera 360)
LogCat Posting # 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
Kutipan dari pelacak masalah AOSP ,
Posting # 4
Di API19, X509CertImpl (encCert) baru membungkus sertifikat (yang sudah diuraikan dan siap untuk perhitungan SHA1), sementara di API 21, sertifikat diteruskan sebagai aliran byte, diurai lagi dan diproses oleh pabrik sertifikat. Pabrik yang mana, tergantung pada konteksnya. Dalam hal perangkat L yang saya uji, pabrik akan membuat Sertifikat OpenSSLX509. Sayangnya, ada sesuatu dalam sertifikat kami yang openssl bermasalah dengan dan sidik jari berubah selama pemrosesan openssl. Saya dapat mereproduksi ini juga dengan alat openssl, ketika saya mengubah sertifikat kami ke beberapa format lain (misalnya, PEM).
Jika SHA1 akan dihitung langsung di 'encCert.getEncoded ()' itu akan benar dalam kedua kasus.
Larutan
Pembaruan : Mulai 2014-12-04, Google telah memperbaiki masalah ini di Lollipop 5.0.1. Bagi mereka yang tidak melakukan solusi untuk menginstal ulang aplikasi, Anda dapat mem-flash gambar Lollipop 5.0.1 saat siap / menunggu OTA.
Posting # 20, # 21
Sepertinya ini telah diperbaiki di 5.0.1:
https://android.googlesource.com/platform/libcore/+/6632d8c9d8d1a3ac338d541676148677641bafe3
https://android.googlesource.com/platform/frameworks/base/+/32a22c44b8351c1cccd3a1f9c47a33469d9378e0
Status: Dirilis
Catatan Committer
Pulihkan aplikasi dengan sertifikat salah bentuk.
Ada jangka waktu di Lollipop di mana kami bertahan sertifikat setelah mereka melewati siklus decode / encode. Pustaka OpenSSL yang ditulis dengan baik adalah liberal ketika decoding (memungkinkan sertifikat sedikit cacat untuk diurai), tetapi kemudian ketat ketika encoding, memberi kami byte yang berbeda untuk secara efektif sertifikat yang sama.
Perubahan libcore terkait (0c990ab4a90b8a5492a67b2b728ac9a4a1ccfa1b) sekarang mengembalikan byte asli kata demi kata, memperbaiki kedua pra-Lollipop menginstal dan menginstal setelah perubahan itu.
Perubahan ini memulihkan semua aplikasi yang telah diinstal selama jangka waktu yang dijelaskan di atas dengan melakukan pemeriksaan satu kali untuk melihat apakah sertifikat secara efektif sama.
Silakan lihat revisi yang lebih lama untuk solusi yang disarankan lainnya.