以非零退出值1(ic_launcher. png: error: 重复文件)完成了 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

在它正常运行之前,但是由于我放置了类路径 Build: gradle: 1.2.2,这会导致我出错

68936 次浏览

根据 泽维尔 · 杜罗谢关于 G + 的解释的说法,这是因为你使用的一个库拥有自己的 ic_launcher.png——它们当然不应该(详见下文)。

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

要查看违规依赖项,请按 Ctrl + Shift + N 两次(用于非项目匹配)并键入 ic_launcher.png(参见屏幕快照的最后一行) enter image description here

为了暂时解决 问题,在可绘制的资源文件夹中添加 -v4限定符(或者如果您有自己的理由,只将 ic_launcher.png移动到 *dpi-v4)——这个解决方案归功于 泽维尔 · 杜罗切特。您也可以只是重命名您的图标到其他东西,并作出相应的变化,以 AndroidManifest.xml

enter image description here

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

启动器图标不应该出现在库中,所以我建议您通知您正在使用的库的作者,他们忘记删除冗余的 ic_launcher.png文件。

同样值得一提的是,正如 Barry Carroll同样的讨论中非常精确地指出的那样,这并不意味着你的资源永远不应该与库中的资源重叠: 合法有很多理由用你自己的资源覆盖库的资源(例如,改变库提供的活动的外观) ,gradle 插件的资源合并逻辑有意允许这样做。

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

这个故障 是的带出了无用的 ic_launcher.png覆盖(实际上是一个冲突——由于这个故障) ,但是这种情况对于其他类型的资源来说并不全是坏事。

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

降级到 Build: gradle: 1.1.3解决了我的问题

我在使用第三方库(Github 上的 RomainPiel/微光机器人库)时遇到了同样的问题

为了解决这个问题,我将 ic _ launcher.png 文件从可绘制文件夹移动到 mipmap 文件夹,问题就解决了。

enter image description here

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

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

只需将 ic _ launcher.png 重命名为其他名称(例如 ico _ launcher.png)

以下是发现问题的一般方法:

快跑

./gradlew build —— stacktrace —— info

你会发现错误的细节。 我发现了我的错误: 一个重复的类导致了一个顶级错误,删除重复的类将解决这个问题。

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

按照这个链接 给你

或者

像这样改变。

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

在我的例子中,我已经在 strings.xml 文件中添加了撇号 s (s)。 检查家伙任何这样的错误,并删除它一定会有帮助。 IDE 不能正确地显示错误,而是使所有资源不同步,这太烦人了。

我知道这不是问题中提到的情况,但是错误是完全一样的,也就是说 Gradle 的执行失败了。

简单的 Rename the Image(Rightclick on the Image, Select Refactor and select Rename)。它将解决这个问题,因为问题已经出现,作为一个 library也使用 imagesame name

我也遇到了同样的问题,以下几点对我很有效:

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

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

更新到最新级别的插件 1.5解决了这个问题。更新下面的脚本在您的根 build.gradle文件

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

由于文件扩展名的大小写不一致,我成功地触发了这个问题。我有一个。Jpg 图像在一个可绘制的目录,但相同的文件名,但图像。另一个可绘制目录中的 JPG。文件名和目录是正确的,但扩展名是错误的。