Che cos'è l'errore INSTALL_PARSE_FAILED_NO_CERTIFICATES?


163

Stavo cercando di cambiare la mia attività di default / main / startup (come la chiami tu) modificando il androidmanifest.xmlfile. Tutto quello che ho fatto è stato cambiare la android:nameproprietà. tuttavia, questo ha completamente rotto l'intera app. quando provo a installarlo fallisce e legge.

Errore di installazione: INSTALL_PARSE_FAILED_NO_CERTIFICATES

Quando ho provato a riportarlo al suo stato precedente, mi stava ancora dando lo stesso errore ... Cosa ho fatto?


Per chiunque altro: INSTALL_PARSE_FAILED_NO_CERTIFICATESè un errore -103che puoi ottenere / vedere tramite adb log( src ) ad es. D/PackageInstaller(21320): Installation error code: -103

la risposta è vera. e c'è un altro motivo che dà questo errore è quando hai una vecchia applicazione con lo stesso nome pacchetto nel tuo telefono installato .. basta disinstallare dal tuo telefono prima di installare quello nuovo
Emre Kilinc Arslan

2
A chiunque si imbatta in questa domanda - leggi tutte le risposte qui sotto! Sembra che questo messaggio di errore sia più un tipo di errore "qualcosa non va". Il motivo per cui l'ho incontrato era dovuto a una delle risposte, in fondo all'elenco !!!!
GMc

Risposte:


56

Hai modificato AndroidManifest.xmldirettamente nel .apkfile? In tal caso, non funzionerà.

Ogni Android .apkdeve essere firmato se deve essere installato su un telefono , anche se non stai installando tramite Market. Gli strumenti di sviluppo risolvono questo problema firmando con un certificato di sviluppo ma .apkè ancora firmato.

Un uso di questo è quindi un dispositivo in grado di dire se .apkè un aggiornamento valido per un'applicazione installata, poiché se si tratta dei certificati sarà lo stesso.

Quindi, se apporti modifiche all'app, dovrai ricostruirla in .apkmodo che venga firmata correttamente.


grazie, c'è un pulsante per ricostruire automaticamente il manifest?
mtmurdock,

Per i ragazzi alle prese con il flutter, corri flutter cleane corri / debug di nuovo! Questa operazione è simile alla soluzione precedente poiché pulisce la cartella di build e ricostruisce nuovamente il file di build in fase di esecuzione / debug!
Manoj Kumar,

183

Ho scoperto che questo errore ora può verificarsi anche quando si utilizza la configurazione della firma errata. Come descritto qui , Android 7.0 introduce un nuovo schema di firma, V2 . Lo schema V2 firma l'intero APK anziché solo il JAR, come avviene nello schema V1. Se si firma solo con V2 e si tenta di installare su una destinazione precedente alla 7.0, si otterrà questo errore poiché i JAR stessi non sono firmati e PackageManager precedente alla 7.0 non è in grado di rilevare la presenza della firma APK V2.

Per essere compatibile con tutti i sistemi di destinazione, assicurati che l'APK sia firmato con entrambi gli schemi selezionando entrambe le caselle della versione della firma nella finestra di dialogo Genera APK di Android Studio, come mostrato qui:

inserisci qui la descrizione dell'immagine

Se sono previsti solo 7.0 target, non è necessario includere la firma V1.


5
Mi hai risparmiato un sacco di tempo. L'aggiornamento di Android Studio ha causato un incubo di problemi. Questo era uno di questi. Mi chiedo se SO non esistesse più della metà dello sviluppo Android sarebbe morto. Android Studio non fornisce indicazioni sugli errori.
Atul,

4
Fortunatamente ho testato l'apk di rilascio su un vecchio dispositivo prima di implementarlo su Google Play. Sarebbe un disastro se tutti i <dispositivi Android 7.0 non riuscissero a installare la nuova versione. Quella cosa con due versioni dovrebbe essere un GRANDE DIALOGO POP UP ROSSO quando fai clic per creare una versione apk!
Kirill Karmazin,

