¿Qué es el error INSTALL_PARSE_FAILED_NO_CERTIFICATES?

163

Intenté cambiar mi actividad predeterminada / principal / de inicio (como se llame) editando el androidmanifest.xmlarchivo. Todo lo que hice fue cambiar la android:namepropiedad. Sin embargo, esto rompió por completo toda la aplicación. cuando intento instalarlo falla y lee.

Error de instalación: INSTALL_PARSE_FAILED_NO_CERTIFICATES

Cuando intenté volver a cambiarlo a su estado anterior, todavía me daba el mismo error ... ¿Qué he hecho?

mtmurdock
fuente
Para cualquier otra persona: INSTALL_PARSE_FAILED_NO_CERTIFICATESes un error -103que puede obtener / ver a través de adb log( src ), por ejemplo. D/PackageInstaller(21320): Installation error code: -103
la respuesta es verdadera. y hay otra razón por la que este error es cuando tienes instalada una aplicación anterior con el mismo nombre de paquete en tu teléfono ... simplemente desinstálala de tu teléfono antes de instalar la nueva
Emre Kilinc Arslan
1
Para cualquiera que se encuentre con esta pregunta, ¡lea todas las respuestas a continuación! Parece que este mensaje de error es más un tipo de error "algo está mal". ¡La razón por la que lo encontré se debió a una de las respuestas, muy por debajo de la lista!
GMc

Respuestas:

56

¿Editó el AndroidManifest.xmldirectamente en el .apkarchivo? Si es así, eso no funcionará.

Cada Android .apkdebe estar firmado si se va a instalar en un teléfono , incluso si no lo está instalando a través de Market. Las herramientas de desarrollo resuelven esto firmando con un certificado de desarrollo pero el.apk todavía está firmado.

Un uso de esto es para que un dispositivo pueda determinar si una .apkactualización es válida para una aplicación instalada, ya que si es así, los Certificados serán los mismos.

Entonces, si realiza algún cambio en su aplicación, deberá reconstruirla .apkpara que se firme correctamente.

Dave Webb
fuente
muchas gracias, ¿hay un botón para reconstruir automáticamente el manifiesto?
mtmurdock
Para los chicos que luchan con el aleteo, ¡corran flutter cleany corran / depuren nuevamente! ¡Esta operación es similar a la solución anterior, ya que limpia la carpeta de compilación y reconstruye el archivo de compilación nuevamente en ejecución / depuración!
Manoj Kumar
183

Descubrí que este error ahora también puede ocurrir cuando se usa la configuración de firma incorrecta. Como se describe aquí , Android 7.0 presenta un nuevo esquema de firma, V2 . El esquema V2 firma todo el APK en lugar de solo el JAR, como se hace en el esquema V1. Si firma solo con V2 e intenta instalar en un destino anterior a 7.0, obtendrá este error ya que los JAR no están firmados y el PackageManager anterior a 7.0 no puede detectar la presencia de la firma APK V2.

Para ser compatible con todos los sistemas de destino, asegúrese de que el APK esté firmado con ambos esquemas marcando los dos cuadros de versión de firma en el cuadro de diálogo Generar APK firmado de Android Studio como se muestra aquí:

ingrese la descripción de la imagen aquí

Si solo se anticipan 7.0 objetivos, entonces no hay necesidad de incluir la firma V1.

Paul Ratazzi
fuente
55
Me salvaste mucho tiempo. La actualización de Android Studio causó pesadillas de problemas. Este era uno de ellos. Me pregunto si SO no estuvo alrededor de más de la mitad del desarrollo de Android habría muerto. Android Studio no da pistas sobre errores.
Atul
44
Afortunadamente, probé mi apk de lanzamiento en un dispositivo antiguo antes de implementarlo en Google Play. Eso sería un desastre si todos los dispositivos <Android 7.0 no pudieran instalar la nueva versión. ¡Esa cosa con dos versiones debería ser un GRAN DIÁLOGO ROJO POP UP cuando haces clic para crear una versión apk!
Kirill Karmazin
Gracias por esto. A punto de volverme loco buscando por qué mi APK no se ejecutaba debajo de Android 7, pero era solo una simple casilla de verificación. Muy molesto.
japzone
54

Encontré que esto fue causado por mi versión JDK.

Estaba teniendo este problema con 'hormiga' y fue debido a esta PRECAUCIÓN mencionada en la documentación:

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

Precaución: a partir de JDK 7, el algoritmo de firma predeterminado ha cambiado, lo que requiere que especifique los algoritmos de firma y resumen (-sigalg y -digestalg) cuando firma un APK.

Tengo JDK 7. En mi registro Ant, usé -v para verbose y mostró

$ 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]

Firmé el JAR manualmente y lo alineé, pero me dio un error ligeramente diferente:

$ "$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)

Encontré eso respondido aquí.

Cómo lidiar con INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES sin desinstalación

¡Solo necesitaba desinstalarlo y luego funcionó!

