Eclipse内部的Ant构建失败

时间:2013-12-12 16:52:55

标签: android ant android-build

多年来,我使用Eclipse的Ant集成来构建我的Android项目outlined by Google on this documentation page。这是我最喜欢的构建发布版本的方法,因为我可以在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
  4. 这是令人难以忍受的,因为我们知道,重启Eclipse是一种巨大的痛苦。此外,所有受影响的项目都需要清理,这使整个过程需要半个小时。我已经开了issue #60496 on b.android.com,但没有听到任何官方回应。

    除了咬紧牙关并切换到Android Studio之外,还有其他解决方案吗?

9 个答案:

答案 0 :(得分:5)

答案在这里:

http://pissedoff-techie.blogspot.in/2014/07/android-build-fails-with-ant-on-eclipse.html

  1. 禁用autobuild。
  2. 删除crunch文件夹。
  3. 运行ant script。
  4. 重新启用自动构建。

答案 1 :(得分:2)

同样来自https://code.google.com/p/android/issues/detail?id=60496,我刚刚删除了项目中的gen / *和bin / *以及它的引用库。它奏效了。

答案 2 :(得分:0)

我在Linux机器上遇到类似的错误。事实证明,aapt使用32位仿真库,如果由于某种原因它们失败,那么构建过程可能会在build.xml中的这个位置神秘地失败。

在我的情况下,失败的原因是CircleCI必须将其内核修补为在32位仿真API中将newly found vulnerability列入黑名单。然后,他们可以在几天内修补内核以消除漏洞。

答案 3 :(得分:0)

在OSX上我刚刚清理了项目并重建了,这对我有用。

项目>清理(​​选择项目名称)

答案 4 :(得分:0)

如果从命令行使用命令运行ant ' ant clean release'而不只是'释放'#。 如果您正在使用eclipse禁用autobuild删除crunch文件夹然后执行ant 更多信息 : http://pissedoff-techie.blogspot.in/2014/07/android-build-fails-with-ant-on-eclipse.html

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

您可以尝试这一行并重新构建它。

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

答案 7 :(得分:0)

我也有同样的问题。我手动删除了库的'bin'和'gen'文件夹并尝试过。它对我有用。

答案 8 :(得分: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 />