TL; DR
Ten problem występuje, gdy aplikacja próbuje ponownie zadeklarować istniejące uprawnienie z komunikatem o błędzie INSTALL_FAILED_DUPLICATE_PERMISSION
. Dotyczyło to głównie aplikacji opartych na środowisku Adobe AIR (prefiks pakietu z com.air
). Główną przyczyną jest inna implementacja kodu w Lollipop 5,0 podczas weryfikacji podpisu certyfikat jest używany do podpisywania aplikacji. Aby znaleźć rozwiązanie, po prostu przejdź do części „Rozwiązanie”.
Aktualizacja : Google naprawił ten problem w Lollipop 5.0.1.
Szczegóły techniczne
Fragmenty narzędzia do śledzenia problemów z podglądem dewelopera Androida L, które są połączone z wpisem w narzędziu do śledzenia problemów AOSP ,
Post nr 4 :
logcat mówi mi, że podczas instalacji występuje konflikt z uprawnieniami do ponownego udostępniania (w moim przypadku Amazon próbuje przywrócić getui.permission.GetuiService, który jest już własnością Camera 360)
LogCat po numerze 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
Fragmenty narzędzia do śledzenia problemów AOSP ,
Post nr 4
W API19 nowy X509CertImpl (encCert) otacza certyfikat (który jest już przeanalizowany i gotowy do obliczeń SHA1), natomiast w API 21 certyfikat jest przesyłany jako strumień bajtów, ponownie analizowany i przetwarzany przez fabrykę certyfikatów. Która to fabryka zależy od kontekstu. W przypadku testowanych urządzeń L fabryka utworzy certyfikat OpenSSLX509. Niestety w naszym certyfikacie jest coś, z czym openssl ma problemy, a odcisk palca zmienia się podczas przetwarzania openssl. Mogę to odtworzyć również za pomocą narzędzia openssl, kiedy przekonwertuję nasz certyfikat na inny format (np. PEM).
Jeśli SHA1 byłby obliczany bezpośrednio na 'encCert.getEncoded ()', byłoby poprawne w obu przypadkach.
Rozwiązanie
Aktualizacja : od 2014-12-04 Google naprawił ten problem w Lollipop 5.0.1. Dla tych, którzy nie próbowali obejść problemu, próbując ponownie zainstalować aplikację, możesz sflashować obraz Lollipop 5.0.1, gdy będzie gotowy / czekać na OTA.
Post nr 20, nr 21
Wygląda na to, że zostało to naprawione w 5.0.1:
https://android.googlesource.com/platform/libcore/+/6632d8c9d8d1a3ac338d541676148677641bafe3
https://android.googlesource.com/platform/frameworks/base/+/32a22c44b8351c1cccd3a1f9c47a33469d9378e0
Status: zwolniony
Nota osoby odpowiedzialnej
Odzyskaj aplikacje ze źle sformułowanymi certyfikatami.
W Lollipop było okno czasu, w którym utrwalaliśmy certyfikaty po przejściu przez cykl dekodowania / kodowania. Dobrze napisana biblioteka OpenSSL była liberalna podczas dekodowania (umożliwiając parsowanie lekko zniekształconych certyfikatów), ale następnie ścisła podczas kodowania, dając nam różne bajty dla efektywnie tego samego certyfikatu.
Powiązana zmiana libcore (0c990ab4a90b8a5492a67b2b728ac9a4a1ccfa1b) zwraca teraz oryginalne bajty dosłownie, ustalając zarówno instalacje przed instalacją Lollipopa, jak i instalacje po tej zmianie.
Ta zmiana odzyskuje wszystkie aplikacje, które zostały zainstalowane w wyżej opisanym przedziale czasu, wykonując jednorazowe sprawdzenie, czy certyfikaty są faktycznie równe.
Inne sugerowane rozwiązania można znaleźć w starszej wersji .
adb
, ale nie mogłem go ponownie zainstalować. Pamiętaj, że aplikacja, którą chcę zainstalować, maair.com
prefiks jako nazwę pakietu. Wygląda na to, że jest to raczej problem między Google, Adobe Air i twórcami aplikacji. Dopóki przynajmniej jeden z nich go nie naprawi, nie będzie można zainstalować aplikacji. Oznaczono mnie gwiazdką, aby uzyskać aktualizację od Google.