安卓解決資源文件錯(cuò)誤的終極解決方案(很有效)

轉(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)的問題,可能讓你束手無策.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容