【问题标题】:Gradle finished with non-zero exit value 1 (ic_launcher.png: error: Duplicate file)Gradle 以非零退出值 1 完成(ic_launcher.png:错误:重复文件)
【发布时间】:2015-07-10 00:25:38
【问题描述】:

我在使用 gradle 时遇到了这个奇怪的错误,请帮助我!

/.../app/build/intermediates/res/debug/drawable-xxhdpi-v4/ic_launcher.png:
    error: Duplicate file
/.../app/build/intermediates/res/debug/drawable-xxhdpi/ic_launcher.png:
    Original is here. The version qualifier may be implied.
Error:Execution failed for task ':app:processDebugResources'.
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException:
Process 'command '/.../sdk/build-tools/22.0.1/aapt'' finished with non-zero exit value 1

之前它运行正常,但是由于我放了classpath com.android.tools.build:gradle:1.2.2,这导致了我的错误

【问题讨论】:

  • 目前最后一个稳定的 gradle 插件是 1.1.3。使用它。
  • 是的,降级到 com.android.tools.build:gradle:1.1.3 解决了我的问题,谢谢!
  • 简而言之:这是由于 ic_launcher 重复。摆脱它们 - 删除或重命名

标签: android-studio gradle android-resources aapt aar


【解决方案1】:

根据Xavier Durochet's explanation on G+,这是因为您使用的其中一个库拥有自己的ic_launcher.png——它们当然不应该这样做(更多内容在底部)。

日志中提到的两个图标很可能是不同的:一个是你的,另一个很可能是有人忘记从库中删除的通用 android 图标。

要查看有问题的依赖项,请点击Ctrl + Shift + N两次(用于非项目匹配)并输入ic_launcher.png(请参阅屏幕截图的最后一行)

要临时解决此问题,请将 -v4 限定符添加到您的可绘制资源文件夹(或者如果您有自己的理由,将 ic_launcher.png 移动到 *dpi-v4)- 归功于 @ 987654322@ 获取解决方案。您也可以将您的图标重命名为其他名称并将相应更改为AndroidManifest.xml

真正的问题是有问题的库带有无用的图标。 拥有自己的资源的库(如 ActionBarSherlock 或 Google 自己的 Support v7 库)使用独特的命名方案来避免与您的资源名称冲突(abs_, abc_)。

启动器图标与库无关,因此我鼓励您通知您正在使用的库的作者,他们忘记删除多余的 ic_launcher.png 文件。

也值得一提,正如Barry Carroll 在the same discussion 中非常准确地指出的那样,这并不意味着您的资源不应该与图书馆中的资源重叠:有很多合法的 使用您自己的资源覆盖库资源的原因(例如,更改库提供的活动的外观)和 gradle 插件的资源合并逻辑确实允许这样做,这是故意的。

只是在这种特殊情况下,当 lib 在 android gradle 插件版本(1.2.2 之前)上落后时会发生冲突,在这种情况下资源最终位于两个不同的 *dpi 文件夹中 - 有和没有-v4 限定符;但它们实际上在同一个资源“桶”中,因此系统认为它们是重复的。

这个故障确实会导致无用的ic_launcher.png 覆盖(实际上是由于故障造成的冲突),但这种情况对于其他类型的资源来说并不是普遍的坏事。

即有时你故意覆盖一个库的资源,这个故障仍然会导致错误消息弹出。这次资源名称没有真正的问题,所以上面的临时解决方案或保留插件版本是要走的路。

【讨论】:

  • 此外,使用最新的 gradle/build 工具重建同一个库也可以解决问题。
  • 我很确定我的设置是最新的:build tools v 22.0.1, gradle v 1.2.2
  • UPD 哦,正在重建 库,抱歉,乍一看误读了 :) 在我的情况下,这将是对库作者的建议。只是好奇-知道为什么它可以解决问题吗?重建库是否在 drawable-*dpi 中没有 -v4 后缀的可绘制对象?如果我对 Xavier 的理解正确,gradle 和 aapt 之间存在故障,aapt 应该将 -v4 放入 我们的 应用程序的资源中,但没有——所以我们最终得到 2成对的文件夹。因此,在 aapt 更新后,我们仍然会得到 -v4 文件夹,并且 lib 必须再次重建,对吗?
  • 我的理解是gradle插件以前是加-v4的,现在不加了。因此,只要您在双方都使用添加/不添加 -v4 的版本,一切正常。但我可能误解了:) 无论如何,我用最新的东西重建了我们的一个库,问题就消失了。
  • 还要确保您的 AndroidManifest.xml 没有对应用图标的错误引用。有时 ic_launcher.png 可能位于 mipmap/ 而不是 drawables/
【解决方案2】:

降级到 com.android.tools.build:gradle:1.1.3 解决了我的问题

