[Android--Tool][INSTALL_FAILED_INSUFFICIENT_STORAGE]问题及解决

简述

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 /data
ls -a -l -R

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

重启大法

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

你可能感兴趣的:(android,apk,storage,安装失败)