Jak radzić sobie z nieznanym kodem błędu instalacji -505?

9

Mam Nexusa 7, który właśnie został zaktualizowany do Androida 5.

Dwie aplikacje przysparzają mi problemów po aktualizacji systemu, gry, w które grają moje dzieci. Dumb Ways to Die i VVVVVV. Obie miały ikony po aktualizacji, ale po kliknięciu pojawiło się okienko z komunikatem „Aplikacja nie została zainstalowana”. Próbuję je zainstalować. Pobieranie jest w porządku. Rozpocznie się instalacja. A następnie komunikat o błędzie:

Nieznany kod błędu podczas instalacji aplikacji: „-505”

Dokładnie taki sam błąd dla obu aplikacji. Zrestartowałem urządzenie bezskutecznie.

Nie mam pojęcia, co robić dalej. Proszę, czy jakaś miła dusza da mi radę, jak rozwiązać ten problem.

David Heffernan
źródło

Odpowiedzi:

10

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 .

Andrew T.
źródło
Mam to samo, co David: nic do odinstalowania z urządzenia, ADB nie widzi mojego urządzenia, próby ponownej instalacji skutkują -505 z Google Play i nieopisowy błąd po zainstalowaniu z lokalnego APK. Przejście na gościa też nie jest pomocne.
Roman R.
2
Cóż, właśnie zdałem sobie sprawę, że też napotkałem ten problem. Pomyślnie odinstalowałem problematyczne aplikacje adb, ale nie mogłem go ponownie zainstalować. Pamiętaj, że aplikacja, którą chcę zainstalować, ma air.comprefiks 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.
Andrew T.
3
Mam ten sam błąd na 5.1.1 (cyjanogenmod 12.1 galaxy s3 najnowszej nocy). Czy w jakiś sposób mieli stary kod, czy jest to nowszy błąd?
ike
1
Mam ten problem na Androidzie 6.0 Marshmallow. Czy było na to jakieś rozwiązanie, czy tylko czekało na OTA?
Ben
2
@Ben, ten post wspomina o problemach z INSTALL_FAILED_DUPLICATE_PERMISSION, który został naprawiony w wersji 5.0.1. Ten błąd wystąpił w firmie Marshmellow z powodu INSTALL_FAILED_CONFLICTING_PROVIDER. Korzystam z dostawcy okna dialogowego Share SDK Facebooka, który został zadeklarowany zarówno w moich kompilacjach debugowania, jak i wydaniach, co uniemożliwia instalację kompilacji wersji ze Sklepu Google Play. Możesz zobaczyć dokładną wiadomość podczas przeglądania swojego logb adb. W moim przypadku zdecydowałem się zmienić nazwę <dostawcy> debugowania kompilacji poprzez użycie manifestPlaceholder w nazwie mojego dostawcy.
Mike Lambert