AS no pudo firmar APK

Antecedentes del problema

En el entorno jdk11, use AS para generar un archivo de firma para firmar la aplicación, pero al volver a firmar,  se informa una excepción del algoritmo HmacSHA256 no disponible .

Registro de errores

Execution failed for task ':app:packageRelease'.
> A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable
   > com.android.ide.common.signing.KeytoolException: Failed to read key key0 from store "E:\...\analysis.jks": Integrity check failed: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available

Proceso de resolución

Simplemente observar desde el registro no puede obtener la clave de firma (key0) del archivo de almacenamiento de claves de firma (analysis.jks) generado por AS. La razón de este problema es que el  algoritmo HmacSHA256 no está disponible.

Entonces, la razón fundamental es  el problema con el algoritmo HmacSHA256 , entonces, ¿por qué este algoritmo no está disponible?

Cuando vi información relevante en Internet, sospeché que podría ser un problema con la versión JDK (la explicación en línea es que  el algoritmo HmacSHA256  no existe en JDK11), se recomienda revertir la versión JDK a la versión 1.8 o actualizar a la versión 16. Sin embargo, mi proyecto no puede actualizar ni revertir la versión JDK debido a problemas de dependencia. Por supuesto, también publicaré el método alternativo...

Pero hay algo muy extraño: es normal para mí compilar y generar paquetes para otros proyectos (con archivos de almacenamiento de claves de firma) en el entorno JDK11. Entonces sospecho que este problema puede deberse al archivo de almacenamiento de claves de firma generado por AS.

Entonces generé un archivo de almacenamiento de claves localmente y el problema se resolvió inesperadamente...

ilustrar:

  • Comando para generar archivo clave

keytool -genkeypair -alias key0 -keyalg RSA -keysize 2048 -validity 100000 -keystore análisis.jks

-genkeypair --- generar clave

-alias key0 --- alias key0 de la clave

-keyalg RSA --- Utilice el algoritmo RSA para cifrar archivos de firmas

-keysize 2048 --- El tamaño del archivo clave es 2048

-validity 100000 --- El archivo de firma generado es válido por 100000 días

-keystore Analysis.jks --- La ruta de almacenamiento del archivo de firma generado (personalizado)

  • Firma la Apk

jarsigner -verbose -keystore análisis.jks -signjar aplicación-debug-sign.apk aplicación-debug.apk análisis.jks

-verbose --- genera información detallada

-keystore Analysis.jks ---El archivo de firma utilizado en el proceso de firma (tenga en cuenta la ruta absoluta de la clave)

-signjar app-debug-sign.apk app-debug.apk análisis.jks --- Firma formal, los tres parámetros son el apk firmado, el apk a firmar y el archivo de firma.

Supongo que te gusta

Origin blog.csdn.net/HaveFun_Wine/article/details/129836042
Recomendado
Clasificación