Grazie per questo. Sto per impazzire alla ricerca del motivo per cui il mio APK non funziona su Android 7, ma era solo una semplice casella di controllo. Così fastidioso.
japzone,

54

Ho scoperto che questo è stato causato dalla mia versione di JDK.

Stavo avendo questo problema con 'formica' ed era dovuto a questo ATTENZIONE menzionato nella documentazione:

http://developer.android.com/guide/publishing/app-signing.html#signapp

Attenzione: a partire da JDK 7, l'algoritmo di firma predefinito è cambiato, richiedendo di specificare gli algoritmi di firma e digest (-sigalg e -digestalg) quando si firma un APK.

Ho JDK 7. Nel mio registro Ant, ho usato -v per verbose e ha mostrato

$ ant -Dadb.device.arg=-d -v release install
[signjar] Executing 'C:\Program Files\Java\jdk1.7.0_03\bin\jarsigner.exe' with arguments:
[signjar] '-keystore'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\release.keystore'
[signjar] '-signedjar'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unaligned.apk'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unsigned.apk'
[signjar] 'mykey'
 [exec]     pkg: /data/local/tmp/PairFinder-release.apk
 [exec] Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

Ho firmato manualmente il JAR e lo ho zipallineato, ma ha dato un errore leggermente diverso:

$ "$JAVA_HOME"/bin/jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore release.keystore -signedjar bin/PairFinder-release-unaligned.apk bin/PairFinder-release-unsigned.apk mykey
$ zipalign -v -f 4 bin/PairFinder-release-unaligned.apk bin/PairFinder-release.apk
$ adb -d install -r bin/PairFinder-release.apk
        pkg: /data/local/tmp/PairFinder-release.apk
Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
641 KB/s (52620 bytes in 0.080s)

Ho trovato che ha risposto qui.

Come gestire INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES senza disinstallazione

Ho solo bisogno di disinstallarlo e poi ha funzionato!

$ adb -d uninstall com.kizbit.pairfinder
Success
$ adb -d install -r bin/PairFinder-release.apk
        pkg: /data/local/tmp/PairFinder-release.apk
Success
641 KB/s (52620 bytes in 0.080s)

Ora ho solo bisogno di modificare build.xml per usare quelle opzioni al momento della firma!

Ok eccolo qui: C: \ Programmi \ Java \ android-sdk \ tools \ ant \ build.xml

            <signjar
                    sigalg="MD5withRSA"
                    digestalg="SHA1"
                    jar="${out.packaged.file}"
                    signedjar="${out.unaligned.file}"
                    keystore="${key.store}"
                    storepass="${key.store.password}"
                    alias="${key.alias}"
                    keypass="${key.alias.password}"
                    verbose="${verbose}" />

3
Anche JDK 7 era un mio problema. Ero pigro e disinstallato JDK 7 e installato JDK 6, funzionava anche ^^. Altre soluzioni di hacking, ma meno radicali, potrebbero essere entrambe installate, ma impostare JAVA_HOME su JDK 6 e inserire prima il percorso bin di JDK 6 in PATH.
Ixx,

1
JDK 8 ha lo stesso problema. Cambiando PATH in JDK 6 ha funzionato. Grazie salvavita!
Chris Xue,

Grazie! La mia app di mercato è stata compilata con JDK6. Quando ho compilato l'app con il keystore di rilascio usando JDK7 e ho provato a installarlo, questo mi ha dato questo problema.
Sileria,

28

Il più delle volte la soluzione per questo errore è davvero semplice:

  1. Disinstalla il tuo apk
  2. Pulisci il tuo progetto Android
  3. Crea il tuo progetto Android
  4. Installa / esegui il tuo apk

Ho fatto 2,3,4 e ottengo lo stesso errore. Cosa intendi per disinstallare il tuo apk? Dal mio dispositivo? Non penso che sia mai stato sul mio dispositivo.
Curtis,

improvvisamente ho iniziato a ottenere questo errore dal nulla, nessuno se la soluzione ma semplicemente il progetto di pulizia ha funzionato. Grazie.
pgcan

