
I.背景
事情是這樣,一個(gè)同事更新替換了一個(gè)第三方合作商的aar包,并且push到了服務(wù)器,我pull下來(lái)后可以正常編譯打包出apk,似乎一切都是正常的,但是當(dāng)我打開(kāi)用到這個(gè)aar包里的某些類(lèi)的類(lèi)時(shí)發(fā)現(xiàn)有些地方紅色的,鼠標(biāo)放上去提示:“Cannot resolve symbol XXX”。
II.現(xiàn)象
Android Studio 無(wú)法識(shí)別同一個(gè) package 里的其他類(lèi),或者無(wú)法識(shí)別某些方法,將其顯示為紅色,但是 compile 沒(méi)有問(wèn)題。鼠標(biāo)放上去后顯示 “Cannot resolve symbol XXX”,重啟 Android Studio,重新 sync ,Clean build 都沒(méi)有用。
III.原因
- 一個(gè)原因可能是因?yàn)?Android Studio 之前發(fā)生了錯(cuò)誤,某些 setting 出了問(wèn)題;
- 替換的aar包沒(méi)有更新版本號(hào),導(dǎo)致AS識(shí)別到的是本地緩存的版本(我遇到的就是這個(gè)場(chǎng)景),但是 compile 的時(shí)候使用的是正確的版本,所以就出現(xiàn)了有些類(lèi)或者方法提示無(wú)法識(shí)別但還是可以正常編譯打包。
打開(kāi)這個(gè)類(lèi)提示 .class 文件與 .java 文件不匹配。
IV.解決方法
這看起來(lái)是緩存引起的錯(cuò)誤,那就清空緩存試試唄。
點(diǎn)擊菜單中的 “File” -> “Invalidate Caches / Restart”,然后點(diǎn)擊對(duì)話框中的 “Invalidate and Restart”,清空 cache 并且重啟。等待重啟后基本上剛才的錯(cuò)誤就沒(méi)有了。
如果還是沒(méi)有解決,那可以嘗試將依賴先去掉,sync gradle,接著再將依賴添加回來(lái),sycn gradle,這個(gè)時(shí)候多半就正常了,我的環(huán)境就需要第二步才正常。
V.本地緩存
我們知道,當(dāng)通過(guò)gradle構(gòu)建項(xiàng)目時(shí),會(huì)將一些遠(yuǎn)程依賴緩存到本地,默認(rèn)的緩存目錄如下:
- Mac OS:
/Users/username/.gradle/caches - Windows:
C:\Users\username\.gradle\caches
如果你不想用上面的解決方法,也可以嘗試直接到文件系統(tǒng)刪除相應(yīng)的緩存文件,只不過(guò)這種方式我沒(méi)有實(shí)踐過(guò)。