Search code examples
javaandroidgsonbouncycastleandroid-lint

META-INF/versions/9/module-info.class: broken class file? (This feature requires ASM6)


I'm having issues with Bouncycastle, which only arise when running the :lint task.

Generally it seems to be a Java 9 byte-code version 53.0 / ASM version conflict.

These are the dependencies:

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

Which cause the :lint task to throw processing errors:

> 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: broken class file? (This feature requires ASM6)

The same goes for:

// https://mvnrepository.com/artifact/com.google.code.gson/gson
implementation "com.google.code.gson:gson:2.8.6"

Since upgrading from 1.4.1 to 1.4.2-native-mt, it's the same again:

implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2-native-mt"

kotlin-stdlib-1.4.0.jar:META-INF\versions\9\module-info.class: broken class file? (Module requires ASM6)


Solution

  • There is a more simple workaround. Basically the problem can be identified as "running Gradle with Java 8, while handling files which were built with Java 9". My new approach is building with Java 11 (GitHub Actions also builds with Java 11 and Gradle 6.7.1 would currently support up to Java 15).

    • After installing Java 11 with sudo dnf install java-11-openjdk

    • alternatives --display java will list the JDK to use.

    For example: /usr/lib/jvm/java-11-openjdk-11.0.11.0.9-0.el8_3.x86_64:

    Android Studio Screenshot


    On a side note, building with JDK 11 also fixes this warning:

    Current JDK version 1.8.0_172-b11 has a bug (https://bugs.openjdk.java.net/browse/JDK-8007720) that prevents Room from being incremental. Consider using JDK 11+ or the embedded JDK shipped with Android Studio 3.5+.

    The "embedded JDK shipped with Android Studio 3.5+" is still Java 8 ...