2015-04-30 71 views
75

我用gradle得到了这个奇怪的错误,请帮帮我!Gradle完成非零退出值1(ic_launcher.png:错误:重复文件)

/.../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。用它。 –

+0

是的,降级到com.android.tools.build:gradle:1.1.3缓解我的问题,谢谢! –

+1

简而言之:由于'ic_launcher'重复。摆脱他们 - 删除或重命名 –

回答

19

降级到com.android.tools.build:gradle:1.1.3 sloved我的问题

+0

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

+0

@Akshay尝试1.1.3 –

+0

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

112

Xavier Durochet's explanation on G+,这是由于一个你使用的图书馆有它自己的ic_launcher.png - 他们当然不应该这样做(更多的是在底部)。

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

要看到问题的依赖,打Ctrl + Shift + N两次(非项目匹配),并输入ic_launcher.png(见截图的最后一行) enter image description here

要解决的问题暂时,将-v4限定符添加到您的可绘制资源文件夹中(或者如果您有理由,则只将其移动ic_launcher.png*dpi-v4) - 将此信用额度设为Xavier Durochet。你也可以重命名你的图标变成别的东西并做出相应的改变AndroidManifest.xml

enter image description here

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

启动器图标在图书馆中没有任何业务,所以我鼓励您通知您正在使用的库的作者,他们忘记删除多余的ic_launcher.png文件。

另外值得一提的,如Barry Carrollthe same discussion指出的非常精确,这并不意味着你的资源不应该重复那些在图书馆:有很多的合法原因重写一个lib的资源用自己的(例如,改变库提供的活动的外观)和gradle插件的资源合并逻辑确实允许这样做。

只是在这种特殊情况下,当lib在Android gradle插件版本(pre-1.2.2)后面发生冲突时,资源以两个不同的*dpi文件夹结尾 - 带和不带-v4限定词;但他们实际上在同一资源“桶”中,因此系统认为它们是重复的。

此故障确实衬托出无用ic_launcher.png倍率(实际上,在碰撞 - 由于毛刺),但这种情况是不是其他类型的资源普遍不好。

I.e.有时你故意重写一个库的资源,这个毛刺仍然会导致错误消息弹出。这一次,资源名称没有真正的问题,所以上面的临时解决方案或阻止插件版本是要走的路。

+2

此外,重建最新的相同的库gradle/build工具也将解决这个问题。 – danb

+0

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

+0

UPD哦,重建*库*,对不起,误读乍一看:)那将是对我的案例中的图书馆作者的建议。只是好奇 - 为什么它解决了这个问题的任何想法?重建库在drawable- * dpi中是否可绘制,没有'-v4'后缀?如果我理解了Xavier,那么'gradle'和'aapt'之间会有一个小故障,'aapt'应该将'-v4'放在应用程序的资源中,但是不会 - 所以我们最终会得到2对文件夹。因此,在'aapt'被更新后,我们仍然会得到'-v4'文件夹,并且lib将不得不重新被重建,对吧? –

27

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

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

enter image description here

+1

Omg Can,你救了我的半日半夜。非常感谢;) – khaintt

+2

这应该是正确的答案!然后在清单上使用正确的文件更改徽标或图标:@ mipmap/ic_launcher –

+0

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

2

升级到1.2.3,但要确保你的gradle产出和buildToolsVersion相同且在你的项目和使用AARS。

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

+0

这解决了我的问题(也谈到伊凡巴托索夫在上面的“值得一提”部分的回应)。 一个库项目(我从Eclipse导入的)在其build.gradle中定义了一个较旧的“buildToolsVersion”。当构建使用该库的应用程序时,这会导致gradle失败,导致“重复文件”垃圾。确保库的“buildToolsVersion”与应用程序的“buildToolsVersion”gradle停止“是一个该死的gradle”相同并编译好所有版本。有没有一些皮棉检查或一些更好的错误描述? – dell116

1

只需重命名ic_launcher.png到别的东西(如ico_launcher.png)

+0

如果您使用多个库,每个库都有一个ic_launcher,这不是一个解决方案 –

+0

我与另一个不是ic_launcher的png文件有相同的问题,重命名它可以解决问题。 –

13

这里是要找到问题的一般方法:

运行

./gradlew build --stacktrace --info

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

+0

谢谢..这帮了我 – Praveen

+0

@Praveen很高兴帮助你。 – herbertD

+1

@herbertD我最好的thx! –

10

对我来说,一个简单的“干净的项目”和“重建项目”做到了这一点。

+0

感谢它的工作。 – Sandeep

+0

这对我有效,但使用'./gradlew clean'因为我在Jenkins上运行。谢谢! – epool

0

请点击此链接Here

或者

做出改变这样的。

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

在我的情况下,我已经为strings.xml文件添加了撇号('s)。 检查球员的任何此类错误,并删除它肯定会有所帮助。 它是如此烦人的IDE无法正确显示错误,而不是使所有资源不同步。

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

+0

THIS !!! .... THANKYOU !! – yUdoDis

1

简单地RenameImageRightclick on the Image, Select Refactor and select Rename)。当问题出现时,它将解决问题,因为其中一个library也使用imagesame name

1

我有同样的问题,其后的内容为我工作:

  • 重命名你的图标
  • 在清单

添加tools:replace="android:icon"<application>标签您可以尝试只是第一步,但我在合并清单文件时仍遇到问题。这样它应该覆盖库中使用的任何资源。

0

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

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

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

相关问题