2013-12-12 65 views
16

多年來,我一直使用Eclipse的Ant集成將我的Android項目構建爲0​​。這是我最喜歡的構建發佈版本的方式,因爲我可以在Eclipse中簡單地點擊「運行外部工具」來啓動Ant構建,並在後臺運行。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 \工具\螞蟻\的build.xml:653:出現以下錯誤而執行這一行:
C:\ Android的\ Android的SDK \工具\螞蟻\的build.xml:698:空返回: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之外,是否還有解決方案?

+0

我也看到這一點,但只適用於涉及圖書館項目的項目。從你提出的問題來看,它似乎對你來說是一樣的,儘管你在這裏沒有提到它。你能證實這是事實嗎? – NickT

+0

@NickT是的,這個項目引用了大量的圖書館項目。 –

+1

我一直在使用Ant構建了很多年,但是我無法繞過這個bug,沒有任何解決方法可以解決這個問題,所以我開始對此進行獎勵。如果關閉Eclipse修復它,可能關閉一些項目會節省一些時間?只是一個想法。 – NickT

回答

0

我在Linux機器上有類似的錯誤。事實證明,aapt使用32位仿真庫,如果由於某種原因而失敗,那麼構建過程可能會在build.xml中的這個位置神祕失敗。

在我的情況下,失敗的原因是CircleCI必須將其內核修補爲在32位仿真API中將newly found vulnerability黑名單。然後,他們能夠在幾天內修補內核以消除漏洞。

0

在OSX上,我剛剛清理了項目並重建了,併爲我工作。

項目>清潔(選擇你的項目名稱)

+1

如果我在Eclipse中清理項目並執行'ant release',我遇到了OP中描述的問題。正如其他地方所描述的,在Windows上執行'ant clean release'是不夠的,只有在禁用了自動構建的情況下才能在Linux上運行。 –

0

我試過的解決方案在這裏,如:重新啓動日食,清理項目和重建,消除緊縮文件夾,再等運行ant在運行ant腳本(從eclipse)後,似乎ADT干擾並重復生成緊縮文件夾。我的解決方法是從命令行運行ant。起初,我不得不執行以下步驟來刪除文件夾緊縮:從Project菜單

  1. 禁用Build Automatically選項。
  2. 手動刪除cruch文件夾。
  3. 從命令行運行ant clean release
+0

這個解決方案在問題和頂級答案中都已經提到。 –

+0

問題中提到的是哪裏?問題說螞蟻乾淨的版本不起作用。我的意思是保持禁用Autorebuild並使用命令行中的ant。多數民衆贊成我至少如此做 – eldjon

+0

相關的問題在[評論#2](https://code.google.com/p/android/issues/detail?id=60496#c2)中提到的解決方案。由於文件句柄,我最初發布這個問題的原因是該特定的解決方案不足以滿足Windows的需要。自從我轉而使用Linux之後,我不知道文件句柄的問題是否已經解決。 –

0

嗨試試這條線,並再次建立它。

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

我也有同樣的問題。我手動刪除了圖書館的'bin'和'gen'文件夾,並嘗試過。它爲我工作。

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> 

UPDATE

它可以通過圖書館項目的build.xml添加以下行來完成。

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