AS n'a pas réussi à signer l'APK

Contexte du problème

Dans l'environnement jdk11, utilisez AS pour générer un fichier de signature pour signer l'application, mais lors de la nouvelle signature,  une exception de l'algorithme HmacSHA256 non disponible est signalée .

Journal des erreurs

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

Processus de résolution

En observant simplement le journal, il est impossible d'obtenir la clé de signature (key0) à partir du fichier de stockage de clé de signature (analysis.jks) généré par AS. La raison de ce problème est que l'algorithme HmacSHA256 n'est pas  disponible .

La raison fondamentale est donc  le problème avec l’algorithme HmacSHA256 , alors pourquoi cet algorithme n’est-il pas disponible ?

Lorsque j'ai vu des informations pertinentes sur Internet, j'ai soupçonné qu'il pourrait s'agir d'un problème avec la version du JDK (l'explication en ligne est que  l'algorithme HmacSHA256  n'existe pas dans le JDK11). Il est recommandé de restaurer la version du JDK vers la version 1.8 ou passer à la version 16. Cependant, mon projet ne peut pas mettre à niveau ou restaurer la version du JDK en raison de problèmes de dépendance. Bien sûr, je publierai également la méthode de secours...

Mais il y a une chose très étrange : il est normal que je compile et produise des packages pour d'autres projets (avec des fichiers de stockage de clés de signature) dans l'environnement JDK11. Je soupçonne donc que ce problème peut être causé par le fichier de stockage de clé de signature généré par AS.

J'ai donc généré un fichier de stockage de clés localement, et le problème a été résolu de manière inattendue...

illustrer:

  • Commande pour générer le fichier de clé

keytool -genkeypair -alias key0 -keyalg RSA -keysize 2048 -validité 100000 -keystore Analysis.jks

-genkeypair --- générer la clé

-alias key0 --- alias key0 de la clé

-keyalg RSA --- Utiliser l'algorithme RSA pour crypter les fichiers de signature

-keysize 2048 --- La taille du fichier de clé est de 2048

-validity 100000 --- Le fichier de signature généré est valable 100 000 jours

-keystore Analysis.jks --- Le chemin de stockage du fichier de signature généré (personnalisé)

  • Signez l'Apk

jarsigner -verbose -keystore analyse.jks -signjar app-debug-sign.apk app-debug.apk analyse.jks

-verbose --- afficher des informations détaillées

-keystore Analysis.jks ---Le fichier de signature utilisé dans le processus de signature (notez le chemin absolu de la clé)

-signjar app-debug-sign.apk app-debug.apk Analysis.jks --- Signature formelle, les trois paramètres sont l'apk signé, l'apk à signer et le fichier de signature.

Je suppose que tu aimes

Origine blog.csdn.net/HaveFun_Wine/article/details/129836042
conseillé
Classement