web-dev-qa-db-fra.com

META-INF / versions / 9 / module-info.class: fichier de classe cassé? (Cette fonctionnalité nécessite ASM6)

J'ai des problèmes avec Bouncycastle, qui ne surviennent que lors de l'exécution du :lint tâche.

Généralement, il semble être un Java 9 byte-code version 53.0/ ASM version conflit.

Voici les dépendances:

// https://mvnrepository.com/artifact/org.bouncycastle
implementation "org.bouncycastle:bcprov-jdk15on:1.64"
implementation "org.bouncycastle:bcpkix-jdk15on:1.64"

Ce qui cause le :lint tâche pour générer des erreurs de traitement:

> Task :mobile:lint
Error processing bcpkix-jdk15on-1.64.jar:META-INF/versions/9/module-info.class: broken class file? (This feature requires ASM6)
Error processing bcprov-jdk15on-1.64.jar:META-INF/versions/9/module-info.class: broken class file? (This feature requires ASM6)

META-INF/versions/9/module-info.class: fichier de classe cassé? (Cette fonctionnalité nécessite ASM6)

Un "fichier de classe cassé" est probablement un faux message d'erreur, il ne peut tout simplement pas décoder module-info.class. La question est: comment fournir ASM6? Comme cela ne se produit pas sur les anciennes versions (voir ma tentative de réponse), la seule réponse acceptable devrait être pour la version actuelle 1.64.

7
Martin Zeitler

Le fichier module-info.class fait partie du système de modules Java) qui a été introduit depuis Java 9. Selon ce numéro on Android IssueTracker, le bogue a été corrigé depuis Android Studio 3.4.

0
Eng.Fouad

Comme déjà mentionné, cela a été introduit dans Java 9, que Android ne prend pas en charge. Vous pouvez simplement utiliser packagingOptions pour supprimer ces classes.

Android {
    packagingOptions {
        exclude "**/module-info.class"
    }
}

Cela ne devrait pas affecter le code réellement exécuté et devrait également supprimer les classes pour les vérifications de lint car lint travaille sur le bytecode.

0
Blaz