在Eclipse中Ant构建失败

16
多年来,我一直使用Eclipse的Ant集成来构建我的Android项目,如Google在文档页面上所述。这是我最喜欢的构建发布版本的方式,因为我只需在Eclipse中点击“运行外部工具”即可开始Ant构建,并在后台运行。
自从最近出现了以下错误(我相信是ADT 22.0或22.1):
[echo] Handling Resources...
[aapt] Generating resource IDs...
[aapt] invalid resource directory name: C:\path\to\project\bin\res/crunch

构建失败
C:\Android\android-sdk\tools\ant\build.xml:653: 在执行此行时发生以下错误:
C:\Android\android-sdk\tools\ant\build.xml:698: 返回 null:1

我不确定原因是什么,因为 AAPT 似乎会自动生成“crunch”目录。 我已尝试清理项目并在 Eclipse 中禁用自动构建,但都无济于事。

我还尝试在 Eclipse 外部执行 ant release,但是出现了相同的错误。执行ant clean release也不起作用,因为它会尝试删除仍由 Eclipse 使用的 JAR 文件。 因此,我唯一发现的可行解决方案是:

  1. 退出 Eclipse
  2. 等待进程结束
  3. 执行 ant clean release

这非常痛苦,因为我们知道重新启动 Eclipse 很麻烦。 此外,所有受影响的项目都需要清理,这使整个过程需要长达半小时。 我已经在b.android.com上开了问题#60496,但没有听到任何官方回复。

除了咬紧牙关转换到 Android Studio,是否有其他解决方法?


@NickT 是的,所涉及的项目引用了许多库项目。 - Paul Lammertsma
1
我已经使用Ant构建工具很长时间了,但是我无法理解这个错误,所有的解决方法都不能解决它,所以我要在这上面开启赏金。如果关闭Eclipse可以解决问题,那么关闭一些项目会节省你一些时间吗?只是一个想法。 - NickT
@NickT 我以前用过Process Explorer做过这个,但据我所知,强制关闭文件句柄可能非常危险,因为指针可能会被重新用于完全不同的文件,并可能损坏系统文件。我不知道这是否只是一个神话,但我宁愿不冒更大的风险。至于简单地关闭项目:不行,这与Eclipse仍然持有jars的问题相同。看起来这是一个错误,因为这肯定不应该发生。 - Paul Lammertsma
在错误信息中提到的行附近的build.xml文件中有什么内容? - Harald
我的解决方案是将bin和gen文件夹进行shift+delete操作,然后重新构建。但这仍然很麻烦。 - dieend
显示剩余3条评论
9个回答

5

2

0
将此行添加到custom_rules.xml文件的顶部。
<delete dir="../YourLibraryName/bin/res/crunch"/>

如果没有custom_rules.xml文件,创建一个并将其放入文件中。将custom_rules.xml放置在您的项目目录中。
<?xml version="1.0" encoding="UTF-8"?>

<project name="imported" >

<delete dir="../YourLibraryName/bin/res/crunch"/>

</project>

更新

可以通过在库项目的build.xml文件中添加以下行来完成。

   <delete dir="${out.absolute.dir}"/res/crunch />

0

嗨,尝试这行代码并重新构建。

rm -fR $(find . -type d -name crunch|xargs)

0

我尝试了这里的解决方案,例如:重新启动eclipse、清理项目并重新构建、删除crunch文件夹并再次运行ant脚本等。在运行ant脚本(从eclipse)后,似乎ADT会干扰并重复生成crunch文件夹。对我来说,解决方法就是从命令行中运行ant。最初,我必须执行以下步骤来删除crunch文件夹:

  1. Project菜单中禁用Build Automatically选项。
  2. 手动删除cruch文件夹。
  3. 从命令行中运行ant clean release

这个解决方案已经在问题和最佳答案中提到了。 - Paul Lammertsma
问题中提到了吗?问题说ant clean release不起作用。就这些了。我的观点是保持Autorebuild禁用并使用命令行中的ant。至少我是这样做的。 - eldjon
相关问题提到了在评论#2中的解决方案。我最初发布这个问题是因为那个特定的解决方案对于Windows来说不够用,因为文件句柄的原因。我现在已经转换到Linux,所以我不知道文件句柄的问题是否已经解决。 - Paul Lammertsma
我看到我很困惑,因为前任最佳答案已被所有者删除。 - Paul Lammertsma

0
在OSX上,我只是清理了项目并重新构建,这对我起作用了。
项目 > 清理(选择你的项目名称)

1
如果我在Eclipse中清理项目并执行ant release,我会遇到OP中描述的问题。正如其他地方所述,在Windows上执行ant clean release是不够的,只有在Linux上禁用自动构建才能起作用。 - Paul Lammertsma

0

我在Linux机器上遇到了类似的错误。原来aapt使用32位模拟库,如果它们由于某种原因失败,则构建过程可能会在build.xml的此位置神秘地失败。

在我的情况下,失败的原因是CircleCI必须修补其内核以在32位模拟API中黑名单新发现的漏洞。然后他们能够在几天内修补他们的内核以消除漏洞。


0
如果您正在使用命令行运行ant,请使用命令“ant clean release”而不是仅使用“ant release”。 如果您正在使用eclipse,请禁用自动构建,删除crunch文件夹,然后执行ant 更多信息: {{link1:http://pissedoff-techie.blogspot.in/2014/07/android-build-fails-with-ant-on-eclipse.html}}

0

我也遇到了同样的问题。我手动删除了库中的“bin”和“gen”文件夹,然后尝试了一下。这对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接