Плагин Gradle 3.5.0: не удалось преобразовать артефакт, выполнение не выполнено для JetifyTransform

Мы обновили плагин Android Gradle с 3.4.2 до 3.5.0 (и Gradle с 5.1.1 до 5.4.1).

После этого сборка начала давать сбой в нескольких подмодулях. Попытка assemble любого варианта сборки дает следующее (та же ошибка в командной строке и в Android Studio):

> Failed to transform artifact 'bottom-navigation.aar (project :bottom-navigation)' to match attributes {artifactType=jar}.
   > Execution failed for JetifyTransform: <project_root>/bottom-navigation/build/outputs/aar/bottom-navigation-release.aar.
      > Failed to transform '<project_root>/bottom-navigation/build/outputs/aar/bottom-navigation-release.aar' using Jetifier. 
        Reason: Cannot open a library at 'FileMapping(from=<project_root>/bottom-navigation/build/outputs/aar/bottom-navigation-release.aar, to=<project_root>/bottom-navigation/build/.transforms/9b2af95a5f0e0055110660c22ff05ab5/jetified-bottom-navigation-release.aar)'. (Run with --stacktrace for more details.)

Любые идеи, как это исправить?

Что я пробовал

  • "Недействительные кеши" в AS, а также очистка всех кешей Gradle в ~/.gradle/caches , как предлагается в этом ответе
  • All the advice in this somewhat similar question
    • I checked that the problematic modules use apply plugin: 'com.android.library' (instead of com.android.application)
    • Я попытался обновить зависимость appcompat до androidx.appcompat:appcompat:1.1.0 в затронутых модулях, а также удалить эту зависимость

Обновлять

Похоже, что что-то не так в плагине Gradle 3.5.0; сборки ведут себя беспорядочно для меня локально и на нашей машине CI.

Например, чистые сборки не работают: ./gradlew clean assembleBetaRelease не работает, а ./gradlew assembleBetaRelease работает!

Кроме того, иногда я получаю AAPT: error: attribute ... not found вместо указанной выше ошибки Failed to transform artifact.

Вернувшись к плагину Gradle 3.4.2, все эти проблемы исчезнут.

Редактировать, октябрь 2019 г.: странное поведение по-прежнему наблюдается с подключаемым модулем Gradle 3.5.1. Изменить ноябрь 2019 г. И 3.5.2. Обновление до Gradle 5.6 тоже не помогло.


person Jonik    schedule 12.09.2019    source источник
comment
Вы пропустили android.useAndroidX=true & android.enableJetifier=true в файле gradle.properties?   -  person Jeel Vankhede    schedule 12.09.2019
comment
используете проект React Native?   -  person sajad abbasi    schedule 12.09.2019
comment
@JeelVankhede: у нас есть и то, и другое во всем проекте gradle.properties.   -  person Jonik    schedule 12.09.2019
comment
@sajadabbasi: нет, этот проект не имеет ничего общего с React Native.   -  person Jonik    schedule 12.09.2019
comment
@Jonik Убедитесь, что у вас нет артефакта библиотеки поддержки ни в одном модуле.   -  person Jeel Vankhede    schedule 12.09.2019


Ответы (1)


Немного странно, но я снова заставил его работать. Видимо просто временный глюк в плагине Android Gradle, связанный с кешированием.

Этот ответ помог мне:

Самый простой способ решить эту проблему - переключаться между вариантами сборки. Это обновит кэшированные копии и решит проблему.

Я не мог этого сделать в Android Studio, так как синхронизация проекта не удалась, но в командной строке я попробовал другой вариант (в моем случае ./gradlew assembleBetaDebug использовал ./gradlew assembleBetaRelease ранее). Сборка прошла, и после этого она заработала и для всех остальных вариантов, и синхронизация Gradle в Android Studio тоже заработала!

Изменить: на самом деле это полностью не решено; см. обновленный вопрос.

Обновление от 12/2019: bundle* команды работают нормально, только assemble* не работает - по-прежнему не работает с подключаемым модулем Android Gradle 3.5.3. Сборка в Android Studio работает нормально. Очевидно, это не обычная проблема, и я не знаю, что именно в конкретном проекте, над которым я работаю, вызывает это.

Обновление 04/2020: теперь с Android Gradle plugin 3.6.2 (и Gradle 5.6.4) сборки работают для меня локально, и я смог обновить проект. В CircleCI сборка все еще иногда завершается ошибкой с сообщением «Не удалось преобразовать артефакт», но повторный запуск исправляет это. Иди разбери

person Jonik    schedule 12.09.2019
comment
На самом деле эта проблема более опасная, чем эта - теперь я снова получаю ее, например, когда я запускаю ./gradlew clean assembleBetaRelease, а ./gradlew assembleBetaRelease работает! И мы столкнулись с той же проблемой в нашей среде CI; пока не смог это исправить. Я подумываю вернуться к 3.4.2, чтобы сделать сборки снова надежными. - person Jonik; 13.09.2019
comment
У меня также была эта проблема с использованием плагина Android Gradle 3.5.3 с Gradle 5.4.1. Я вернул плагин Android Gradle к версии 3.4.2, и он работает. - person gscaparrotti; 01.05.2020