解決 Could not read entry xxx from cache taskArtifacts.bin

Bug 示意圖

Bug 出現(xiàn)

事情是這樣的,昨天早晨我正做著項目,坐在我旁邊的小伙伴呼喚了我一下,說項目運行不起來了。

我納悶著,前天下班的時候還好好的,怎么過了一晚就出問題了。我問他是不是改了什么配置,或者添加了什么東西。他說,沒有啊,剛打開 AndroidStudio,運行就報錯,昨天晚上還是好的。

Bug 真身

好吧,我也沒多想,看了下報錯的 log 提示,額,沒見過。怎么辦?直接百度一下吧!

Error:Could not read entry ':xxx:packageDebug' from cache taskArtifacts.bin (xxx.gradle\2.10\taskArtifacts\taskArtifacts.bin).
com.android.build.gradle.tasks.PackageApplication$DexPackagingPolicy

開始 Debug

首先,在百度上(鄙視我吧,我就是用百度搜的...哈哈)試著搜了下“Could not read entry ':xxx:packageDebug' from cache taskArtifacts.bin”,無果。
那好刪點內(nèi)容,繼續(xù)搜“Could not read entry from cache taskArtifacts.bin”。還是無果,那好,來看看是不是配置改動了。

對比了下兩臺機器上項目中所有和項目構(gòu)建相關(guān)的配置文件,我這邊是好的啊,那按我這邊的來。改完后,重新編譯,運行,依舊報錯。

這都折騰十幾分鐘了,果斷不能忍了。仔細(xì)看看報錯的提示信息:“Could not read entry ':xxx:packageDebug' from cache taskArtifacts.bin.”。這里說的不能從什么 bin 中讀取 entry。嗯,那應(yīng)該可能是文件壞了,讀不了;或者權(quán)限變化了,不讓讀了。

OK,這好辦,讓我看看你的屬性。一看,想簡單了,屬性中看不出什么異常。那好,用我機器上的給你替換了,這回該行了吧!于是將整個“.gradle”文件夾替換掉,我再試。額,還不行。

Debug 三板斧

網(wǎng)上找不到解決方案(當(dāng)然沒有 Google 試一下),試了這么久又沒見效果。咋辦?好吧!逼我使出殺手锏 —— 重裝、重啟還原,對就是我以前修電腦的那套。

重裝,在這里用不好,為什么?因為其他的項目是好用的,說明 AndroidStudio 應(yīng)該沒“壞”。
重啟,這個可以試一下。說干就干,把 AndroidStudio 關(guān)了,重新打開,一個樣,還是報同樣的錯。
只剩下還原大法沒用了,這個貌似也不符合目前的場景?。ú坏侥且徊轿铱刹幌胫匦聫膫}庫 down 代碼來構(gòu)建個新工程,這是“下策”,有木有)。

重整旗鼓再戰(zhàn)

第一招殺手锏失效了,不怕,我可不是程咬金,就這三板斧。雖然,還有很多招數(shù)沒有使出來,但我知道,該坐下來好好分析下問題了。下面,看看我的分析思路:

  1. 定位報錯位置,這好辦,就是這個taskArtifacts.bin
  2. 查看報錯原因,Could not read entry ...
  3. 綜合上述現(xiàn)象,推測可能的原因 —— 不能從這個什么 bin 中讀出東西來(這還用你說,人家就是這樣提示的,呵呵)
  4. 等一下,少了個關(guān)鍵點,這個文件是哪里來的

想到這,我有點眉目了。這個文件不是我們自己寫的,是工具幫我們生成的(這個我沒有深入研究是哪個工具生成的,姑且認(rèn)為是 AndroidStudio 中的某個工具吧)。那問題來了,既然都不是我寫的,你給我報錯,那應(yīng)該是你生成的時候出問題了(相信大家以前在使用 Eclipse 的時候都遇到過 R 文件不存在的問題,想想這個一般都是怎么解決的)。那好那我讓你重新給我生成一下,這下該可以了吧!

要怎么讓 AndroidStudio 給我們重新生成這個 taskArtifacts.bin 是個問題。為什么這么說?因為很顯然重新編譯的時候這個文件沒有更新的說,至少目前現(xiàn)象來看,它沒有更新。這也好辦,我把你全部刪了,這回該給我生成新的了吧!

Bug 解決

沒錯,把項目中 .gradle 文件夾下面的所有內(nèi)容刪除,然后 clean 一下項目,就好了。如下圖:

.grdle 文件夾
clean 項目

說明:到這里,本文應(yīng)該告一段落了。雖然最后解決了問題,但是卻有個不爽的事 —— 自始至終沒找出問題出在哪里。

當(dāng)時也沒有截圖,只是保存了當(dāng)時報錯的信息。我想還是應(yīng)該記錄一下這個問題,為減少以后再采坑里去。

下面,我演示一下如何模擬復(fù)現(xiàn)這個問題,權(quán)當(dāng)是一次記錄。

在文件夾中定位到 taskArtifacts.bin 文件

定位到 taskArtifacts.bin

修改屬性

將其改為只讀屬性

錯誤復(fù)現(xiàn)

這里請不要較真,當(dāng)時的場景已經(jīng)沒有辦法復(fù)現(xiàn),這里僅僅是模擬...


錯誤復(fù)現(xiàn)

解決問題

在這里只要把只讀屬性去掉就好了。

說明:這里想提醒自己,以后要是遇到類似的問題,首先要仔細(xì)閱讀錯誤 log 提示,然后,冷靜思考問題出現(xiàn)的可能原因,不要過于依賴搜索引擎,要養(yǎng)成勤思考的習(xí)慣。

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

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,234評論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,662評論 19 139
  • 在我推送出文章《金庸,“浪漫情懷與現(xiàn)實世界”完美結(jié)合的第一人》文章,有帥哲隨即給我發(fā)來一篇文章,題為《金庸拋棄發(fā)妻...
    冷眼魯娜閱讀 666評論 2 3
  • 我呢,應(yīng)該算得上是個不愛說話的人。雖然視情況看對手,有時會變得口若懸河,不過平常卻是悶葫蘆一個。也害怕詳盡地說明什...
    安筱哥閱讀 296評論 0 0
  • 今天阿海和我說他放棄了美國常青藤名校的機會,繼續(xù)留在魔都。 我聽了下巴都要掉下來了,只有我知道他有多努力。有...
    代言炎閱讀 317評論 5 2

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