Gradle finished with non-zero exit value 1 (ic_launcher.png: error: Duplicate file)
Gradle finished with non-zero exit value 1 (ic_launcher.png: error: Duplicate file)
我在使用 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
之前它运行正常,但是因为我把类路径com.android.tools.build:gradle:1.2.2,这导致我出错
根据 Xavier Durochet's explanation on G+,这是因为您使用的其中一个库拥有自己的 ic_launcher.png
—— 他们当然不应该这样做(更多内容在底部)。
日志中提到的两个图标很可能是不同的:一个是您的,另一个很可能是有人忘记从库中删除的通用 android 图标。
要查看有问题的依赖项,请点击 Ctrl + Shift + N
两次 (对于非项目匹配)并输入 ic_launcher.png
(请参阅最后一行截屏)
要暂时解决此问题,请将 -v4
限定符添加到您的可绘制资源文件夹(或仅将 ic_launcher.png
移动到 *dpi-v4
如果你有你的理由)——解决方案归功于 Xavier Durochet。您也可以将您的图标重命名为其他名称并对 AndroidManifest.xml
进行相应的更改
真正的问题是有问题的库带有无用的图标。 有自己资源的库(比如 ActionBarSherlock 或 Google 自己的 Support v7 库)使用独特的命名方案以避免与您的资源名称冲突(abs_
、abc_
)。
启动器图标在库中没有任何业务,因此我鼓励您通知您正在使用的库的作者他们忘记删除多余的 ic_launcher.png
文件。
还值得一提,因为 Barry Carroll noted very precisely in the same discussion,这并不意味着您的资源永远不应与图书馆中的资源重叠:有很多 合法 有理由用您自己的资源覆盖库的资源(例如,更改库提供的 activity 的外观)和 gradle 插件的资源合并逻辑确实允许这样做,故意的。
只是在这种特殊情况下,当库落后于 android gradle 插件版本(1.2.2 之前)时会发生冲突,在这种情况下,资源最终分为两部分不同的 *dpi
文件夹——有和没有 -v4
限定符;但它们实际上在同一个资源中 "bucket" 所以系统认为它们是重复的。
这个故障 确实 带来了无用的 ic_launcher.png
覆盖(实际上是碰撞——由于故障)但这种情况对其他类型来说并不是普遍的坏资源。
即有时你故意覆盖一个库的资源,这个故障仍然会导致错误消息弹出。这次资源名称没有真正的问题,所以上面的临时解决方案或阻止插件版本是可行的。
降级到 com.android.tools.build:gradle:1.1.3 解决了我的问题
我在使用第三方库时遇到了同样的问题。(RomainPiel/Shimmer-android Github 上的库)
为了解决这个问题,我将 ic_launcher.png 文件从 drawable 文件夹移到了 mipmap 文件夹。问题解决了。
升级到 1.2.3,但确保您的 gradle 和 buildToolsVersion 在您的项目和使用的 aars 中相同。
如果您使用无法控制 gradle/build 版本的外部库:
联系作者或自行查看来源。一些库有未使用的启动器图标,这将导致此冲突。删除此图标将解决您的问题。在极少数情况下,同名来源(例如 menu.xml)也可能导致此问题。一个简单的解决方法是重命名您的资源。
只需将 ic_launcher.png 重命名为其他名称(例如 ico_launcher.png)
这里是查找问题的一般方法:
运行
./gradlew build --stacktrace --info
并且您会找到错误的详细信息。
我发现了我的错误:重复的 class 导致了顶级错误,删除重复的将解决问题。
对我来说,简单的 "clean project" 和 "rebuild project" 就可以了。
关注这个linkHere
或
像这样改变。
repositories {
maven {url "https://clojars.org/repo/"}
}
dependencies {
compile 'frankiesardo:icepick:{{latest-version}}'
**provided** 'frankiesardo:icepick-processor:{{latest-version}}'
}
在我的例子中,我在 strings.xml 文件中添加了撇号 ('s)。
请检查人员是否有任何此类错误并将其删除肯定会有所帮助。
IDE 无法正确显示错误,而是使所有资源不同步,这太烦人了。
我知道问题中的情况并非如此,但错误完全相同,即 Gradle 执行失败。
只是 Rename
Image
(Rightclick on the Image, Select Refactor and select Rename
)。它将解决问题,因为问题已经出现,因为 library
之一也在使用 image
和 same name
。
我遇到了同样的问题,下面的内容对我有用:
- 重命名您的图标
- 将
tools:replace="android:icon"
添加到清单中的 <application>
标签
您可以只尝试第一步,但我在合并清单文件时仍然遇到问题。这样它应该覆盖库中使用的任何资源。
更新到最新的 gradle 插件 1.5.0 解决了这个问题。在根 build.gradle
文件
中更新以下脚本
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
}
...
}
我设法通过文件扩展名的大小写不一致触发了这个问题。我在一个 drawable 目录中有一个 .jpg 图像,但在不同的 drawable 目录中有一个相同文件名但 .JPG 的图像。文件名和目录正确,但扩展名不正确。
我在使用 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
之前它运行正常,但是因为我把类路径com.android.tools.build:gradle:1.2.2,这导致我出错
根据 Xavier Durochet's explanation on G+,这是因为您使用的其中一个库拥有自己的 ic_launcher.png
—— 他们当然不应该这样做(更多内容在底部)。
日志中提到的两个图标很可能是不同的:一个是您的,另一个很可能是有人忘记从库中删除的通用 android 图标。
要查看有问题的依赖项,请点击 Ctrl + Shift + N
两次 (对于非项目匹配)并输入 ic_launcher.png
(请参阅最后一行截屏)
要暂时解决此问题,请将 -v4
限定符添加到您的可绘制资源文件夹(或仅将 ic_launcher.png
移动到 *dpi-v4
如果你有你的理由)——解决方案归功于 Xavier Durochet。您也可以将您的图标重命名为其他名称并对 AndroidManifest.xml
真正的问题是有问题的库带有无用的图标。 有自己资源的库(比如 ActionBarSherlock 或 Google 自己的 Support v7 库)使用独特的命名方案以避免与您的资源名称冲突(abs_
、abc_
)。
启动器图标在库中没有任何业务,因此我鼓励您通知您正在使用的库的作者他们忘记删除多余的 ic_launcher.png
文件。
还值得一提,因为 Barry Carroll noted very precisely in the same discussion,这并不意味着您的资源永远不应与图书馆中的资源重叠:有很多 合法 有理由用您自己的资源覆盖库的资源(例如,更改库提供的 activity 的外观)和 gradle 插件的资源合并逻辑确实允许这样做,故意的。
只是在这种特殊情况下,当库落后于 android gradle 插件版本(1.2.2 之前)时会发生冲突,在这种情况下,资源最终分为两部分不同的 *dpi
文件夹——有和没有 -v4
限定符;但它们实际上在同一个资源中 "bucket" 所以系统认为它们是重复的。
这个故障 确实 带来了无用的 ic_launcher.png
覆盖(实际上是碰撞——由于故障)但这种情况对其他类型来说并不是普遍的坏资源。
即有时你故意覆盖一个库的资源,这个故障仍然会导致错误消息弹出。这次资源名称没有真正的问题,所以上面的临时解决方案或阻止插件版本是可行的。
降级到 com.android.tools.build:gradle:1.1.3 解决了我的问题
我在使用第三方库时遇到了同样的问题。(RomainPiel/Shimmer-android Github 上的库)
为了解决这个问题,我将 ic_launcher.png 文件从 drawable 文件夹移到了 mipmap 文件夹。问题解决了。
升级到 1.2.3,但确保您的 gradle 和 buildToolsVersion 在您的项目和使用的 aars 中相同。
如果您使用无法控制 gradle/build 版本的外部库: 联系作者或自行查看来源。一些库有未使用的启动器图标,这将导致此冲突。删除此图标将解决您的问题。在极少数情况下,同名来源(例如 menu.xml)也可能导致此问题。一个简单的解决方法是重命名您的资源。
只需将 ic_launcher.png 重命名为其他名称(例如 ico_launcher.png)
这里是查找问题的一般方法:
运行
./gradlew build --stacktrace --info
并且您会找到错误的详细信息。 我发现了我的错误:重复的 class 导致了顶级错误,删除重复的将解决问题。
对我来说,简单的 "clean project" 和 "rebuild project" 就可以了。
关注这个linkHere
或
像这样改变。
repositories {
maven {url "https://clojars.org/repo/"}
}
dependencies {
compile 'frankiesardo:icepick:{{latest-version}}'
**provided** 'frankiesardo:icepick-processor:{{latest-version}}'
}
在我的例子中,我在 strings.xml 文件中添加了撇号 ('s)。 请检查人员是否有任何此类错误并将其删除肯定会有所帮助。 IDE 无法正确显示错误,而是使所有资源不同步,这太烦人了。
我知道问题中的情况并非如此,但错误完全相同,即 Gradle 执行失败。
只是 Rename
Image
(Rightclick on the Image, Select Refactor and select Rename
)。它将解决问题,因为问题已经出现,因为 library
之一也在使用 image
和 same name
。
我遇到了同样的问题,下面的内容对我有用:
- 重命名您的图标
- 将
tools:replace="android:icon"
添加到清单中的<application>
标签
您可以只尝试第一步,但我在合并清单文件时仍然遇到问题。这样它应该覆盖库中使用的任何资源。
更新到最新的 gradle 插件 1.5.0 解决了这个问题。在根 build.gradle
文件
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
}
...
}
我设法通过文件扩展名的大小写不一致触发了这个问题。我在一个 drawable 目录中有一个 .jpg 图像,但在不同的 drawable 目录中有一个相同文件名但 .JPG 的图像。文件名和目录正确,但扩展名不正确。