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"

这更像是一种创可贴,而不是补救措施,如果你想要完成的应用程序安装在设备的内部内存中,这可能不太理想。但它至少会让开发过程不那么令人沮丧。


当前回答

这只是一个临时的解决方案,而不是真正的解决方案。

在我遇到这种情况后,我对目前的反应不满意,我去工作了 试图从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文件的一个版本。这就是为什么你可以重新安装一次,但不能更新它。 当出现此错误时,模拟器中的空闲空间数量并不真正相关

其他回答

我也遇到了同样的问题,我做了一个“工厂数据重置”,在那之后它工作得很好。

解决办法很简单。

打开AVD管理器。编辑你的AVD。

在下面的硬件部分,有一些属性列在“New…”和“Delete”的右边。

新媒体。选择数据分区大小。设置为“512MB”(必须为MB)。做完了。如果您仍然遇到问题,请使用相同的方法增加您的系统和缓存分区。

都记录在这里: http://developer.android.com/guide/developing/devices/managing-avds.html

模拟器解决方案

打开你的。android目录。通常在您的主目录中。然后转到avd,然后打开包含您想要更改的avd名称的目录。

现在编辑config.ini文件并添加以下行或修改以下行:

disk.dataPartition.size=1024

其中1024是您想要使用的MB大小。保存文件,然后启动模拟器,选中擦除用户数据。您的模拟器现在应该具有新的大小。

这只是一个临时的解决方案,而不是真正的解决方案。

在我遇到这种情况后,我对目前的反应不满意,我去工作了 试图从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文件的一个版本。这就是为什么你可以重新安装一次,但不能更新它。 当出现此错误时,模拟器中的空闲空间数量并不真正相关

如果您在模拟器上运行应用程序,如果此问题仍然存在,请检查通知管理器。如果它显示一个图标,并通知“手机内存已满”,这意味着您已经在模拟器上安装了如此多的应用程序。从“设置>>管理应用程序>>选择应用程序>>卸载”中卸载当前不需要的多个应用程序。 这集。 现在重新运行程序。