Bug 出现

事情是这样的,昨天早晨我正做着项目,坐在我旁边的小伙伴呼唤了我一下,说项目运行不起来了。

我纳闷着,前天的时候还好好的,怎么过了一晚就出问题了。我问他是不是改了什么配置,或者添加了什么东西。他说,没有啊,刚打开 AndroidStudio,运行就报错,昨天晚上还是好的。

Bug 真身

好吧,我也没多想,看了下报错的 log 提示,额,没见过。怎么办?直接stackoverflow一下吧!

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

首先,在stackoverflow上试着搜了下“Could not read entry ':xxx:packageDebug' from cache taskArtifacts.bin”,无果。
那好删点内容,继续搜“Could not read entry from cache taskArtifacts.bin”。还是无果,那好,来看看是不是配置改动了。

对比了下两台机器上项目中所有和项目构建相关的配置文件,我这边是好的啊,那按我这边的来。改完后,重新编译,运行,依旧报错。

这都折腾十几分钟了,果断不能忍了。仔细看看报错的提示信息:“Could not read entry ':xxx:packageDebug' from cache taskArtifacts.bin.”。这里说的不能从什么 bin 中读取 entry。嗯,那应该可能是文件坏了,读不了;或者权限变化了,不让读了。

OK,这好办,让我看看你的属性。一看,想简单了,属性中看不出什么异常。那好,用我机器上的给你替换了,这回该行了吧!于是将整个“.gradle”文件夹替换掉,我再试。额,还不行。

Debug 三板斧

网上找不到解决方案(当然没有 Google 试一下),试了这么久又没见效果。咋办?好吧!逼我使出杀手锏 —— 重装、重启、还原,对就是我以前修电脑的那套。

重装,在这里用不好,为什么?因为其他的项目是好用的,说明 AndroidStudio 应该没“坏”。
重启,这个可以试一下。说干就干,把 AndroidStudio 关了,重新打开,一个样,还是报同样的错。
只剩下还原大法没用了,这个貌似也不符合目前的场景啊(不到那一步我可不想重新从仓库 down 代码来构建个新工程,这是“下策”,有木有)。

重整旗鼓再战

第一招杀手锏失效了,不怕,我可不是程咬金,就这三板斧。虽然,还有很多招数没有使出来,但我知道,该坐下来好好分析下问题了。下面,看看我的分析思路:

  1. 定位报错位置,这好办,就是这个taskArtifacts.bin
  2. 查看报错原因,Could not read entry ...
  3. 综合上述现象,推测可能的原因 —— 不能从这个什么 bin 中读出东西来(这还用你说,人家就是这样提示的,呵呵)
  4. 等一下,少了个关键点,这个文件是哪里来的

想到这,我有点眉目了。这个文件不是我们自己写的,是工具帮我们生成的(这个我没有深入研究是哪个工具生成的,姑且认为是 AndroidStudio 中的某个工具吧)。那问题来了,既然都不是我写的,你给我报错,那应该是你生成的时候出问题了(相信大家以前在使用 Eclipse 的时候都遇到过 R 文件不存在的问题,想想这个一般都是怎么解决的)。那好那我让你重新给我生成一下,这下该可以了吧!

要怎么让 AndroidStudio 给我们重新生成这个 taskArtifacts.bin 是个问题。为什么这么说?因为很显然重新编译的时候这个文件没有更新的说,至少目前现象来看,它没有更新。这也好办,我把你全部删了,这回该给我生成新的了吧!

Bug 解决

没错,把项目中 .gradle 文件夹下面的所有内容删除,然后 clean 一下项目,就好了。如下图:

说明:到这里,本文应该告一段落了。虽然最后解决了问题,但是却有个不爽的事 —— 自始至终没找出问题出在哪里。

当时也没有截图,只是保存了当时报错的信息。我想还是应该记录一下这个问题,为减少以后再采坑里去。

下面,我演示一下如何模拟复现这个问题,权当是一次记录。

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

定位到 taskArtifacts.bin,修改属性,将其改为只读属性

错误复现


这里请不要较真,当时的场景已经没有办法复现,这里仅仅是模拟...

解决问题

在这里只要把只读属性去掉就好了。

说明:这里想提醒自己,以后要是遇到类似的问题,首先要仔细阅读错误 log 提示,然后,冷静思考问题出现的可能原因,不要过于依赖搜索引擎,要养成勤思考的习惯。