$ 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)

¡Ahora solo necesito modificar el build.xml para usar esas opciones al firmar!

Ok, aquí está: C: \ Archivos de programa \ 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}" />
Chloe
fuente
3
JDK 7 también fue mi problema. Fui perezoso y desinstalé JDK 7 e instalé JDK 6, también funcionó ^^. Se podría permitir la instalación de otra solución de pirateo, pero menos radical, pero establecer JAVA_HOME en JDK 6 y poner primero la ruta bin de JDK 6 en PATH.
Ixx
1
JDK 8 tiene el mismo problema. Cambiar PATH a JDK 6 funcionó. Gracias salvavidas!
Chris Xue
¡Gracias! Mi aplicación de mercado fue compilada con JDK6. Cuando compilé la aplicación con el almacén de claves de lanzamiento usando JDK7 e intenté instalar, me dio este problema.
Sileria
28

La mayoría de las veces la solución para este error es realmente simple:

  1. Desinstala tu apk
  2. Limpia tu proyecto de Android
  3. Construye tu proyecto de Android
  4. Instala / ejecuta tu apk
JanCor
fuente
Hice 2,3,4 y obtengo el mismo error. ¿Qué quieres decir con desinstalar tu apk? Desde mi dispositivo? No creo que haya estado nunca en mi dispositivo.
Curtis
De repente comencé a obtener este error de la nada, Ninguno si la solución, sino simplemente el proyecto de limpieza funcionó. Gracias.
pgcan
18

resuelto (para mí) usando en keytool los args

-sigalg MD5withRSA -keyalg RSA -keysize 1024

y usando en jarsigner

-sigalg MD5withRSA -digestalg SHA1

solución encontrada en

¿Qué tipo de fallas existen para la firma de Android APK?

Alejadro Xalabarder
fuente
Gracias, solucionó el problema para mí también (tengo JDK 7).
Enrico Ros
Lo arreglé de la misma manera, ya que uso appcelerator titanium y no tengo acceso al script de generación apk. Tenga en cuenta que esta solución requiere la regeneración (¡cambio!) De la clave privada.
Federico
8

También estaba enfrentando el mismo problema. Primero generé la compilación usando V2 y la instalé en dispositivos móviles que se ejecutan en OS 5.1 y obtuve el mismo problema. Pero la compilación funcionaba bien en la tableta que se ejecuta en OS 7.0. Así que generé una compilación con la firma V1 Jar y funcionó bien en ambos dispositivos.

Conclusión: si es compatible con el dispositivo debajo de Android OS 7.0. Use la firma jar V1 para generar la compilación.

Rajiv Ranjan
fuente
No es necesario verificar ambos. Seleccione V1 si es compatible con OS 7.0 y versiones posteriores. Compruebe V2 si es compatible con dispositivos que se ejecutan en 7.0 y versiones posteriores.
Rajiv Ranjan
7

En mi caso, podría compilar y ejecutar versiones de lanzamiento, pero obtuve el INSTALL_PARSE_FAILED_NO_CERTIFICATES error al intentar hacer una compilación de depuración.

La solución fue eliminar mi debug.keystorearchivo y dejar que ADT lo recreara. Aparentemente había expirado.

Una mejor solución a largo plazo es crear explícitamente uno debug.keystoreque no caduque después de solo un año, en lugar de dejar que ADT lo cree. Aquí está el comando para hacer eso:

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

Cuando se le solicite, ingrese estos valores:

  • Nombre y apellido: Android Debug
  • Unidad organizativa: Android
  • Nombre de la organización: Desconocido
  • Ciudad o localidad: desconocida
  • Estado o provincia: Desconocido
  • Código de país: EE . UU.
Kristopher Johnson
fuente
5

Esta es una solución fea pero rápida: use JDK 6 en lugar de 7.

Después de leer la respuesta de Chloe, desinstalé mi JDK 7 (de todos modos no lo necesito actualmente) e instalé JDK 6. Eso lo solucionó. Una solución mejor haría que Ant use JDK 6 (sin desinstalar 7). Quizás sea posible cambiar / configurar esta propiedad:

java.library.path

en el archivo local.properties. Está en el directorio del proyecto (raíz).

Android no funciona con JDK 7 de todos modos (solo 6 o 5), por lo que hacer que el script de hormiga también use JDK 6 o 5 es probablemente una buena solución.

Ixx
fuente
5

Es porque la compilación generada anteriormente y la actual tienen conflictos en la versión de firma entre v1 (firma jar) y v2 (firma APK completa),

Para corregir la versión de firma adecuada en el cuadro de diálogo Generar APK firmado

Pankaj kumar
fuente
4

Recientemente tuve este error al actualizar a Android Studio 4.0. La causa fue que el proyecto tenía V2 Signing Disabled en la configuración de inicio de sesión build.gradle.

La solución fue eliminarlo v2SigningEnabled falseo establecerlo explícitamente en true, que es el valor predeterminado.

