简述

Android在发布安装APK时出现了[INSTALL_FAILED_INSUFFICIENT_STORAGE]这个错误。开始以为是自己Android设备有问题,因为我使用的Android设备是定制的,Nand flash很小,不过看了下内部flash空间还剩下40M,安装这个APK应当不会出错才对。于是重新烧写了一遍Android系统后,再尝试安装该APK,还是不能。

解决

从SD卡槽插入一张8G的SD卡,然后修改App的AndroidManifest.xml文件,加上android:installLocation=”preferExternal”:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.suxiang.leaddetect"    android:installLocation="preferExternal" >  // add this sentence to avoid [INSTALL_FAILED_INSUFFICIENT_STORAGE] failure.

之后再发布,就ok了。

一些分析

修改AndroidManifest.xml的作用

其实就是将APK强制安装在外部存储设备中。这个bug应当是Google一直存在的,报的人特别多,但Google貌似保持沉默,所以将apk安装到外部存储设备只是一种变通机制,却不是根本解决之道。

如果是使用模拟器

个人习惯,我一般都在Android设备上直接调试了,所以不用模拟器。如果使用模拟器出现这个error,可以调大模拟器的内存。

root case

导致这个erroe出现的根本原因,应当是在更新apk时导致。

Android apk更新原理

如首次发布时,apk安装在:
/data/app/-1.apk (1.apk)
更新这个apk时,会类似于用另外一个名字来更新(不直接覆盖第一个,而第一个先要作为备份,是因为有可能更新失败):
/data/app/-2.apk (2.apk)
更新成功后再将1.apk删除,如果下次再更新,将会用1.apk替换2.apk,这样反复。
导致以上error的情况是,在2.apk更新完成时,删除掉1.apk失败,那么在/data/app中就有两份apk的备份了,这样下次再更新这个apk,就会失败。(这个分析也是看到别人提供的,不过我特意重烧了Android系统,然后第一次发布apk也会失败,感觉还是有另外的原因……)
针对于这种情况,解决方式当然是想办法删除掉那两个apk的备份了:

adb shell "pm uninstall <full.packge.name>"adb shell "rm -rf /data/app/<full.package.name>-*"

或者直接删除掉下面这两个:

/data/app/<full.package.name>-1.apk/data/app/<full.package.name>-2.apk

查看/data中内容

cd /datals -a -l -R

有人查看/data的内容到底都被谁占了,发现/data/klog使用了,然后删除掉klog内容就ok了。不过我的/data中本来就没有任何东西……

重启大法

当然,有时候可能是系统一些异常引起,一般都会重启看看就知道了……

更多相关文章

  1. eclipse adb 启动失败,无法匹配android设备 的解决方案
  2. Android开发工具使用之adb
  3. 如何在电脑上安装模拟器体验Android(安卓)4.0
  4. Android设置Settings:预读取设置的选项和更新设置结果【2】
  5. Android版本更新知识(检测、升级)总结
  6. 在Android模拟器中安装和卸载apk应用
  7. Android入门(1) 不一样的HelloWorld
  8. Android之Handler非主线程更新UI
  9. Android(安卓)Project from Existing Code 生成 R 文件错误、失

随机推荐

  1. 【源码分享下载】每日更新之高仿京东商城
  2. Android(安卓)Studio很卡,操作很不顺的点
  3. android 引入 iconv 库
  4. Android(安卓)Navigation Architecture C
  5. 4412 矩阵键盘
  6. Android(安卓)完全退出应用的四种方法
  7. 解决android logcat不打印信息
  8. Android中View绘制优化之一---- 优化布局
  9. 【android】开发笔记---存储篇
  10. Android(安卓)Studio中Run按钮是灰色的快