[Android]解决 Could not read entry xxx from cache taskArtifacts.bin的更多相关文章

  1. Android studio 编译失败Error:Could not read entry ':app:processDebugManifest' from cache taskArtifacts.b

    Android studio 编译失败 Error:Could not read entry ':app:processDebugManifest' from cache taskArtifacts. ...

  2. android ReactNative之Cannot find entry file index.android.js in any of the roots

    android ReactNative之Cannot find entry file index.android.js in any of the roots 2018年04月02日 14:53:12 ...

  3. [Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换

    [Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换 问题现象: 碰到一个问题,UI交互表现为:联通号码在3gwap网络环境下资源一直无法下载成功. 查看Log日志,打印出 ...

  4. mysql 出现Duplicate entry ‘xxx’ for key ‘PRIMARY’,一个自增字段达到了上限,

    mysql 出现Duplicate entry 'xxx' for key 'PRIMARY',一个自增字段达到了上限,

  5. Android编译异常` Cause: duplicate entry: META-INF/MANIFEST.MF`

    目录 Android编译异常Cause: duplicate entry: META-INF/MANIFEST.MF 解决方案2: 治标又治本(暂无) 解决方案1: 治标不治本(还原大法) 参考资料 ...

  6. ASMCMD报错解决:sh: /u01/app/11.2.4/grid/bin/clsecho: No such file or directory

    sh: /u01/app/11.2.4/grid/bin/clsecho: No such file or directory 在登录asmcmd时报此错误,尝试解决,刷新oracle_sid也不行 ...

  7. Android开发 解决Installation failed due to XXX 问题

    报错信息 Android studio 安装app的时候以下报错 Installation did not succeed. The application could not be installe ...

  8. 【转】Android adb shell操作时出现“ XXX ... Read-only file system”解决办法--不错

    原文网址:http://blog.csdn.net/whu_zhangmin/article/details/25364349 手机连接PC后 adb shell su rm -r /system/a ...

  9. Android APP打包时,出错:"XXX" is not translated in "af" (Afrikaans), "am" (Amharic), "ar" (Arabic).....

    "app_name" is not translated in "af" (Afrikaans), "am" (Amharic), &quo ...

随机推荐

  1. Android Studio 代码混淆(你真的会混淆吗)

    一.前言 今天要打包新产品,突然忘了混淆的参数是怎么写的了,虽然之前也混淆过,可是具体配置的参数代码有些记不起来了,因此决定花点时间写篇博客记录一下,方便以后查找和自己的记忆. 二.Android S ...

  2. POSTGRESQL 导入导出

    安装postgresql yum install postgresql postgresql-server mysql占用端口3306 pgsql是5432 2 导入整个数据库 psql -U pos ...

  3. python raw string

    path = r'C:\a\b\c.txt' r'字符串' 是raw 字符串的意思, 其中的字符串不会转义,即不解释 \ . 作用之一:可以用来保存Windows的路径,直接从资源管理器复制来粘贴,不 ...

  4. C语言的内存四区模型和函数调用模型

    首先是操作系统将代码程序加载到内存中 然后将内存分为4个区 栈区,程序的局部变量区,函数传递的参数,由编译器自动进行内存资源的释放. 堆区,动态内存申请,如果不手动释放内存,则这块内存不会进行析构. ...

  5. win8、win10下卸载程序报错误2502、2503的解决办法

    首先打开任务管理器,可以通过右键点击桌面上的任务栏打开任务管理器,也可以通过同时按下键盘上的Ctrl+Alt+Delete键打开任务管理器. 打开任务管理器后,切换到“详细信息”选项卡,找到explo ...

  6. 获取.net对象的属性集

          int count = System. ComponentModel.TypeDescriptor .GetProperties( StudyInfo).Count ;           ...

  7. POJ1986(LCA应用:求两结点之间距离)

    Distance Queries Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 11304   Accepted: 3985 ...

  8. javascript 中的深复制 和 其实现方法

    首先,我们需要明白什么是深复制(侧重指对象方面)? 在javascript中,复制分为浅复制和深复制,个人理解,浅复制就是直接将引用复制,复制前后的两个对象指向同一个内存地址,对其中一个进行操作,另外 ...

  9. Html.Partial 和 Html.RenderPartial 、Html.Action 和 Html.RenderAction区别

    Html.Partial 和 Html.RenderPartial不需要为视图指定路径和文件扩展名.因为运行时定位部分视图与定位正常视力使用的逻辑相同.RenderPartial不是返回字符串,而是直 ...

  10. python2 + selenium + eclipse 中,通过django生产数据库表的时候报错

    python2 + selenium + eclipse 中,通过django生产数据库表的时候报错 解决: 1.查看自己电脑中,“开始-->控制面板-->管理工具-->服务--&g ...