轉(zhuǎn):http://m.itdecent.cn/p/8569003b3fac
前言
昨天幫我們公司的同事解決一個(gè)問題, 他開始給我弄一個(gè)eclipse版本的代碼,但是由于代碼質(zhì)量是真的不咋地,又是eclipse結(jié)構(gòu)的代碼, 所以我想給他的代碼進(jìn)行移植,導(dǎo)入成AS能夠識(shí)別的方式進(jìn)行編譯,由于我對(duì)AS的IDE解決錯(cuò)誤比較有心得,因?yàn)檫@樣做了. 但是中途出現(xiàn)一個(gè)錯(cuò)誤,這個(gè)錯(cuò)誤是從未見過的,搜遍了全網(wǎng),無論百度還是谷歌,都沒有找到我的答案, 因此我把解決方案分享給大家,希望給大家遇到這種問題時(shí),提供一個(gè)可行性的思路.
錯(cuò)誤記錄
duplicatesymbolintablewithresourcetype'id'andsymbolname' '

image.png
眾所周知, 從eclipse的代碼轉(zhuǎn)換到AS中, 肯定會(huì)出現(xiàn)各種奇葩問題, 但是作為一個(gè)很久沒碰eclipse的人,肯定不一定能夠記得之前eclipse的坑了, 但是我有信心在AS上遇到問題可以解決,但是這一次, 我發(fā)現(xiàn)它完全是沒有任何標(biāo)記可言的,下面我把解決問題的一些想法和思路都說一下,或者能夠?yàn)槟銈兲峁┙鉀Q其他類似問題提供解決方案.(大家不要覺得不耐煩, 遇到問題就要細(xì)心去留意每一個(gè)可能點(diǎn))
方案一:? 執(zhí)行run with --stacktrace
友情提示:? 新版本可能不好找到出現(xiàn)直接執(zhí)行這個(gè)的地方,大家可以試試先看方案三.那里有一些提示.

image.png
其實(shí)它完整的命令是這個(gè)gradlew --stacktrace

image.png
但是我們得到的結(jié)果是這樣, 從這個(gè)錯(cuò)誤信息來看,我們沒法通過錯(cuò)誤信息能夠直觀找出錯(cuò)誤,因此,我繼續(xù)嘗試,運(yùn)行提示出來的編譯命令

image.png
方案二:? 執(zhí)行更詳細(xì)查看錯(cuò)誤信息的命令
其中完整命令是這樣的.
gradlew --info --debug --stacktrace
我們得到的結(jié)果是這樣的

image.png
方案三: 執(zhí)行build命令,如下圖所示
打開AS右邊的側(cè)邊欄Gradle

image.png
很多新手朋友,更新AS 3.2以上的版本 ,發(fā)現(xiàn)方案一和方案二的命令再也找不到了.其實(shí)這個(gè)命令執(zhí)行之后,? 你會(huì)發(fā)現(xiàn), 確實(shí)可以完全顯示出來.? 不信,你看下圖.

image.png
從以上的錯(cuò)誤信息看來,我們還是無法直接找出錯(cuò)誤信息,
Duplicate symbol in table with resource type 'id' and symbol name ' '
心里真的無語了 ,為什么這個(gè)錯(cuò)誤這么坑? TMD ,氣死我了, 老子去百度,谷歌 行了吧?
結(jié)果百度谷歌一圈后, 泄氣了, 完全沒法解決啊,他們的方法和我都不一樣,怎么辦?
強(qiáng)迫自己冷靜下來,從錯(cuò)誤信息提示,唯一能夠確定的是資源文件錯(cuò)了問題, 至于是哪個(gè)資源文件出錯(cuò), 我們還無法確定.因?yàn)槲覀兏鶕?jù)提示的錯(cuò)誤. 我想出了一個(gè)最笨也是最有效的方法. 那就是一個(gè)個(gè)排查.
AS是在執(zhí)行task ':app:processDebugResources'這個(gè)任務(wù)時(shí),檢查出錯(cuò),那么我們就把a(bǔ)pp module的res文件夾下的每個(gè)文件夾進(jìn)行排查.
具體操作如下:
先把所有的res文件夾下的內(nèi)容全部復(fù)制到其他地方,然后把res目錄下的文件夾全部刪除, 然后復(fù)制每復(fù)制一個(gè)剛剛放在其他地方的某一個(gè)文件夾,粘貼到app module下的res文件夾,然后我們執(zhí)行一次processDebugResources這個(gè)命令.
提示:processDebugResources這個(gè)命令在側(cè)邊欄的Gradle里面,如下圖所示

找到other節(jié)點(diǎn)打開.png

需要執(zhí)行的命令.png
每復(fù)制一個(gè)文件夾之后,就執(zhí)行一次,直到出現(xiàn)相同的錯(cuò)誤,就可以確定,你復(fù)制的文件夾內(nèi)部有文件夾是有錯(cuò)誤的,因此可以通過剛剛我們逐個(gè)排查的思路,用同樣的方式排查.
最終,我們找到出錯(cuò)的結(jié)果是,因?yàn)椴季治募?在同一個(gè)布局文件中,有相同的Id 命名, 導(dǎo)致編譯報(bào)錯(cuò),這種錯(cuò)誤在AS開發(fā)的話,肯定不會(huì)出現(xiàn),因?yàn)槟阋粚?就會(huì)報(bào)錯(cuò), 真的是為寫這個(gè)代碼的前輩感到捉急.因此,要學(xué)習(xí)安卓開發(fā),就要選AS,不然 ,eclipse的規(guī)范 ,可能真的不敢恭維.
最后我們總結(jié)一下,遇到AS的IDE出錯(cuò),也許會(huì)出現(xiàn)很多種情況,一定要留心去觀察, 一定要注意統(tǒng)一性,別以為事小,不放在心上, 后面出現(xiàn)的問題,可能讓你束手無策.