Error executing aapt: Return code -1073741819

原文網址

總會有讓人噴血的事情勾起寫博客的慾望,希望能堅持。
折騰了兩天的是個小問題,就是標題上的Error executing aapt: Return code -1073741819。解決的方法也很簡單參考1中所述,只是去掉項目styles.xml中的@+id項就好了。我在下面記錄解決問題的悲慘過程。
1.出現問題
環境是win7系統下eclipse3.7(最新的android打包下載的SDK也類似)。項目比較繁雜,簡單介紹下情況:由多個工程構成整個項目,其中主工程依賴於其他工程,而其他工程作爲庫(勾選了isLibrary)相互也有依賴。獨立編譯庫工程或者加上依賴庫編譯都是沒有問題。自己在此次折騰前,出現過一次R.java文件無法生成導致主工程無法編譯,後來不知刪了什麼又奇怪的好了,就沒在意,結果一次update讓主工程再也沒有能順利編譯通過。
2.查找原因
(1)工程編碼格式
原來都能編譯通過,那麼問題應該出在變化的地方。我修改的工程原來是GBK編碼的,而爲了統一,後面修改爲UTF-8編碼,。會不會問題在這上面。先將項目改回GBK編碼,能夠發現R.java文件會重新生成,當然,主工程沒有變化,問題依舊。爲了確認確實完成了編碼,可以通過工程屬性查看,還可以到工程所在目錄下的.setting文件夾中查看org.eclipse.core.resources.prefs文件,如果是UTF-8,會有如下:encoding/=UTF-8,而且單獨某個文件會有encoding//src/XXX.java=UTF-8的記錄;爲了確認,故意將一文件中用兩種編碼方式都寫了漢字,結果沒有錯誤信息提示,放棄。但是要注意的是,如源文件編碼格式不對,會直接編譯不通過的。
(2)aapt
R.java文件是由aapt.exe產生的,查看下它的錯誤信息(編譯環境裏就是R文件沒生成,沒啥提示。默認的build output是slient的),於是windos->preferences–android-build,選擇verbose,然後clean工程,在console中選擇android查看編譯過程,居然每次new resource id時出現類似 ‘aapt’ error. Pre Compiler Build aborted的錯誤,但是也沒有失敗的提示信息,而且開始出現了aapt已停止運行的對話框,提示你發送信息。在網上搜索了下,據說是當aapt打開-v開關(verbose模式下)會有這種問題。嘗試的在停止的xml資源文件附近刪除或者修改,問題依舊,再次放棄。但是換個思路,直接自己通過命令行嘗試,而且在eclipse中已經給出了使用的命令。在命令行中問題依舊,也沒有錯誤提示信息。
(3)資源衝突
期間發現了個strings.xml文件中資源衝突卻沒報錯的問題,想着會不會是資源過多有衝突,還是直接溢出了。從網上說的貌似每種資源下都可以達到65536,沒去細想。但是把資源文件往一處合了下,確實出現了命名衝突的資源。但是據網上查閱,和前期查看,主工程的R文件是每個工程下都會有一個,也就是說每一個工程都有一個包名,那麼對應的會有一個R.java,那麼即使兩個工程的資源命名衝突了也會因爲在不同的包中而不會造成衝突的。不死心的專門寫了重名的資源,依然無果。
3.解決問題
有直接查看aapt源碼的衝動,搜了下居然沒有多少人分析,想起自己改adb限制的時候,覺得沒錯誤提示找原因那是大海撈針呢。然後決定下載新環境重新編譯。新環境的好處是給了好多Error executing aapt: Return code的提示,趕緊搜索,發現很多提示styles.xml文件下+id的影響,但是沒當會事,因爲如果真有問題,爲什麼之前都能編譯通過呢?應該不會,沒有在意。最後實在無法,才嘗試下居然解決。當真的讓人想不通。有時間了看看源碼,而且真的有人都報過bug,難道一直沒改?就像打開-v的aapt編譯錯誤的問題,優先級太低了,不影響使用?不得而知了。
R.java文件還得從資源文件上找錯誤原因,別扯遠,希望以後能找到問題到底出在哪裏。。。

發佈了141 篇原創文章 · 獲贊 166 · 訪問量 111萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章