Gradle完成非零退出值1(ic_launcher.png:错误:重复的文件)
我用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
在它正常运行之前,但是因为我把类pathcom.android.tools.build:gradle:1.2.2 ,这会导致我的错误
根据Xavier Durochet对G +的解释 ,这是由于你使用的一个图书馆拥有它自己的ic_launcher.png
他们当然不应该这样做(更多的是在底部)。
有可能是在日志中提到的两个图标是不同的:一个是你的,另一个很可能是有人忘记从图书馆中删除的通用Android图标。
要查看有问题的依赖关系,请Ctrl + Shift + N
两次 (对于非项目匹配)并键入ic_launcher.png
(请参见截图的最后一行)
要临时解决该问题 ,请将-v4
限定符添加到您的可绘制资源文件夹中(或者,如果您ic_launcher.png
,请将ic_launcher.png
移动到*dpi-v4
) – 将此解决scheme归功于Xavier Durochet 。 您也可以将您的图标重命名为其他内容,并对AndroidManifest.xml
进行相应更改
真正的问题是,违规的图书馆带有无用的图标。 拥有自己资源的库(如ActionBarSherlock或Google自己的Support v7库)使用独特的命名scheme来避免与资源名称( abs_
, abc_
)的冲突。
启动器图标没有业务在图书馆,所以我鼓励你通知你正在使用的库的作者,他们忘了删除多余的ic_launcher.png
文件。
另外值得一提的是 ,正如Barry Carroll在同样的讨论中非常精确地指出的那样,这并不意味着你的资源不应该与图书馆中的资源重叠:有很多合法的理由来覆盖你自己的资源库(例如改变外观一个库提供的活动),gradle插件的资源合并逻辑确实允许这样做。
只是在这种特殊情况下,当lib在Android Gradle插件版本(1.2.2之前版本)后面会发生冲突,在这种情况下,资源以两个不同的*dpi
文件夹结尾 – 带和不带-v4
限定符; 但他们实际上在相同的资源“桶”,所以系统认为他们是重复的。
这个小故障确实带来了无用的ic_launcher.png
覆盖(实际上是一个碰撞 – 由于小故障),但是这种情况对于其他types的资源并不是普遍的坏处。
即有时你有意地重写一个库的资源,这个毛刺仍然会导致错误消息popup。 这一次,资源名称并没有真正的问题,所以上面的暂时解决scheme或者阻止插件版本是要走的路。
我在使用第三方库时遇到同样的问题(Github上的RomainPiel / Shimmer-android库)
为了解决这个问题,我将我的ic_launcher.png文件从drawable文件夹移动到了mipmap文件夹。 问题解决了。
降级到com.android.tools.build:gradle:1.1.3解决了我的问题
以下是查找问题的一般方法:
跑
./gradlew build –stacktrace –info
你会发现错误的细节。 我发现我的错误:一个重复的类导致了一个顶级错误,并删除重复的一个将解决问题。
对我来说,一个简单的“清洁工程”和“重build工程”就是这样做的。
升级到1.2.3,但确保您的gradle和buildToolsVersion在您的项目中是相同的,并且使用了空格。
如果你使用外部库,你无法控制gradle / build版本:联系作者或者自己检查源代码。 一些图书馆有未使用的发射器图标,这将导致这种冲突。 删除此图标将解决您的问题。 在less数情况下,同名的源文件(例如menu.xml)也可能导致这个问题。 一个简单的解决方法是重命名你的资源。
只需将ic_launcher.png重命名为其他内容(例如ico_launcher.png)
在我的情况下,我已经添加到strings.xml文件的撇号(的)。 做检查家伙的任何这样的错误,并删除它一定会有所帮助。 这是非常烦人的IDE不能正确显示错误,而是使所有资源不同步..
我知道这不是问题中的问题,但错误是完全相同的,即Gradle执行失败。
Rename
Image
( Rightclick on the Image, Select Refactor and select Rename
)。 它将解决问题,因为问题已经出现,因为其中一个library
也在使用same name
的image
。
我有同样的问题,以下是我的工作:
- 重命名你的图标
- 在Manifest中添加
tools:replace="android:icon"
到你的<application>
标签
您可以尝试第一步,但在合并清单文件时仍遇到问题。 这样它应该覆盖库中使用的任何资源。
按照此链接在这里
要么
像这样做改变。
repositories { maven {url "https://clojars.org/repo/"} } dependencies { compile 'frankiesardo:icepick:{{latest-version}}' **provided** 'frankiesardo:icepick-processor:{{latest-version}}' }
更新到最新的gradle插件1.5.0解决了这个问题。 在根build.gradle
文件中更新以下脚本
buildscript { ... dependencies { classpath 'com.android.tools.build:gradle:1.5.0' } ... }
我设法通过不一致的文件扩展名大写触发这个问题。 我在一个可绘制的目录中有一个.jpg图像,但是具有相同文件名的图像,但在不同的可绘制目录中.JPG。 文件名和目录是正确的,但扩展名不是。