http://blog.renren.com/blog/232067201/494816115
【Android|安装APP损坏,出现[INSTALL_FAILED_DEXOPT]的解决办法】今天下午,我在打开whatsapp的时候,破玩意儿又提示我有新版本要不要更新,于是我选择了Yes。经过缓慢的安装之后,忽然提示我installed unsuccessful。我一下脑袋就大了,我是安装的没有修改的官方包,更新又是自动下载的,为什么还会出现这种情况?
于是我怀疑可能是官方更改了证书,所以需要卸载之后重新安装。于是我打开Drawer准备重新启动whatsapp。没想到虽然whatsapp的图标出现在drawer里面,但是启动的时候却提示我没有安装这个app!
这还了得,于是我将whatsapp卸载了,然后试图重新安装新版。还是提示我不能安装!
于是我使用adb再次尝试安装,提示我[INSTALL_FAILED_DEXOPT],Google之后发现dexopt根本就不是一个单词,应该是dex和optimize的合成缩写。那么有可能是apk文件包里面的dex文件损坏,于是我把它反编译了出来,尝试重新编译。但是不知道这个东西是用什么编译的,smali根本就不能重新编译回去……只能作罢。
所以假设问题还是出现在手机端。Google了一下,发现这个问题应该是出现在生成dex文件时候发生的错误,但是能搜索到的结果有许多是说由于G1机身空间太小导致的,显然同样的问题不可能出现在刚刚做完app2sd的milestone上面。但是我搜索到了一个如果强制完全卸载app的文章,里面介绍了安装app之后,相关文件分布的路径。
所以我的思路就很清晰了,首先完全卸载,再行安装。
经过试验,发现果然可行!那么提炼一下,可以得出这类问题的通用解决思路。
假设该app名为ketech,安装包名为ketech.apk。
查看/data/app里面是否有名称包含ketech的apk或zip包,有可能为类似com.android.ketech.apk或com.android.ketech.zip的形式,有则删掉。
查看/data/app-priviate里面是否有名称包含ketech的apk,名称形式同上,有则删掉。(做了app2sd的朋友可能还需要查看一下app2sd文件夹里面是否含有此apk包)
查看/data/data下面是否有名称包含ketech的文件夹,名称形式类似于com.android.ketech,有则删掉。
查看/data/system下面的package.xml文件,将包含ketech的项目删掉。
Wipe Dalvik缓存。(方式多样,有些openrecovery自带,就不进行详细解释了)
重新安装即可。 希望能够帮到跟我一样倒霉的朋友。