INSTALL_FAILED_INSUFFICIENT_STORAGE错误是每个Android开发人员的烦恼。这与应用程序大小或可用存储空间大小无关。重新启动目标设备可以短暂地修复问题,但它很快就会回来。人们在留言板上发帖询问为什么会出现这个问题,但令人沮丧的是,谷歌的人对这个问题保持沉默。
有一个简单的变通办法。如果您的测试设备运行的是Android 2.2或更高版本,那么将Android:installLocation属性添加到应用程序的清单文件中,值为“preferExternal”。这将迫使应用程序安装在设备的外部存储设备上,比如手机的SD卡。
例如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.andrewsmith.android.darkness"
android:installLocation="preferExternal"
这更像是一种创可贴,而不是补救措施,如果你想要完成的应用程序安装在设备的内部内存中,这可能不太理想。但它至少会让开发过程不那么令人沮丧。
模拟器上的一个相关问题是/data分区中没有任何剩余空间。
例如,
% adb shell df
Filesystem Size Used Free Blksize
/dev 252M 32K 252M 4096
/mnt/asec 252M 0K 252M 4096
/mnt/obb 252M 0K 252M 4096
/system 154M 154M 0K 4096
/data 64M 57M 6M 4096
/cache 64M 1M 62M 4096
下面是/data/app目录的示例视图:
% adb shell ls -l /data/app
-rw-r--r-- system system 19949 2011-10-12 17:09 CubeLiveWallpapers.apk
-rw-r--r-- system system 27670 2011-10-12 17:09 GestureBuilder.apk
-rw-r--r-- system system 34341 2011-10-12 17:09 SoftKeyboard.apk
-rw-r--r-- system system 20151 2011-10-12 17:09 WidgetPreview.apk
我删除了多余的APK文件。似乎每次安装你都会得到一个新的APK文件。只需删除额外的APK文件。
例如,
adb shell rm /data/app/com.brooklynmarathon.calendarapi2-1.apk
回复这个话题的第一篇文章…
症状:某些应用程序不安装,说没有空间
实际上,内部和外部存储都有足够的空闲空间!!
解决方法:默认关闭外部安装。
默认设置外部安装:
adb shell pm set-install-location 2
使安装不可能在许多应用程序不能安装外部(如adblock +或左右)
那么答案是
adb shell pm set-install-location 0
Or
adb shell pm set-install-location 1
0: auto (if one is full - or irrelevant !!! - it select the other)
1: internal
2: external
这只是一个临时的解决方案,而不是真正的解决方案。
在我遇到这种情况后,我对目前的反应不满意,我去工作了
试图从AOSP源代码中找出答案。我找到了一个真正的解决方案。
解释
首先,简单介绍一下Android安装和更新的背景知识
第一次安装应用程序:
APK文件保存为
丹共/数据/应用/ < full.package.name > -1. (1. apk)
应用程序何时更新:
更新后的APK文件保存为:
丹共/数据/应用/ < full.package.name > -2. (2. apk)
第一个版本(1.apk)被删除。
在我们的下一次更新(s):
新的APK保存为(1.apk),删除(2.apk)(永远重复)。
我们大多数人遇到的问题发生在应用程序更新时,但删除旧的APK失败。这本身不会导致更新失败,但它会导致/data/app中有两个APK文件。
下次你尝试更新应用程序时,系统无法移动它的临时文件,因为(1.apk)和(2.apk)都不是空的。由于file# renameTo(File)不会抛出异常,而是返回一个布尔PackageManager,因此它没有任何方法告诉它为什么返回INSTALL_FAILED_INSUFFICIENT_STORAGE,即使失败与空闲空间无关。
解决方案
Run:
adb shell "pm uninstall <full.packge.name>"
adb shell "rm -rf /data/app/<full.package.name>-*"
OR
卸载应用程序
使用你最喜欢的方法删除这两个:
/data/app/<full.package.name>-1.apk
/data/app/<full.package.name>-2.apk
确保没有其他东西以类似的方式阻碍以后的安装。在我的情况下,我有一个/data/app-lib/<full.package.name>-1目录徘徊!在这种情况下,安装到SD卡以及随后移动到内部内存都是有效的。(创建/data/app-lib/<full.package.name>不带-1结尾)
为什么其他“解决方案”有效
安装到外部存储的代码有很大不同,但没有相同的问题
卸载app只会删除/data/app中APK文件的一个版本。这就是为什么你可以重新安装一次,但不能更新它。
当出现此错误时,模拟器中的空闲空间数量并不真正相关