【问题标题】:Gradle plugin 3.5.0: "Failed to transform artifact", "Execution failed for JetifyTransform"Gradle 插件 3.5.0:“无法转换工件”、“JetifyTransform 执行失败”
【发布时间】:2020-01-14 05:45:29
【问题描述】:

我们将 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/caches 中的所有 Gradle 缓存@as suggested in this answer
  • this somewhat similar question中的所有建议
    • 我检查了有问题的模块使用apply plugin: 'com.android.library'(而不是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 年 10 月编辑:在 Gradle 插件 3.5.1 中仍然看到这种奇怪的行为。 2019 年 11 月编辑和 3.5.2。升级到 Gradle 5.6 也没有帮助。

【问题讨论】:

  • 您是否错过了 gradle.properties 文件中的 android.useAndroidX=trueandroid.enableJetifier=true
  • 正在使用 React Native 项目?
  • @JeelVankhede:我们在项目范围的 gradle.properties 中都有这两个。
  • @sajadabbasi:不,这个项目与 React Native 无关。
  • @Jonik 请确认您在任何模块中都没有任何支持库工件。

标签: android android-gradle-plugin android-jetifier


【解决方案1】:

有点奇怪,但我又让它工作了。显然只是与缓存相关的 Android Gradle 插件中的一个临时故障。

This answer帮助了我:

解决此问题的简单方法是在构建变体之间切换。这会刷新缓存的副本并解决问题。

由于项目同步失败,我无法在 Android Studio 中执行此操作,但在命令行上我尝试了另一个变体(在我的情况下,./gradlew assembleBetaDebug 之前使用过 ./gradlew assembleBetaRelease)。构建通过,之后它也适用于所有其他变体,Android Studio 中的 Gradle 同步也开始工作!

编辑:其实这并没有完全解决;查看更新的问题。

2019 年 12 月更新bundle* 命令工作正常,只有 assemble* 失败 - Android Gradle 插件 3.5.3 仍然失败。在 Android Studio 中构建工作正常。显然这不是一个常见的问题,而且我不知道我正在从事的特定项目中究竟是什么导致了这种情况。

更新 04/2020:现在使用 Android Gradle 插件 3.6.2(和 Gradle 5.6.4)构建可以在本地为我工作,并且我能够更新项目。在 CircleCI 上,构建仍然偶尔失败并显示“无法转换工件”,但重新运行会修复它。去图?

【讨论】:

  • 实际上这个问题比这更严重——现在我又遇到了,例如当我运行./gradlew clean assembleBetaRelease,而./gradlew assembleBetaRelease 工作时!我们在 CI 环境中遇到了同样的问题;还不能解决这个问题。我正在考虑恢复到 3.4.2 以使构建再次可靠。
  • 我在使用 Android Gradle 插件 3.5.3 和 Gradle 5.4.1 时也遇到了这个问题。我将 Android Gradle 插件恢复到 3.4.2 并且可以正常工作。
猜你喜欢
  • 2020-01-12
  • 2020-06-03
  • 2020-07-13
  • 2012-07-07
  • 2018-07-19
  • 2022-12-03
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
相关资源
最近更新 更多