Gradle插件3.5.0:“无法转换工件”,“ JetifyTransform的执行失败”

时间:2019-09-12 10:53:26

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

我们将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 as suggested in this answer中的所有Gradle缓存
  • 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也无济于事。

1 个答案:

答案 0 :(得分:0)

有点奇怪,但是我又恢复了工作。显然,这只是Android Gradle插件中与缓存有关的暂时故障。

This answer 帮助了我:

  

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

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

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

更新12/2019 bundle*命令可以正常工作,只有assemble*失败-Android Gradle插件3.5.3仍然失败。在Android Studio中构建可以正常工作。显然,这不是一个普遍的问题,而且我不知道我正在从事的特定项目到底是什么引起了这一问题。