【问题标题】:Ant build fails inside EclipseAnt 构建在 Eclipse 中失败
【发布时间】:2013-12-12 16:52:55
【问题描述】:

多年来,我一直使用 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 似乎自己生成了“紧缩”目录。我尝试清理我的项目并在 Eclipse 中禁用自动构建,但无济于事。

我还尝试在 Eclipse 之外执行 ant release,但这会产生相同的错误。执行ant clean release 也不起作用,因为它试图删除Eclipse 仍在使用的jar。因此,我发现唯一可行的解​​决方案是:

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

这太痛苦了,因为我们知道,重新启动 Eclipse 是一件非常痛苦的事情。此外,所有受影响的项目都需要清理,整个过程需要半个小时。我打开了issue #60496 on b.android.com,但没有听到任何官方回复。

除了硬着头皮改用 Android Studio 之外,还有什么解决办法吗?

【问题讨论】:

  • 我也看到了这一点,但仅适用于引用库项目的项目。从您提出的问题来看,对您来说似乎是一样的,尽管您在这里没有提及。你能确认是这样吗?
  • @NickT 是的,有问题的项目引用了许多图书馆项目。
  • 我一直在使用 Ant 构建多年,但我无法解决这个错误,没有任何解决方法可以为我修复它,所以我开始对此进行赏金。如果关闭 Eclipse 可以为您解决问题,那么关闭一些项目可能会为您节省一些时间吗?只是一个想法。
  • 这不是灵丹妙药,也没有真正解决您的实际问题,即 AAPT 问题,但至少可以为您省去必须退出 eclipse 的麻烦。您可以尝试使用 handle.exe(来自 pstools),这样您就可以删除文件锁定而无需退出 eclipse。 (检查timstall.com/2009/02/killing-file-handles-but-not-process.html)。我在使用 eclipse + windows 时遇到过类似的问题,这个小工具可以救命!
  • @NickT 我过去曾使用 Process Explorer 完成过此操作,但据我了解,强制关闭文件句柄可能非常危险,因为指针可能会被重新用于完全不同的文件,并且可能会损坏系统文件。我不知道这是否只是一个神话,但我宁愿不要冒更大问题的风险。至于简单地关闭项目:不,这与 Eclipse 仍然持有 jars 的问题相同。这似乎是一个错误,因为这当然不应该发生。

标签: android ant android-build


【解决方案1】:

答案就在这里:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        项目 > 清理(选择您的项目名称)

        【讨论】:

        • 如果我在 Eclipse 中清理项目并执行 ant release 我会遇到 OP 中描述的问题。如其他地方所述,在 Windows 上执行 ant clean release 是不够的,并且只有在禁用自动构建的情况下才能在 Linux 上运行。
        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

          • 问题和最佳答案中已经提到了这个解决方案。
          • 问题中提到的内容在哪里?问题说 ant clean release 不起作用。这就是全部。我的意思是禁用 Autorebuild 并从命令行使用 ant。至少我是这样做的
          • 相关问题在comment #2 中提到了该解决方案。我最初发布了这个问题,因为由于文件句柄,该特定解决方案对于 Windows 来说是不够的。我已经切换到Linux,所以我不知道文件句柄的问题是否已经解决。
          • 我知道我很困惑,因为以前的最佳答案已被所有者删除。
          【解决方案7】:

          您好,试试这条线并重新构建它。

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

              将此行添加到 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 />
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2019-02-09
                • 1970-01-01
                • 1970-01-01
                • 2019-03-04
                • 2016-05-23
                • 1970-01-01
                • 2016-03-06
                • 1970-01-01
                相关资源
                最近更新 更多