android {    
    signingConfigs {
        dev {
            v2SigningEnabled true
        }
     }
}
mikehc
fuente
Estoy usando Android studio 4.0. Pero no existe tal cosa "v2SigningEnabled" en mi archivo build.gradle. Entonces, ¿qué debo hacer?
Nuwan Harshakumara Piyarathna
3

En las versiones más recientes de Android Studio 3.2+, si está intentando ejecutar la releaseinstalación y no ha definido ninguna configuración de firma, mostrará el mensaje de error y la instalación fallará. Lo que debe hacer es ejecutar la debugcompilación o configurar la configuración de firma (V1 o V2) correctamente.

Rowland Mtetezi
fuente
3

La mayoría de las respuestas son ciertas. y algunas otras razones que suceden son

► su min sdk más pequeño que el dispositivo sdk.
► tiene la aplicación anterior en su dispositivo con el mismo nombre de paquete

Emre Kilinc Arslan
fuente
Esta fue mi experiencia: el SDK mínimo en mi proyecto fue mayor que el SDK del dispositivo. Sucedió porque me "perdí" la selección correcta cuando estaba creando el proyecto en Android Studio y accidentalmente seleccioné la siguiente versión superior como mi SDK y luego mi tableta anterior se estaba ejecutando.
GMc
igualar mi min sdk y dispositivo sdk resolvió mi problema.
Nuwan Harshakumara Piyarathna
2

Esto podría suceder si intenta incluir una .jarbiblioteca que contenga un AndroidManifest.xmlarchivo.

  • Si es Java puro, asegúrese de no incluirlo en la exportación .jar
  • Si no es Java puro (lo que significa que es un proyecto de Android), entonces debe incluirlo como un proyecto de biblioteca
znat
fuente
2

También puedes comprobar

Project Structure-> Default Config->Signing Config

después de agregar todo lo que necesitas

Morozov
fuente
1

Establecer la variable de entorno JAVA_HOMEen JDK 5 o 6 (en lugar de JDK 7) corrigió el error.

TENNESSE.
fuente
0

Después de un tiempo y múltiples hilos en línea sobre el tema, logré arreglar mi proyecto.

Principalmente está teniendo en cuenta los últimos archivos (que podrían ser imágenes o diseños ) que ha introducido. Si los elimina, funcionará y podrá construir su proyecto nuevamente.

Nelson R.
fuente
0

Estaba teniendo este error en mi consola Eclipse. Resulta que tenía dos frascos con el mismo contenido pero con nombres diferentes y estaban en conflicto entre sí. Acabo de eliminar uno de ellos y logré instalar la aplicación en el dispositivo.

joao2fast4u
fuente
0

Recibí este error porque publiqué que ant releaseestaba fallando porque me quedé sin espacio en disco.

Grillo rojo
fuente
0

Recibí este error cuando intenté instalar un proyecto de Xamarin construido con la vista previa de Android N en un teléfono con api v23. La solución es no hacer eso.

James Moore
fuente
0

Otra forma de obtener este error es compilar usando antmacOS y tener un archivo de icono Finder ( Icon\r) en el árbol fuente de la aplicación. Parece jarsignerque no puede hacer frente al retorno de carro en el nombre de archivo y, aunque afirmará que la firma es válida si tiene -verifyel APK, siempre da como resultado un APK que no se instalará en un dispositivo. Irónicamente, el complemento Google Drive Finder es una gran fuente de archivos de iconos de Finder.

La solución es excluir los archivos ofensivos (que de todos modos son inútiles en el APK) con un especificador como este en fileset:

    <exclude name="**/Icon&#13;" />
Sidra de pera
fuente
0

Este problema ocurrirá si está instalando una versión no firmada de APK. Comprueba si estás instalando el APK correcto.

NeeK
fuente
0

Tuve ese problema con el código iónico / Visual Studio (Ejecutar Android en el dispositivo):

Desinstalé la aplicación en el dispositivo móvil (Configuración / Aplicaciones), el error desapareció y la aplicación se está iniciando.

Michael Maier
fuente
0

Hoy me está arrojando este error porque tengo una aplicación con un SDK mínimo de 28 y estoy jugando en un emulador con una versión SDK de 23. Por lo general, esto no es posible (AS gris está fuera del botón de reproducción), pero hoy no es así mucho.

Daniel Wilson
fuente
0

En primer lugar, solo intenta hacer eso:

  • vaya a Gradle script → bulid.gradle (módulo: aplicación) → luego debe cambiar el valor (minSdkVersion). Como ejemplo, si usó 26 puede intentar disminuir el valor, como (minSdkVersion 20)
  • luego intente (sincronizar ahora).
Ingeniero Ahmed IT
fuente
0

Si está utilizando el emulador, intente restablecerlo y si en el móvil primero desinstala la aplicación, apague el modo desarrollador y luego enciéndalo, el problema se resolverá.

Shashank Pandey
fuente