Come gestire INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES senza disinstallazione?


277

Ho provato a reinstallare un apk

$adb install -r new.apk

E mostra l'errore:

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]

Una soluzione è disinstallare e installare new.apk, che funziona perfettamente.

Ma mi chiedo se potrei ricostruire un apk e reinstallarlo senza la disinstallazione. Per esempio. modificare alcune configurazioni in AndroidManifest.xml o non firmare l'APK, ecc.

Sarebbe molto apprezzato se potessi dirmi l'intero significato dei "INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES".


Prova a risolvere il problema eseguendo l'apk su un dispositivo reale, funziona sempre per me
Kyle,

Non funziona per me. ^ @ Mr.Derpinthoughton
Crime_Master_GoGo

Ciò può verificarsi anche quando l'app viene firmata due volte e l'aggiornamento viene firmato nell'ordine inverso. Vedi stackoverflow.com/a/13618894/5276890 per ulteriori informazioni al riguardo.
Roy Falk,

Risposte:


319

Significa che la nuova copia della tua applicazione (sulla tua macchina di sviluppo) è stata firmata con una chiave di firma diversa rispetto alla vecchia copia della tua applicazione (installata sul dispositivo / emulatore). Ad esempio, se si tratta di un dispositivo, è possibile che tu abbia installato la vecchia copia da un altro computer di sviluppo (ad esempio, un altro computer di sviluppo). Oppure, quello vecchio è firmato con la chiave di produzione e quello nuovo è firmato con la chiave di debug.


6
@atourney: dovresti copiare il keystore della macchina precedente (ad es. debug.keystore) sulla tua nuova macchina.
CommonsWare,

12
Si noti che debug.keystorenon si trova nella directory del progetto. Normalmente si trova nella tua ~/.android/directory. (vedi developer.android.com/guide/publishing/… )
ohhorob,

3
Come si potrebbe dare un nome diverso al pacchetto di debug? (ad es. {PRODUCT_NAME} Dev)
sandstrom,

6
@ChristianBongiorno: sincronizza i keystore delle firme (ad es debug.keystore.). Scegline uno come master keystore, copialo su tutte le altre macchine sviluppatore, sostituendo il keystore esistente.
CommonsWare,

2
Non dimenticare di ricostruire il tuo progetto dopo aver copiato anche il file. Ho spostato i file e inviato nuovamente l'applicazione al dispositivo (ma stava ancora utilizzando il vecchio debug.keystore). Una volta ricostruito il progetto (usando Build-> Rebuild in Android Studio) le chiavi erano quindi sincronizzate.
Benjamin Kaiser,

48

Mi sono imbattuto in questo durante i test su un nuovo Xoom. In precedenza avevo installato la mia app dal Marketplace. Più tardi, mentre provavo a provare una nuova versione dell'app, ho riscontrato questo errore.

L'ho risolto rimuovendo l'app installata tramite Marketplace (tieni premuto e trascina nel cestino). Successivamente sono stato in grado di distribuire la mia versione di sviluppo senza alcun problema.


12
Sì, la disinstallazione risolverà questo problema di autorizzazione. Mi chiedevo se avrei potuto risolvere questo problema senza disinstallarlo
Johnny,

Ho un nuovo telefono e me ne sono dimenticato. Come segnalo due volte :)
Anthony Horne,

22

Questo è successo a me quando un altro sviluppatore del team ha creato la nostra app sul dispositivo hardware su cui stavo cercando di distribuire. La disinstallazione dell'app dall'hardware ha risolto il mio problema.


16
Grande! Ha funzionato dopo il comando adb uninstall <package name>. Grazie.
Paul

Ho avuto un caso più unico, ma questa risposta ha portato alla soluzione. Avevo installato un'app tramite l'interfaccia della riga di comando Cordova localmente e anche una installata dalla build PG. Ho dovuto disinstallare entrambe le app perché l'errore scompaia.
DemitryT

@Paul Eccellenza - Re Paolo I, mentre io non sono l'interrogatore originale, il tuo comando ha funzionato per me (e senza dubbio gli altri, visto quanto è stato votato il tuo commento). Posso suggerire di pubblicarlo come risposta?
barlop

1
@barlop: ho pubblicato una risposta con il comando solo per essere più visibile per gli altri che potrebbero riscontrare questo problema. Grazie.
Paolo

3
Non capisco perché questa risposta abbia voti positivi. Dice chiaramente "SENZA DISINSTALLAZIONE"! -
Christian,

20

Questo è il comando per disinstallare l'app dal dispositivo usando adb:

adb uninstall <package name>

8
La domanda è su come risolvere il problema senza disinstallazione.
Janaka Bandara,

2
Non capisco perché questa risposta abbia voti positivi. Dice chiaramente "SENZA DISINSTALLAZIONE"!
Christian,