18

risolto (per me) usando in keytool gli arg

-sigalg MD5withRSA -keyalg RSA -keysize 1024

e usando in jarsigner

-sigalg MD5withRSA -digestalg SHA1

soluzione trovata in

Che tipo di pitfals esiste per la firma dell'APK Android?


Grazie, risolto il problema anche per me (ho JDK 7).
Enrico Ros,

L'ho risolto allo stesso modo, poiché uso appcelerator titanium e non ho accesso allo script di generazione apk. Nota che questa soluzione richiede la rigenerazione (modifica!) Della chiave privata.
Federico,

8

Stavo anche affrontando lo stesso problema. Innanzitutto ho generato build utilizzando V2 e installato quello nei dispositivi mobili in esecuzione su OS 5.1 e ho avuto lo stesso problema. Ma build funzionava bene su Tablet in esecuzione su OS 7.0. Così ho generato build con la firma V1 Jar e funzionava bene su entrambi i dispositivi.

Conclusione: se stai supportando il dispositivo con Android OS 7.0. Utilizzare la firma jar V1 per generare la build.


Non è necessario controllare entrambi, selezionare V1 se si supporta OS 7.0 e versioni precedenti. Controllare V2 se si supportano i dispositivi in ​​esecuzione su 7.0 e versioni successive.
Rajiv Ranjan,

7

Nel mio caso, ho potuto costruire ed eseguire build di rilascio, ma ho ottenuto il INSTALL_PARSE_FAILED_NO_CERTIFICATES errore durante il tentativo di eseguire una build di debug.

La soluzione era eliminare il mio debug.keystorefile e consentire ad ADT di ricrearlo. Apparentemente era scaduto.

Una migliore soluzione a lungo termine è quella di creare esplicitamente un oggetto debug.keystoreche non scade dopo solo un anno, invece di lasciare che ADT lo crei. Ecco il comando per farlo:

keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -validity 14000

Quando richiesto, immettere questi valori:

  • Nome e cognome: debug Android
  • Unità organizzativa: Android
  • Nome dell'organizzazione: sconosciuto
  • Città o località: sconosciuta
  • Stato o provincia: sconosciuto
  • Codice paese: US

5

Questa è una soluzione brutta ma veloce: usa JDK 6 invece di 7.

Dopo aver letto la risposta di Chloe, ho disinstallato il mio JDK 7 (al momento non ne ho bisogno) e ho installato JDK 6. Ciò ha risolto il problema. Una soluzione migliore farebbe in modo che ant usi JDK 6 (senza disinstallare 7). Forse è possibile modificare / impostare questa proprietà:

java.library.path

nel file local.properties. Si trova nella directory del progetto (root).

Android non funziona comunque con JDK 7 (solo 6 o 5), quindi fare in modo che lo script ant utilizzi anche JDK 6 o 5 è probabilmente una buona soluzione.


5

È perché la generazione e la corrente generate in precedenza hanno conflitti nella versione della firma tra v1 (firma jar) e v2 (firma APK completa),

Per correggere spuntare la versione corretta della firma nella finestra di dialogo Genera APK firmato


5

Recentemente ho riscontrato questo errore durante l'aggiornamento ad Android Studio 4.0. La causa era che il progetto aveva V2 Signing disabilitato nella configurazione di accesso build.gradle.

La soluzione era rimuoverlo v2SigningEnabled falseo impostarlo esplicitamente su true, che è il valore predefinito.

android {    
    signingConfigs {
        dev {
            v2SigningEnabled true
        }
     }
}

Sto usando Android Studio 4.0. Ma non esiste una cosa del genere "v2SigningEnabled" nel mio file build.gradle. Cosa devo fare?
Nuwan Harshakumara Piyarathna,

3

Nelle versioni più recenti di Android Studio 3.2+, se si sta tentando di eseguire l' releaseinstallazione e non è stata definita alcuna configurazione di firma, verrà visualizzato il messaggio di errore e l'installazione non riuscirà. Quello che devi fare è eseguire la debugbuild o impostare correttamente la configurazione della firma (V1 o V2).


