META-INF / versions / 9 / module-info.class: испорченный файл класса? (Эта функция требует ASM6) - PullRequest
5 голосов
/ 09 марта 2020

У меня проблемы с Bouncycastle, которые возникают только при запуске задачи :lint.

Обычно это выглядит как Java 9 байт-код версии 53.0 / ASM версия конфликта.

Это зависимости:

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

Из-за чего задача :lint выдает ошибки обработки:

> 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: поврежденный файл класса? (Для этой функции требуется ASM6)

Вероятно, "файл неработающего класса" является поддельным сообщением об ошибке, он просто не может декодировать module-info.class. Вопрос в том, как обеспечить ASM6? Поскольку этого не происходит в старых версиях (см. Мою попытку ответа), единственно приемлемый ответ должен быть для текущей версии 1.64.

Ответы [ 3 ]

0 голосов
/ 12 марта 2020

Файл module-info.class является частью Java модульной системы, которая была представлена ​​с Java 9. Согласно этой проблеме на Android IssueTracker, ошибка была исправлена ​​с тех пор Android Студия 3.4.

0 голосов
/ 17 марта 2020

Как уже упоминалось, это было введено в Java 9, что Android не поддерживает. Вы можете просто использовать packagingOptions для удаления этих классов.

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

Это не должно влиять на фактический исполняемый код, а также удалять классы для проверки lint, так как lint работает с байт-кодом.

0 голосов
/ 12 марта 2020

При использовании старых версий (вероятно, построенных с Java 8) таких ошибок обработки нет:

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

Эта проблема, очевидно, была представлена ​​с версией 1.61 (построена с Java 9). ).


Удаление файла versions/9/module-info.class из обоих JAR-файлов тоже работает.

Это можно автоматизировать с помощью задачи Exec, от которой зависит :lint.


См. https://github.com/JakeWharton/agp-java-support#readme ... что намекает на то, что преобразователь байт-кода должен поддерживать его.

...