Non esiste un flag pm per la sostituzione del pacchetto con certificato incoerente, giusto? Intenzione di sicurezza?
JohnyTex,

9

Ho riscontrato questo errore anche dopo aver disinstallato l'APK originale, il che era sconcertante. Alla fine mi sono reso conto che avevo configurato più utenti sul mio Nexus 7 per i test e che l'app era ancora installata per uno degli altri utenti. Dopo averlo disinstallato per tutti gli utenti, l'errore è scomparso.


5

Ho cambiato il nome del pacchetto durante la codifica di un aggiornamento in modo da poterlo eseguire il debug sul mio dispositivo tramite Eclipse, senza eliminare la vecchia versione installata. Senza ripristinare il nome del pacchetto che stavo usando durante il tentativo di reinstallazione, ho riscontrato lo stesso errore. Utilizzando lo stesso nome di pacchetto la reinstallazione ha avuto esito positivo.


3

Basta eliminare la vecchia build dal dispositivo e reinstallare lo stesso. Poiché device.keystore è già presente nel dispositivo, è sufficiente disinstallare la build e reinstallare l'APK.

Grazie


Sì, è migliore e chiara la risposta di CommonsWare. Grazie
tres.14159,

3

Ho riscontrato un altro caso d'uso in cui ho riscontrato l'errore simile. Quando all'inizio ho avuto l'errore, sono stato preso dal panico e rimosso/data/data/{package.name} ho Dopo di che ho provato, e il mio problema era ancora presente. Quindi ho provato a disinstallare, non è riuscito.

Ho quindi rimosso il file apk presente in /system/app (richiesto accesso root) e ho provato a disinstallarlo ed è riuscito.

Dopo di che ho provato a reinstallare l'apk, ha funzionato.


1

Per quello che vale, ho riscontrato questo problema dopo aver aggiunto un nuovo plugin al mio progetto Cordova. Avevo avuto Cordova fare build e installare direttamente sul dispositivo tramite USB.

L'ho risolto disinstallando l'app dal dispositivo e alla successiva distribuzione non c'erano problemi.


1

Se si verifica una distribuzione non riuscita su un dispositivo o emulatore Andorid con l'errore "Errore [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]" nella finestra di output, è sufficiente eliminare l'app esistente sul dispositivo o sull'emulatore e ridistribuire. Le build di debug utilizzeranno un certificato di debug mentre le build di rilascio utilizzeranno il certificato configurato. Questo errore indica semplicemente che il certificato dell'app installata sul dispositivo è diverso da quello che si sta tentando di installare. In scenari non di sviluppo (app store), questo può essere un indicatore di un'app corrotta o altrimenti modificata non sicura da installare sul dispositivo.


0

Niente dall'alto ha funzionato per me. Il problema per me era che avevo una fonte sbagliata nel mio Java Build Path per android-support-v7-appcompat. Quando vai su Progetto> Percorso di costruzione> Configura percorso di costruzione>. Nella scheda Sorgente assicurati di avere android-support-v7-appcompat / gen, android-support-v7-appcompat / libs e android-support-v7-appcompat / src e nient'altro. Fai clic su OK e dovrebbe funzionare.


0

Ho avuto lo stesso errore oggi, ma il problema non era esattamente lo stesso. Sto usando ADB con Android installato in VirtualBox . Ho provato a installare diverse versioni della mia app (firmata / non firmata, modalità debug / release) e in alternativa ho ottenuto due errori: INSTALL_FAILED_UID_CHANGEDe INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES.

Ora, guardando /data/data/{package.name}, ho trovato un mucchio di file che erano ancora lì dopo aver disinstallato l'app. Ci ho provato rm -rfsenza successo: ho avuto errori I / O.

La soluzione a questo è stata:

  • Spegni la VM
  • Montare l'immagine VDI con vdfuse(lettura / scrittura)
  • Riparare il Partition1file di immagine cone2fsck
  • Smontare e riavviare la VM

0

Ho avuto lo stesso problema fino a quando mi sono reso conto di avere il simulatore in esecuzione e adb stava cercando di installarlo


0

Poiché la verifica si basa sul nome del pacchetto, è possibile modificare il nome del pacchetto all'interno del file config.xml o manifest per un altro nome desiderato.

Quando pubblichi la tua app , non dimenticare di cambiare il nome!


0

Ho avuto questo problema cercando di eseguire il compito gradle connectedDebugAndoidTest(o connectedAndroidTest) su Genymotion . L'esecuzione su un normale emulatore ha risolto il problema.


Lo stavo ottenendo anche sulla stessa situazione (test con Genymotion). Si scopre che si è trattato di un conflitto con la firma per il pacchetto di test. La rimozione del pacchetto di test ha risolto il problema.
D-C0d3r

0

Penso che la tua app sia installata da un altro account (funzione modalità account multipli) Puoi disinstallare l'app in Impostazioni> App> "nome app"> Disinstalla

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.