android - manually - ¿Qué es el error INSTALL_PARSE_FAILED_NO_CERTIFICATES?
install apk android 8 (15)
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 intento instalarlo, falla y lee
Error de instalación: INSTALL_PARSE_FAILED_NO_CERTIFICATES
cuando traté de volver a 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.
Al establecer la variable de entorno JAVA_HOME
en JDK 5 o 6 (en lugar de JDK 7), se corrigió el error.
Descubrí que este error ahora también puede ocurrir cuando se usa la configuración de firma incorrecta. Como se describe here , 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 objetivo 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í:
Si solo se prevén 7.0 objetivos, 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 ''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, 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 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}" />
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.
En mi caso, pude compilar y ejecutar compilaciones de lanzamiento, pero obtuve el error INSTALL_PARSE_FAILED_NO_CERTIFICATES
al intentar hacer una compilació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
Es porque la generación y la corriente 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
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 hormiga 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.
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.
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.
La mayoría de las veces la solución para este error es realmente simple:
- Desinstala tu apk.
- Limpia tu proyecto de Android.
- Construye tu proyecto de Android.
- instala / ejecuta tu apk
Que te diviertas
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
:
<exclude name="**/Icon " />
Recibí este error porque publiqué que mi ant release
estaba fallando porque me quedé sin espacio en el disco.
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?