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

其他回答

我最终从设备上卸载了应用程序,然后在Eclipse中重新安装。这是我经常使用设备时遇到的一个问题,但今天我从开发中得到了这个信息。

您需要增加Android模拟器的内存容量。有两种方法:

Right click the root of your Android Project, go to "Run As" and then go to "Run Configurations...". Locate the "Android Application" node in the tree at the left, and then select your project and go to the "Target" tab on the right side of the window look down for the "Additional Emulator Command Line Options" field (sometimes you'll need to make the window larger) and finally paste "-partition-size 1024" there. Click Apply and then Run to use your emulator. Go to Eclipse's Preferences, and then select “Launch” Add “-partition-size 1024” on the “Default emulator option” field. Click “Apply” and use your emulator as usual.

回复这个话题的第一篇文章…

症状:某些应用程序不安装,说没有空间 实际上,内部和外部存储都有足够的空闲空间!! 解决方法:默认关闭外部安装。

默认设置外部安装:

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

由于这个问题仍然存在,出于开发目的,我认为我应该在RacZo的回答中添加一些内容。如果你没有使用Eclipse插件,或者因为任何原因你没有源代码,而只有.apk,你可以在启动模拟器时使用相同的选项从命令行增加分区大小:

emulator -avd <emulator name> -partition-size 1024

据我所知,这个选项在developer.android.com上没有记录,所以我想我将它发布在这里,以便人们可以找到这个解决方案。

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

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