¿Qué es el error INSTALL_PARSE_FAILED_NO_CERTIFICATES?

Estaba intentando cambiar mi actividad predeterminada / principal / de inicio (como lo llame) editando el archivo androidmanifest.xml . Todo lo que hice fue cambiar la propiedad android:name . sin embargo, esto rompió completamente la aplicación completa. cuando bash instalarlo falla y lee.

Error de instalación: INSTALL_PARSE_FAILED_NO_CERTIFICATES

Cuando traté de cambiarlo a su estado anterior, todavía me estaba dando el mismo error … ¿Qué he hecho?

¿ AndroidManifest.xml el AndroidManifest.xml directamente en el archivo .apk ? Si es así, eso no funcionará.

Cada Android .apk debe estar firmado si se va a instalar en un teléfono , incluso si no se está instalando en Market. Las herramientas de desarrollo funcionan alrededor de esto al firmar con un certificado de desarrollo, pero el .apk todavía está firmado.

Un uso de esto es para que un dispositivo pueda decir si una .apk es una actualización válida para una aplicación instalada, ya que si se trata de los Certificados, será la misma.

Por lo tanto, si realiza algún cambio en su aplicación, deberá reconstruir el .apk para que se firme correctamente.

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 el APK completo en lugar de solo el JAR, como se hace en el esquema V1. Si solo firma con V2 e intenta instalar un objective anterior a la versión 7.0, obtendrá este error ya que los JAR no están firmados y el PackageManager anterior a la 7.0 no puede detectar la presencia de la firma de la APK V2.

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

enter image description here

Si solo se prevén 7.0 objectives, entonces no hay necesidad de incluir la firma V1.

Descubrí que esto fue causado por mi versión de JDK.

Estaba teniendo este problema con ‘ant’ 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, utilicé -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 redirigí, pero 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é que respondió 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 build.xml para usar esas opciones cuando firmo!

Ok aquí está: C: \ Archivos de progtwig \ Java \ android-sdk \ tools \ ant \ build.xml

   

resuelto (para mí) usando en keytool los argumentos

 -sigalg MD5withRSA -keyalg RSA -keysize 1024 

y usar en jarsigner

 -sigalg MD5withRSA -digestalg SHA1 

solución encontrada en

¿Qué tipo de obstáculos existen para la firma de Android APK?

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. Crea tu proyecto Android
  4. Instala / ejecuta tu apk

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 (actualmente no lo necesito de todos modos) e instalé JDK 6. Eso lo solucionó. Una solución mejor haría que ant use JDK 6 (sin desinstalar 7). Tal vez sea posible cambiar / configurar esta propiedad:

java.library.path

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

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

En mi caso, pude comstackr y ejecutar comstackciones de lanzamiento, pero obtuve el error INSTALL_PARSE_FAILED_NO_CERTIFICATES al intentar hacer una comstackción de depuración.

La solución fue eliminar mi archivo debug.keystore y dejar que ADT lo recree. Aparentemente había expirado.

Una mejor solución a largo plazo es crear explícitamente un debug.keystore que 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: Desconocido
  • Estado o provincia: Desconocido
  • Código de país: US

Al establecer la variable de entorno JAVA_HOME en JDK 5 o 6 (en lugar de JDK 7), se corrigió el error.

Esto podría suceder si intenta incluir una biblioteca .jar que contiene un archivo AndroidManifest.xml .

  • 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.

Es porque la generación y la stream generadas previamente están teniendo conflictos en la versión de firma entre v1 (firma de jar) y v2 (Firma de APK completa),

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

Después de un tiempo y varios hilos en línea sobre el tema, pude arreglar mi proyecto.

Principalmente se toman en cuenta los últimos archivos ( pueden ser imágenes o diseños ) que usted ingresa. Si los elimina, funcionará y podrá construir su proyecto nuevamente.

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

Recibí este error porque publiqué que mi ant release estaba fallando porque me quedé sin espacio en el disco.

Obtuve este error cuando traté de instalar un proyecto Xamarin basado en la vista previa de Android N en un teléfono con una API v23. La solución es no hacer eso.

Otra forma de obtener este error es crear usando ant en macOS y tener un archivo de ícono de Finder ( Icon\r ) en el árbol fuente de la aplicación. Parece que jarsigner no puede hacer frente al retorno de carro en el nombre de archivo y, aunque jarsigner que la firma es válida si -verify el APK, siempre resulta en una APK que no se instalará en un dispositivo. Irónicamente, el complemento Google Drive Finder es una gran fuente de archivos de íconos de Finder.

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