Jak radzić sobie z INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES bez odinstalowywania?


277

Próbowałem ponownie zainstalować apk

$adb install -r new.apk

I pokazuje błąd:

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]

Jednym z rozwiązań jest odinstalowanie i zainstalowanie new.apk, który działa dobrze.

Ale zastanawiam się, czy mógłbym przebudować apk i zainstalować ponownie bez dezinstalacji. Na przykład. zmień konfigurację w pliku AndroidManifest.xml lub nie podpisuj APK itp.

Byłoby bardzo mile widziane, gdybyś mógł mi powiedzieć całe znaczenie „INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES”.


Spróbuj obejść problem, uruchamiając aplikację na rzeczywistym urządzeniu, zawsze działa dla mnie
Kyle,

To nie działa dla mnie. ^ @ Mr.Derpinthoughton
Crime_Master_GoGo

Może się to również zdarzyć, gdy aplikacja jest podpisana dwukrotnie, a aktualizacja jest podpisana w odwrotnej kolejności. Aby uzyskać więcej informacji, zobacz stackoverflow.com/a/13618894/5276890 .
Roy Falk,

Odpowiedzi:


319

Oznacza to, że nowa kopia aplikacji (na komputerze dewelopera) została podpisana innym kluczem do podpisywania niż stara kopia aplikacji (zainstalowana na urządzeniu / emulatorze). Na przykład, jeśli jest to urządzenie, możliwe, że nałożyłeś starą kopię z innego komputera programistycznego (np. Innego komputera programisty). Lub stary podpisany jest kluczem produkcyjnym, a nowy podpisany kluczem debugowania.


6
@atourney: Musisz skopiować plik kluczy poprzedniego komputera (np. debug.keystore) na nowy komputer.
CommonsWare

12
Pamiętaj, że debug.keystorenie ma go w katalogu projektu. Zwykle znajduje się w twoim ~/.android/katalogu. (patrz developer.android.com/guide/publishing/… )
ohhorob

3
Jak można nadać pakietowi debugującemu inną nazwę? (np. {PRODUCT_NAME} Dev)
sandstrom

6
@ChristianBongiorno: Synchronizuj swoje magazyny kluczy do podpisywania (np debug.keystore.). Wybierz jeden, aby być głównym magazynem kluczy, skopiuj go na wszystkie inne komputery programistów, zastępując ich istniejący magazyn kluczy.
CommonsWare

2
Nie zapomnij też odbudować projektu po skopiowaniu pliku. Przeniosłem pliki i ponownie wysłałem aplikację na urządzenie (ale nadal używało starej debug.keystore). Kiedy odbudowałem projekt (używając Build-> Rebuild w Android Studio) klucze były zsynchronizowane.
Benjamin Kaiser

48

Wpadłem na to podczas testowania nowego Xooma. Wcześniej zainstalowałem aplikację z Marketplace. Później podczas próby przetestowania nowej wersji aplikacji napotkałem ten błąd.

Naprawiłem to, usuwając aplikację zainstalowaną za pośrednictwem usługi Marketplace (wystarczy przytrzymać i przeciągnąć do kosza). Następnie mogłem bez problemu wdrożyć moją wersję programistyczną.


12
tak, odinstalowanie rozwiąże ten problem z uprawnieniami. Zastanawiałem się, czy mogę to rozwiązać bez odinstalowywania
Johnny

Mam nowy telefon i zapomniałem o tym. Jak mam to zaznaczyć dwa razy :)
Anthony Horne

22

Stało się tak, gdy inny programista w zespole zbudował naszą aplikację na urządzeniu sprzętowym, na którym próbowałem wdrożyć. Odinstalowanie aplikacji ze sprzętu naprawiło mój problem.


16
Wspaniały! Pracował po komendzie adb uninstall <package name>. Dzięki.
Paul

Miałem bardziej wyjątkowy przypadek, ale ta odpowiedź doprowadziła do rozwiązania. Miałem aplikację zainstalowaną lokalnie za pośrednictwem interfejsu Cordova CLI, a także jedną z wersji PG. Musiałem odinstalować obie aplikacje, aby błąd zniknął.
DemitryT

@Paul Wasza ekscelencjo - królu Pawle I, chociaż nie jestem pierwotnym pytającym, wasze polecenie działało dla mnie (i bez wątpienia inni, biorąc pod uwagę, jak pozytywny jest wasz komentarz). Czy mogę zasugerować, że opublikujesz to jako odpowiedź?
barlop

1
@barlop: Wysłałem odpowiedź z poleceniem, aby być bardziej widocznym dla innych osób, które również mogą napotkać ten problem. Dzięki.
Paul,

3
Nie rozumiem, dlaczego ta odpowiedź ma pozytywne głosy. Wyraźnie mówi „BEZ ODINSTALOWANIA”! -
Christian

20

To polecenie odinstalowania aplikacji z urządzenia za pomocą adb:

adb uninstall <package name>

8
Pytanie dotyczy sposobu rozwiązania problemu bez odinstalowywania.
Janaka Bandara

2
Nie rozumiem, dlaczego ta odpowiedź ma pozytywne głosy. Wyraźnie mówi „BEZ ODINSTALOWANIA”!
Christian

Nie ma flagi pm zastępującej pakiet niespójnym certyfikatem, prawda? Intencja bezpieczeństwa?
JohnyTex,

