TL; DR
Bu sorun, bir uygulama hata iletisiyle var olan bir izni yeniden bildirmeye çalıştığında oluşur INSTALL_FAILED_DUPLICATE_PERMISSION
. Esas olarak Adobe AIR (paket öneki ile com.air
) tabanlı uygulamaları etkiledi . Ana nedeni , bir sertifikanın imzası bir uygulamayı imzalamak için kullanılan kullanıldığını doğrulamak zaman Lollipop 5.0 farklı kod uygulamasıdır. Çözüm için "Çözüm" bölümüne atlamanız yeterlidir.
Güncelleme : Google, Lollipop 5.0.1'de bu sorunu çözdü.
Teknik detaylar
AOSP sorun izleyicisindeki bir girişten bağlanan Android L Geliştirici Önizleme sorun izleyicisinden alıntılar ,
Gönderi # 4 :
logcat bana kurulum sırasında yeniden bildirme izinleriyle bir çakışma olduğunu söylüyor (benim durumumda, Amazon getui.permission.GetuiService, zaten Camera 360'a ait)
Mesaj # 12'nin LogCat'i :
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 sayı izleyicisinden alıntılar ,
Gönderi # 4
API19'da yeni X509CertImpl (encCert) sertifikayı (zaten ayrıştırılmış ve SHA1 hesaplaması için hazır) sararken, API 21'de sertifika bayt akışı olarak iletilir, tekrar ayrıştırılır ve bir sertifika fabrikası tarafından işlenir. Hangi fabrika, bağlama bağlıdır. Test ettiğim L cihazları için fabrika bir OpenSSLX509Sertifika oluşturur. Ne yazık ki, sertifikamızda openssl ile ilgili bir sorun var ve openssl işleme sırasında parmak izi değişiyor. Sertifikamızı başka bir formata (örneğin, PEM) dönüştürdüğümde bunu openssl aracıyla da çoğaltabilirim.
SHA1 doğrudan 'encCert.getEncoded ()' üzerinde hesaplanacaksa, her iki durumda da doğru olur.
Çözüm
Güncelleme : 2014-12-04 itibariyle Google, Lollipop 5.0.1'de bu sorunu çözdü. Uygulamayı yeniden yüklemeye çalışan herhangi bir geçici çözüm yapmayanlar için, OTA için hazır olduğunda / beklerken Lollipop 5.0.1 görüntüsünü flaş edebilirsiniz.
Mesaj # 20, # 21
Bunun 5.0.1'de giderildiği anlaşılıyor:
https://android.googlesource.com/platform/libcore/+/6632d8c9d8d1a3ac338d541676148677641bafe3
https://android.googlesource.com/platform/frameworks/base/+/32a22c44b8351c1cccd3a1f9c47a33469d9378e0
Durum: Yayınlandı
Taşıtın notu
Yanlış biçimlendirilmiş sertifikalara sahip uygulamaları kurtarın.
Lollipop'ta, bir kod çözme / kodlama döngüsünden geçtikten sonra sertifikaları devam ettirdiğimiz bir zaman penceresi vardı. İyi yazılmış OpenSSL kütüphanesi, kod çözme sırasında (biraz hatalı biçimlendirilmiş sertifikaların ayrıştırılmasına izin verirken) liberaldi, ancak kodlama sırasında katıydı ve etkili bir şekilde aynı sertifika için bize farklı baytlar verdi.
İlişkili bir libcore değişikliği (0c990ab4a90b8a5492a67b2b728ac9a4a1ccfa1b) artık orijinal bayt kelimesini döndürerek, bu değişiklikten sonra hem Lollipop öncesi kurulumları hem de kurulumları düzeltiyor.
Bu değişiklik, sunucuların etkin bir şekilde eşit olup olmadığını görmek için tek seferlik bir kontrol yaparak yukarıda açıklanan zaman aralığı boyunca yüklenmiş olan uygulamaları kurtarır.
Önerilen diğer çözümler için lütfen eski düzeltmeye bakın .