【讨论】:

  • 我的是 1.2.3 还是有同样的问题
  • @Akshay 尝试 1.1.3
  • 嗯,我明白你在说什么了..那么这是工作室的错误吗?
  • @Akshay 我不知道对不起:/
  • 什么是好的解决方案?
【解决方案3】:

我在使用第三方库时遇到了同样的问题。(Github 上的RomainPiel/Shimmer-android library)

为了解决这个问题,我将 ic_launcher.png 文件从 drawable 文件夹移动到 mipmap 文件夹。问题解决了。

【讨论】:

  • 天哪,你救了我的半天半夜。非常感谢;)
  • 这应该是正确答案!然后在清单上使用正确的文件更改徽标或图标:@mipmap/ic_launcher
  • 在较新版本的 android studio/gradle 中,您需要将 ic_launcher 放在 mipmap 文件夹中,即使没有库使用它(这将解决错误)。
  • 如果升级到早期 23 到 23+ 的构建工具之间的差距,这应该是公认的答案
【解决方案4】:

升级到 1.2.3,但确保你的 gradle 和 buildToolsVersion 在你的项目和使用的 aars 中是相同的。

如果您使用无法控制 gradle/build 版本的外部库: 联系作者或自行查看来源。一些库有未使用的启动器图标,这将导致此冲突。删除此图标将解决您的问题。在极少数情况下,相同名称的源(例如 menu.xml)也可能导致此问题。一个简单的解决方法是重命名您的资源。

【讨论】:

  • 这解决了我的问题(并且在上面的“值得一提”部分中也谈到了 Ivan Bartsov 的回应)。一个库项目(我从 Eclipse 导入的)在其 build.gradle 中定义了一个较旧的“buildToolsVersion”。这导致 gradle 在构建使用该库的应用程序时因“重复文件”垃圾而失败。在确保库的“buildToolsVersion”与应用程序的“buildToolsVersion”相同后,gradle 停止“成为该死的 gradle”并编译所有版本都OK。是否没有一些 lint 检查或提供更好的错误描述的东西?
【解决方案5】:

只需将 ic_launcher.png 重命名为其他名称(例如 ico_launcher.png)

【讨论】:

  • 如果您使用多个库,每个库都有一个 ic_launcher,这不是解决方案
  • 我在另一个不是 ic_launcher 的 png 文件上遇到了同样的问题,重命名它解决了这个问题。
【解决方案6】:

这是查找问题的一般方法:

运行

./gradlew build --stacktrace --info

您会发现错误的详细信息。 我发现了我的错误:一个重复的类导致了一个顶级错误,删除重复的就可以解决问题。

【讨论】:

  • @Praveen 很高兴为您提供帮助。
  • 感谢这对我有帮助。这是最有帮助的答案,因为这个问题有多种来源。
【解决方案7】:

对我来说,一个简单的“干净项目”和“重建项目”就可以解决问题。

【讨论】:

  • 这对我有用,但使用 ./gradlew clean 因为我在 Jenkins 上运行。谢谢!
【解决方案8】:

点击此链接Here

或者

像这样做出改变。

repositories {
maven {url "https://clojars.org/repo/"}
}
dependencies {
compile 'frankiesardo:icepick:{{latest-version}}'
**provided** 'frankiesardo:icepick-processor:{{latest-version}}'
}

【讨论】:

    【解决方案9】:

    就我而言,我已将撇号 s ('s) 添加到 strings.xml 文件中。 请检查人员是否有任何此类错误并删除它肯定会有所帮助。 IDE 无法正确显示错误,而是使所有资源不同步,这太烦人了..

    我知道问题中的情况并非如此,但错误完全相同,即 Gradle 执行失败。

    【讨论】:

      【解决方案10】:

      只需Rename Image (Rightclick on the Image, Select Refactor and select Rename)。它将解决问题,因为问题已经出现,因为library 之一也在使用image 和same name。

      【讨论】:

        【解决方案11】:

        我遇到了同样的问题,以下对我有用:

        • 重命名你的图标
        • 将tools:replace="android:icon" 添加到清单中的<application> 标记

        您可以只尝试第一步,但在合并清单文件时仍然遇到问题。这样,它应该覆盖库中使用的任何资源。

        【讨论】:

          【解决方案12】:

          更新到最新的 gradle 插件 1.5.0 解决了这个问题。在您的根 build.gradle 文件中更新以下脚本

          buildscript {
              ...
              dependencies {
                  classpath 'com.android.tools.build:gradle:1.5.0'
              }
              ...
          }
          

          【讨论】:

            【解决方案13】:

            我设法通过文件扩展名的大小写不一致来触发这个问题。我在一个可绘制目录中有一个 .jpg 图像,但在不同的可绘制目录中有一个文件名相同但 .JPG 的图像。文件名和目录正确,但扩展名不正确。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-11-13
              • 2015-07-09
              • 1970-01-01
              • 2016-09-28
              • 2018-08-25
              • 2015-10-14
              • 2016-01-19
              相关资源
              最近更新 更多