3

la maggior parte delle risposte sono vere. e alcuni altri motivi che accadono sono

► il tuo min sdk più piccolo del dispositivo sdk.
► hai l'applicazione precedente nel tuo dispositivo con lo stesso nome di pacchetto


Questa è stata la mia esperienza: il min sdk nel mio progetto era superiore al sdk del dispositivo. È successo perché "ho perso" la selezione corretta durante la creazione del progetto in Android Studio e ho accidentalmente selezionato la versione successiva successiva come il mio SDK, quindi il mio vecchio tablet era in esecuzione.
GMc

rendere uguale il mio min sdk e device sdk ha risolto il mio problema.
Nuwan Harshakumara Piyarathna,

2

Ciò può accadere se si tenta di includere una .jarlibreria che contiene un AndroidManifest.xmlfile.

  • Se è puro Java, assicurati di non includerlo nell'esportazione .jar
  • Se non è Java puro (significa che è un progetto Android), devi includerlo come Progetto Biblioteca

2

Inoltre puoi controllare

Project Structure-> Default Config->Signing Config

dopo aver aggiunto tutto ciò di cui hai bisogno


1

L'impostazione della variabile di ambiente JAVA_HOMEsu JDK 5 o 6 (anziché su JDK 7) ha corretto l'errore.


0

Dopo un po 'di tempo e più discussioni online sull'argomento sono riuscito a risolvere il mio progetto.

Prende principalmente in considerazione gli ultimi file ( potrebbero essere immagini o layout ) che hai inserito. Se li elimini, funzionerà e potrai ricostruire il tuo progetto.


0

Ho riscontrato questo errore nella mia console Eclipse. Si scopre che avevo due vasetti con lo stesso contenuto ma nomi diversi ed erano in conflitto tra loro. Ne ho appena eliminato uno e sono riuscito a installare l'app sul dispositivo.


0

Stavo ricevendo questo errore perché ho rilasciato il mio ant releaseerrore perché lo spazio sul disco era insufficiente.


0

Ho riscontrato questo errore quando ho provato a installare un progetto Xamarin creato con l'anteprima di Android N su un telefono con API v23. La soluzione è non farlo.


0

Un altro modo per ottenere questo errore è antcompilare utilizzando su macOS e disporre di un file icona Finder ( Icon\r) nella struttura di origine dell'app. Sembra che jarsignernon sia in grado di far fronte al ritorno a capo nel nome del file e, sebbene affermerà che la firma è valida se si-verify l'APK, si traduce sempre in un APK che non installato su un dispositivo. Ironia della sorte, il plug-in di Google Drive Finder è un'ottima fonte di file icona Finder.

La soluzione è di escludere i file offensivi (che sono comunque inutili nell'APK) con un identificatore come questo nel fileset:

    <exclude name="**/Icon&#13;" />

0

Questo problema si verificherà se si installa una versione non firmata di APK. Controlla se hai installato l'APK corretto.


0

Ho avuto quel problema con il codice ionico / Visual Studio (esegui Android sul dispositivo):

Ho disinstallato l'app sul dispositivo mobile (Impostazioni / App), l'errore è scomparso e l'app si sta avviando.


0

Questo errore mi sta causando oggi perché ho un'app con un SDK minimo di 28 e sto giocando su un emulatore con una versione SDK di 23. Di solito questo non è possibile (AS gray è fuori dal pulsante di riproduzione), ma oggi non è così tanto.


0

In primo luogo, prova a farlo:

  • vai a Gradle script → bulid.gradle (modulo: app) → quindi devi modificare il valore (minSdkVersion). Ad esempio, se hai utilizzato 26, puoi provare a ridurre il valore, ad esempio (minSdkVersion 20)
  • quindi prova (sincronizza ora).

0

Se si utilizza l'emulatore, provare a ripristinarlo e se sul dispositivo mobile disinstallare prima l'applicazione, quindi disattivare la modalità sviluppatore e quindi accenderlo, il problema verrà risolto.

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.