9

Ten błąd pojawił się nawet po odinstalowaniu oryginalnego pakietu APK, co było dziwne. W końcu zdałem sobie sprawę, że skonfigurowałem wielu użytkowników na moim Nexusie 7 do testowania i że aplikacja była nadal zainstalowana dla jednego z pozostałych użytkowników. Po odinstalowaniu go dla wszystkich użytkowników błąd zniknął.


5

Zmieniłem nazwę pakietu podczas kodowania aktualizacji, aby móc debugować ją na moim urządzeniu za pośrednictwem Eclipse, bez usuwania starej zainstalowanej wersji. Bez cofania nazwy pakietu, którego użyłem podczas próby ponownej instalacji, wystąpił ten sam błąd. Przy użyciu tej samej nazwy pakietu ponowna instalacja zakończyła się powodzeniem.


3

Po prostu usuń starą wersję z urządzenia i zainstaluj ją ponownie. Ponieważ device.keystore już istnieje w urządzeniu, po prostu odinstaluj kompilację i ponownie zainstaluj pakiet APK.

Dzięki


Tak, lepsza i lepsza odpowiedź to odpowiedź z CommonsWare. Dzięki
tres.14159,

3

Napotkałem inny przypadek użycia, w którym dostałem podobny błąd. Gdy na początku pojawił się błąd, spanikowałem i usunąłem. /data/data/{package.name} Następnie spróbowałem, a mój problem nadal występował. Potem spróbowałem odinstalować, to nie powiodło się.

Następnie usunąłem plik apk obecny /system/app(wymagany dostęp do roota) i spróbowałem odinstalować i udało się.

Potem próbowałem ponownie zainstalować apk, zadziałało.


1

Jeśli chodzi o to, co warto, napotkałem ten problem po dodaniu nowej wtyczki do mojego projektu Cordova. Miałem Cordova do kompilacji i instalacji bezpośrednio na urządzeniu przez USB.

Naprawiłem to, odinstalowując aplikację z urządzenia, a przy następnym wdrożeniu nie było problemów.


1

Jeśli napotkasz nieudane wdrożenie na urządzeniu lub emulatorze Andorid z błędem „Błąd [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]” w oknie Wyjście, po prostu usuń istniejącą aplikację na urządzeniu lub emulatorze i ponownie wdróż. Kompilacje debugowania będą używać certyfikatu debugowania, a kompilacje wersji będą używać skonfigurowanego certyfikatu. Ten błąd informuje po prostu, że certyfikat aplikacji zainstalowanej na urządzeniu jest inny niż ten, który próbujesz zainstalować. W scenariuszach niezwiązanych z programowaniem (sklep z aplikacjami) może to wskazywać na uszkodzoną lub w inny sposób zmodyfikowaną aplikację, której instalacja na urządzeniu nie jest bezpieczna.


0

Nic z góry nie działało dla mnie. Problem polegał na tym, że miałem złe źródło w mojej ścieżce kompilacji Java dla android-support-v7-appcompat. Po przejściu do opcji Projekt> Ścieżka kompilacji> Konfiguruj ścieżkę kompilacji>. Na karcie Źródło upewnij się, że masz Android-support-v7-appcompat / gen, android-support-v7-appcompat / libs i android-support-v7-appcompat / src i nic więcej. Kliknij OK i powinno działać.


0

Miałem dzisiaj ten sam błąd, ale problem nie był dokładnie taki sam. Używam ADB z Androidem zainstalowanym w VirtualBox . Próbowałem zainstalować różne wersje mojej aplikacji (podpisany / niepodpisany, tryb debugowania / wydania) i dostałem dwa błędy na przemian: INSTALL_FAILED_UID_CHANGEDi INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES.

Teraz, patrząc na to /data/data/{package.name}, znalazłem kilka plików, które nadal tam były po odinstalowaniu aplikacji. Próbowałem rm -rfich bez powodzenia: dostałem błędy we / wy.

Rozwiązaniem tego było:

  • Zamknij maszynę wirtualną
  • Zamontuj obraz VDI za pomocą vdfuse(odczyt / zapis)
  • Napraw Partition1plik obrazu za pomocąe2fsck
  • Umount i zrestartuj maszynę wirtualną

0

Miałem ten sam problem, dopóki nie zdałem sobie sprawy, że mam uruchomiony symulator i adb próbował na nim zainstalować


0

Ponieważ weryfikacja opiera się na nazwie pakietu, możesz zmienić nazwę pakietu w pliku config.xml lub pliku manifestu na inną nazwę, którą chcesz.

Podczas publikowania aplikacji nie zapomnij zmienić nazwy!


0

Miałem ten problem przy próbie wykonania zadania stopniowego connectedDebugAndoidTest(lub connectedAndroidTest) na Genymotion . Uruchomienie go na normalnym emulatorze rozwiązało problem.


Dostawałem to również w tej samej sytuacji (testowanie z Genymotion). Okazuje się, że był to konflikt z podpisem dla pakietu testowego. Usunięcie pakietu testowego rozwiązało problem.
D-C0d3r

0

Myślę, że Twoja aplikacja została zainstalowana przez inne konto. (Funkcja trybu wielu kont) Możesz odinstalować aplikację w Ustawieniach> Aplikacje> „Nazwa aplikacji”> Odinstaluj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.