Gradle使用非零退出值1结束(ic_launcher.png:错误:重复的文件)


75

我在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,这导致了我的错误


5
当前,最后一个稳定的gradle插件是1.1.3。用它。
加布里埃莱·马里奥蒂

是的,降级为com.android.tools.build:gradle:1.1.3解决了我的问题,谢谢!
Fayçal

1
简而言之:由于ic_launcher重复。摆脱它们-删除或重命名
Ujjwal Singh 2015年

Answers:


109

根据Xavier Durochet在G +上的解释,这是由于您使用的其中一个库具有自己的库ic_launcher.png-它们当然不应该(在底部对此进行更多说明)。

日志中提到的两个图标的可能性有所不同:一个是您的,另一个是最有可能被某人忘记从库中删除的通用android图标。

要查看令人讨厌的依赖关系,请点击Ctrl + Shift + N 两次(针对非项目匹配)并输入ic_launcher.png(请参见屏幕快照的最后一行) 在此处输入图片说明

暂时解决此问题,请将-v4限定符添加到可绘制的资源文件夹中(或仅ic_launcher.png*dpi-v4您有理由的情况下才移至该文件夹)-归功于Xavier Durochet。您也可以将图标重命名为其他名称,然后对AndroidManifest.xml

在此处输入图片说明

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

启动器图标与库无关,因此,我建议您通知正在使用的库的作者,因为它们忘记删除冗余ic_launcher.png文件。

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

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

这种故障确实会带来无用的ic_launcher.png覆盖(实际上是由于故障而引起的冲突),但是这种情况对于其他类型的资源并不普遍不利。

即有时您有意覆盖lib的资源,并且这种故障仍然会导致错误消息弹出。这次资源名称没有真正的问题,因此上面的临时解决方案或阻止插件版本的解决方案是可行的。


2
此外,使用最新的gradle / build工具重建相同的库也将解决此问题。
danb 2015年

我很确定我的设置是最新的:构建工具v 22.0.1,gradle v 1.2.2
Ivan Bartsov

UPD,哦,重建图书馆,对不起,乍看之下是错误的:)对于我的情况,这将是对图书馆作者的建议。只是好奇-为什么要解决此问题的任何想法?重建库是否包含drawable-*dpi不带-v4后缀的可绘制对象?如果我理解正确的泽维尔,有之间的毛刺gradleaaptaapt应该把-v4我们的应用程序的资源,但不-所以我们用2对文件夹的结束。因此,因此,在aapt更新之后,我们仍然会得到-v4文件夹,并且必须重新构建该库,对吗?
伊万·巴佐夫

我的理解是gradle插件曾经用来添加-v4,现在却没有。因此,只要您在两边都使用了/不添加-v4的版本,一切都可以正常工作。但是有可能我误解了:)无论如何,我用最新的东西重建了我们的一个库,问题就消失了。
danb 2015年

还要确保您的AndroidManifest.xml没有对应用程序图标的错误引用。有时ic_launcher.png可能位于mipmap /中,而不是在drawables /中
IHeartAndroid 2015年

27

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

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

在此处输入图片说明


1
天哪,你救了我半天半夜。非常感谢;)
Khai Nguyen

2
这应该是正确的答案!然后在清单上更改带有正确文件的徽标或图标:@ mipmap / ic_launcher
GuilhermeSimãoCouto

在较新版本的android studio / gradle中,即使没有库使用它,也需要将ic_launcher放在mipmap文件夹中(这将解决错误)。
射手2015年

如果要升级早期版本23到23+之间的构建工具之间的差距,这应该是公认的答案
汤姆·贵族

19

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


我的是1.2.3,仍然有同样的问题
Akshay

@Akshay尝试1.1.3
Fayçal

嗯,我明白你在说什么..所以这是工作室错误吗?
Akshay

@Akshay我不知道抱歉:/
Fayçal

13
好的解决方案是什么?
Fayçal

14

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

./gradlew建立--stacktrace --info

并且您将找到错误的详细信息。我发现了我的错误:重复的类导致了TOP级错误,删除重复的类将解决问题。


@Praveen Glad可以帮助您。
herbertD

1
谢谢,这对我有所帮助。这是最有用的答案,因为有多个来源可以解决此问题。
biodiv '16


2

升级到1.2.3,但请确保您的gradle和buildToolsVersion在项目和使用的aar中都相同。

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


这解决了我的问题(并且在上面的“值得一提”部分中也提到了伊万·巴佐夫的回答)。一个库项目(我从Eclipse导入的)在build.gradle中定义了一个较旧的“ buildToolsVersion”。在构建使用该库的应用程序时,这会导致gradle失败,并出现“重复文件”垃圾。确保库的“ buildToolsVersion”与应用程序的“ buildToolsVersion”相同后,gradle停止“成​​为该死的gradle”,并编译所有版本。没有一些棉绒检查或提供更好的错误描述的东西吗?
dell116

1

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


如果您使用的每个库都具有ic_launcher,则这不是解决方案
Daniel Wilson

我对另一个不是ic_launcher的png文件也遇到了同样的问题,并对其重命名解决了该问题。
Tot Zam

1

在我的情况下,我已经在字符串.xml文件中添加了撇号('s)。请务必检查是否存在此类错误,并将其删除绝对有帮助。令人讨厌的是,IDE无法正确显示错误,而是使所有资源不同步。

我知道问题不是这样,但是错误是完全相同的,即Gradle执行失败。


1

简单RenameImageRightclick on the Image, Select Refactor and select Rename)。它会解决问题,因为出现的问题是其中之一library也与image一起使用same name


1

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

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

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


0

按照此链接这里

要么

像这样进行更改。

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

0

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

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

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.