java - para - manual de programacion android pdf
El almacén de claves de Android dejó de funcionar (8)
¿Está almacenando valores como key.store.password o key.alias.password en su archivo local.properties? ¿Alguno de esos es incorrecto?
Tengo curiosidad por saber si hay algún error en las claves creadas con JDK6 y verificadas en JDK7. Esto explicaría por qué funcionan las nuevas claves que creó para las pruebas, pero la anterior no. Pruebe a cambiar a JDK6 y vea si eso lo corrige. Otros han tenido problemas con jarsigner en JDK7 que desaparecieron cuando bajaron de calificación a 6. Si eso funciona, presente un informe de error y solicite un parche para que pueda actualizar a Java 7 de manera segura :)
Recientemente he tenido un problema con un almacén de claves. Sé que ya hay muchas preguntas sobre este problema. Los he leído todos y busqué en Google furiosamente.
Error:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
java.io.IOException: Keystore was tampered with, or password was incorrect
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:772)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55)
at java.security.KeyStore.load(KeyStore.java:1214)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:885)
at sun.security.tools.KeyTool.run(KeyTool.java:340)
at sun.security.tools.KeyTool.main(KeyTool.java:333)
Caused by: java.security.UnrecoverableKeyException: Password verification failed
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:770)
... 5 more
Software que estoy usando:
Java
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)
Eclipse
Version: 3.8.0
Build id: I20120502-2000
El último complemento de ADT
Último SDK de Android
Esto es lo que sé:
- No perdí la contraseña y nunca ha cambiado.
- No puedo recuperar la contraseña (sé el pase).
- No puedo firmar una aplicación existente con una clave diferente sin lanzar una aplicación nueva (por lo tanto, no puedo publicar ninguna actualización).
Esto es lo que he hecho:
- He desinstalado y reinstalado Eclipse muchas veces.
- He desinstalado y reinstalé el complemento ADT de Android.
- He quitado y vuelto a descargar el último SDK de Android muchas veces.
- He desinstalado y reinstalé JDK7.
- He intentado usar las copias de seguridad de mi almacén de claves.
- He comprobado las sumas de comprobación MD5 utilizando "md5sum KEYSTORE" y las comparé con las copias de seguridad (la misma salida MD5, no manipulada).
- He intentado forzar de forma bruta el almacén de claves (he recuperado la contraseña que conocía).
- Creé una clave de prueba (con la configuración actual) y probé la contraseña y parece que funcionó bien (así que algo ha cambiado).
- He intentado exportar el .apk de Android manualmente y luego he intentado firmarlo (Outside of Eclipse).
Así es como exporto una aplicación firmada:
- A través de Eclipse: Exportación de usar Archivo> Exportar> Exportar aplicación de Android.
- Antes de JDK7: jarsigner -verbose -keystore KEYSTORE FILE ALIAS.
- Con JDK7: jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore KEYSTORE ARCHIVO ALIAS.
¿Qué queda por resolver o intentar?
-
¿Algunas de las referencias / URL dicen que se debe eliminar el archivo "trusted.certs"? -
Intenta eliminar el "debug.keystore"? -
¿La actualización de Eclipse o cualquiera de las herramientas de desarrollo de Android afectaría mi almacén de claves? -
¿La actualización de Java de jdk6 a jdk7 crearía algún problema? -
¿Podría esto haber alterado o cambiado la forma en que funciona el jarsigner de todos modos?
Sugerencias de los usuarios:
- Intente usar JDK6, pero pude exportar una aplicación recientemente.
-
Se verificó key.store.password o key.alias.password en mis local.properties -
Desmarque la compilación automáticamente en eclipse y limpie su proyecto -
Intente eliminar la carpeta .metadata en su área de trabajo y borre todas las carpetas temporales.
Resumen
- Los keystores no cambiaron,
- Tengo las contraseñas de los almacenes de claves,
- He exportado exitosamente una aplicación recientemente usando:
- Eclipse 3.8 (y Eclipse 4.0+),
- El último Java 7,
- El último complemento de ADT.
- Mi última exportación y compilación exitosa fue hace unas semanas usando Eclipse 3.8, las últimas herramientas de Android y Java 7 con la misma contraseña.
Actualización (6/29/14)
- He usado: keytool -list -keystore KEYSTORE para probar y mostrar que 3 de mis 4 llaves funcionan correctamente.
- Forcé bruscamente la última clave y obtuve la contraseña del almacén de claves (el pase que ya conocía), pero la contraseña no funciona cuando entro para firmar. He usado: java -jar AndroidKeystoreBrute_v1.02.jar -m 3 -k KEYSTORE -d WORDLIST .
- Por extraño que parezca, a veces cuando escribo mi contraseña en eclipse muy rápidamente, aparece mi alias y puedo exportar mi aplicación con éxito. (Sé que esto es una locura).
- Versión de Java actualizada.
Si escribo la contraseña muy rápido, a veces funciona.
Parece que abrir Eclipse e ingresar la contraseña la primera vez me permite usar el almacén de claves.
Obviamente, si todo lo demás falla, tendré que crear un nuevo almacén de claves. Realmente me gustaría resolver esto, simplemente no estoy seguro de qué hacer ahora, además de volver a publicar con una nueva clave.
Si la clave no se puede recuperar correctamente, podría abrirla en Github.
Solución (29/6/14):
Un agradecimiento especial al usuario Erhannis!
Aquí esta lo que hice:
El comando me enviaría un error cada vez:
keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
Como me dijiste que podíamos extraer claves privadas del Java Keystore (.jks), profundicé y terminé usando una variación del comando. Seguí los enlaces que publicaste here y here :
keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -deststoretype pkcs12
Después de extraer la clave privada y almacenarla como PKCS12, creo que extraje mi clave privada y la coloqué en un nuevo almacén de claves Java:
keytool -importkeystore -srckeystore new.keystore -srcstoretype pkcs12 -destkeystore final.keystore -deststoretype jks
Referencias:
http://developer.android.com/tools/publishing/app-signing.html#signapp
http://code.google.com/p/android-keystore-password-recover/
Lista de URL de StackOverflow que he leído:
¿Cómo manejar una contraseña perdida de KeyStore en Android?
¿Problema inválido del almacén de claves?
Android: Perdí mi almacén de claves de Android, ¿qué debo hacer?
Olvidé la contraseña de Keystore, pensando en la detección de fuerza bruta. ¿Corromperá el almacén de claves?
He perdido la contraseña del archivo de Keystore de Android
Problema al ejecutar mi almacén de claves firmado y liberado en Eclipse
Android - Olvidé la contraseña del almacén de claves. ¿Puedo descifrar el archivo de almacén de claves?
Intente eliminar la carpeta .metadata en su área de trabajo y borre todas las carpetas temporales. Si su archivo de almacén de claves no está dañado y ha intentado reinstalar Eclipse, ADT, Android SDK y Java SDK correctamente, no veo otras causas posibles para este extraño problema, excluyendo los archivos de caché .metadata y / o algunos daños temporales.
Otra sugerencia
Intente usar Portecle una utilidad para administrar y examinar Portecle claves, claves, certificados, solicitudes de certificados, listas de revocación de certificados, etc.
Luché contra este problema también recientemente e intenté todas las sugerencias enumeradas aquí y en otros lugares. Finalmente, identifiqué un error tonto que estaba causando este error en mi final. Quería compartir esto aquí en caso de que alguno de ustedes ayude.
Es más probable que este sea el caso si usted, como yo, tiene varias versiones de Java en su máquina y ha actualizado JRE / JDK entre el momento en que creó originalmente el almacén de claves y ahora cuando intenta firmar el APK.
Por alguna razón, nuestras instrucciones de compilación hacían referencia a la ruta completa de Java de esta manera:
C: / Progra ~ 1 / Java / jdk1.6.0_45 / bin / jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore cre80ve.keystore unsigned.apk cre80ve
Una de las sugerencias anteriores me hizo pensar que podría no tratarse de un problema de contraseña en absoluto, y podrían ser las incompatibilidades de versión que causan el problema. Así que ejecuté el siguiente comando:
keytool -list -keystore cre80ve.keystore
El uso de la contraseña que sabía que era correcta, y he aquí, confirmó que era la contraseña correcta.
Luego dejé caer la referencia explícita en la ruta a la versión de Java (más antigua). Esto lo hizo recoger automáticamente la última versión de Java (jdk1.8.0_31 en mi caso):
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore cre80ve.keystore unsigned.apk cre80ve
¡Y todo empezó a funcionar bien!
Línea de base: puede que no sea un problema de contraseña en absoluto, pero diferentes versiones de Java o el SDK de Android causan el problema, así que recuerde verificarlo.
Y una vez que comience a funcionar, recuerde hacer una copia de seguridad de su almacén de claves y contraseña en un lugar seguro :-)
Mi alias clave dejó de funcionar repentinamente. (Ok, después de algunas actualizaciones de Android Studio y Java).
He intentado todas las soluciones de este hilo, así como de otros. En mi caso la solución fue sorprendente. Tengo el keystore con pocos alias. Ninguno funcionaba, excepto uno, que tenía la misma contraseña que el almacén de claves. Pero desafortunadamente no era la que necesitaba. Esto me hizo pensar sin ninguna lógica involucrada. Copié un solo alias a un nuevo almacén de claves con
keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -srcalias importantalias
Y luego cambié la contraseña de alias de la misma manera que la contraseña del almacén de claves con:
keytool -keypasswd -keystore new.keystore -alias importantalias
Finalmente pude firmar mi apk. Parece un bicho tonto que puede desperdiciar un día de desarrollo.
Puede que haya tenido el mismo problema. Nunca supe por qué estaba fallando (aunque me pregunto si fue porque la contraseña del almacén de claves tenía menos de 6 dígitos), pero pude copiar mi clave en un nuevo almacén de claves, que luego renombré para reemplazar la anterior. y misteriosamente funcionó después de eso (usando las nuevas contraseñas). Necesitaba la contraseña clave, por cierto. Trabajando en here , hice lo siguiente:
-
keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
- Ingresé la nueva contraseña del almacén de claves dos veces
- Presione Enter cuando me pidió la contraseña del almacén de claves de origen (la dejó en blanco)
- Ingresó la contraseña clave
Después de volver a verificar que el nuevo funcionaba, simplemente lo copié sobre el anterior. Espero que funcione para ti; buena suerte.
Solo tuve este problema: de repente, Android Studio olvidó mis contraseñas y no usaría las que tenía en el archivo de Gradle. ¡He tenido el mismo archivo de claves y contraseñas en el mismo proyecto durante 6 años!
Así que los ingresé manualmente, pero falló la verificación una y otra vez. Intenté algunas cosas, como invalidar cachés, reiniciar Android Studio y restaurar una copia de seguridad del almacén de claves, pero nada ayudó.
Finalmente, por pura desesperación, intenté cambiar la contraseña del almacén de claves y la contraseña de la clave. ¡He aquí que funcionó! Resulta que había cambiado las contraseñas cuando las ingresé en el archivo de compilación de Gradle hace unos años, y por alguna razón nunca me di cuenta.
Conclusión: nunca estés 100% seguro de que lo estás haciendo bien.
Tuve el mismo problema e intenté todo lo que se sugiere en este hilo, pero nada pudo guardar mi contraseña de alias. El punto es que estaba absolutamente seguro de la contraseña, ya que ya había actualizado la aplicación cuatro veces. Recibí el mensaje "El almacén de claves fue manipulado o la contraseña fue incorrecta" .
La solución
Parece que en la creación del almacén de claves utilizando eclipse, ¡ se agregó un carácter de espacio delante de la contraseña!
Este error desagradable aparentemente se solucionó en una versión posterior que me impidió firmar mi aplicación con la contraseña que pensé que era la correcta.
Basado en este enlace SO: Ant no puede crear una aplicación de apk firmada después de actualizar a Android v20. Le sugeriría que intente agregar un carácter de espacio antes o después de su contraseña .
Voy a sugerir un par de más calor y pruebas.
Ten paciencia para aplicar estos,
Pasos:
- Desmarque la compilación automáticamente (Proyecto-> Generar automáticamente) en eclipse y limpie su proyecto.
- Constrúyelo de nuevo. (Haga clic derecho en el proyecto + Proyecto de compilación)
- Proyecto de exportación.
- Seleccione Android Export. (Auto alineado para usted)
- Elige tu llave. proporcionar la contraseña alias debe aparecer en la lista (asegúrese de que el bloqueo de mayúsculas). A veces, damos la contraseña correcta, pero debido a los límites, siempre falla;)
- Déjame saber si te funciona.
Espera que esto te ayude.