解决Android上INSTALL_FAILED_INSUFFICIENT_STORAGE错误的方法[关闭]


525

INSTALL_FAILED_INSUFFICIENT_STORAGE错误是每个Android开发者的生活的祸根。无论应用程序大小或可用存储量如何,都会发生这种情况。重新启动目标设备可以暂时解决该问题,但是很快又回来了。人们有数百(甚至数千个)留言板帖子询问为什么会出现此问题,但Google员工对此问题感到无奈。

有一个简单的解决方法。如果您的测试设备运行的是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"

这更像是临时解决方案,而不是解决方案,如果您希望完成的应用程序安装在设备的内存中,则可能不是理想的选择。但这至少将使开发过程不那么麻烦。


它适用于Android API 4级或1.6级吗?
mAc 2012年

我在清单文件中得到了此消息:->错误:在软件包“ android” Pls帮助中找不到属性“ installLocation”的资源标识符
someone_ smiley 2012年

1
@AndrewSmith:您能回答您的问题吗?在审核过程中偶然发现了这个问题,因为它被标记为不是真正的问题。尽管该标志基本上是正确的,但是如果解决方案丢失了,那将是一个耻辱。
eckes 2013年

首先要做的是:找出问题是否与空间有关!有关详细信息,请参见我对这个问题的回答
罗伯·西默

1
我在android模拟器上遇到此错误。在android studio-AVD管理器中,有一个选项可擦除特定设备上的数据。这解决了我的问题
Aseem '19

Answers:


177

这只是暂时的解决方法,不是真正的解决方法。

在我遇到这种情况并且对当前的响应不满意之后,我开始尝试从AOSP来源中找出问题。我找到了一个真正的解决方案。

说明

首先,简要介绍一下Android如何安装和更新

首次安装应用程序:

  1. APK文件保存为

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

当要更新应用程序时:

  1. 更新后的APK文件另存为:

    /data/app/<full.package.name>-2.apk (2.apk)
  2. 第一个版本(1.apk)被删除。

在我们的下一个更新中:

  1. 新的APK被保存为(1.apk),并且(2.apk)被删除(永远重复)。

 

我们大多数人遇到的问题是在更新应用程序时发生的,但是删除旧APK失败。本身尚未导致更新失败,但确实导致中存在两个APK文件/data/app

下次尝试更新应用程序时,系统无法移动其临时文件,因为(1.apk)和(2.apk)都不为空。由于File#renameTo(File)不会引发异常,而是返回一个布尔型PackageManager,因此即使失败与可用空间量无关,它也没有任何办法来说明为什么它返回INSTALL_FAILED_INSUFFICIENT_STORAGE。

跑:

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

要么

卸载应用

使用您喜欢的方法删除BOTH

/ data / app / <完整包名称> -1.apk

/ data / app / <完整包名称> -2.apk

确保没有其他方法以类似的方式阻止以后的安装。就我而言,我的/data/app-lib/<full.package.name>-1目录缠绵不绝!在这种情况下,安装SD卡有效,随后也移至内部存储器。(创建/data/app-lib/<full.package.name>-1结尾。)

为什么其他“解决方案”有效

  • 安装到外部存储的代码有很大不同,这没有相同的问题

  • 卸载该应用程序只会删除中的APK文件的一个版本/data/app。这就是为什么您可以重新安装一次,但不能更新它的原因。

  • 发生此错误时,模拟器中的可用空间量实际上并不重要


9
@ Msmit1993,您无权访问非root用户设备上的数据目录。拥有SDK和ADB无关紧要。
斯坦(Stan)2014年

3
对于真正的懒惰者,这里有个function fix_app { adb shell "pm uninstall ${1}; rm -rf /data/app/${1}-*; su -c 'rm -rf /data/app-lib/${1}-*'" } $ fix_app com.facebook.katana
简短的摘要

1
我也尝试过,android:installLocation="preferExternal"但徒劳无功,对我而言没有任何作用。我正在使用真实的设备进行测试。在这种情况下有什么解决方案?
拉姆·帕特拉

1
我必须清除/data/local/tmp
18446744073709551615 '16

1
就我而言,我添加了使用adb install -f安装应用程序的方法。即使我的内存有1.7GB的可用空间,它还是拒绝安装它。可能是因为我没有SDCARD。但是,使用-f选项,至少它起作用了,我不知道为什么...
xtof54

108

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

  1. 右键单击您的Android项目的根目录,转到“运行方式”,然后转到“运行配置...”。在左侧树中找到“ Android应用程序”节点,然后选择您的项目,然后转到窗口右侧的“目标”标签,向下查找“其他仿真器命令行选项”字段(有时您会需要将窗口放大),最后在其中粘贴“ -partition-size 1024”。单击“应用”,然后单击“运行”以使用您的模拟器。

  2. Eclipse的 “首选项”,然后选择“启动”,在“默认仿真器选项”字段上添加“ -partition-size 1024”。单击“应用”,然后照常使用模拟器。


103
奥斯卡,您假设这是在模拟器上发生的。就我而言,这是在实际设备上发生的,此答案未解决。
Jeff Axelrod

第二种选择似乎对我不起作用。但是选项1做到了!好东西!并使用了2.1模拟器。
DonnaLea

这对我不起作用,大概是因为我启用了快照吗?如何使用新的-partition-size选项让模拟器从头开始启动Android?
Timmmm 2012年

在选项1上丢失-我在该位置的eclipse中没有“目标”标签。
泰德·贝兹

第二个选项对我有用,感谢@RacZo
DD的

31

感谢您发布此问题。我还有一些其他见解,可能会对某些开发人员有所帮助。

我正在设备(不是仿真器)上调试应用程序。设备有21 MB的可用空间/data(执行“ adb shell”时显示为“ df”),我的应用程序只有5 MB。但是,我确实发现,如果我删除了设备上的其他应用程序(没有重新启动电话或重新启动adbd),则INSTALL_FAILED_INSUFFICIENT_STORAGE会消失一段时间然后再返回。

因此,似乎调试我的5 MB应用需要大约20 MB的空间 /data,此外,每次我调试应用程序时都会泄漏一些内容。

所以我做了“ adb shell”,并列出了整个/data目录

cd /data
ls -a -l -R

我查看了5000行的输出,以了解所有空间的去向。

目录中的设备上发现了大量浪费的空间/data/klog从数月的调试会话中以旧日志文件的形式中的。

这些不是我的日志文件:它们是由Android基础结构的某些部分创建的。

我删除了它们,并立即保存了58 MB,这在“设置”应用中未归因于任何特定应用。我有一个小型设备,因此58 MB非常重要(大约40%)。

到目前为止,经过多次运行,我还没有再次获得INSTALL_FAILED_INSUFFICIENT_STORAGE。我们希望这是真正的问题,尽管OP指出他的设备有足够的空间(但没有说多少)。

希望你们中的某些人也可以通过定期删除来逃脱INSTALL_FAILED_INSUFFICIENT_STORAGE /data/klog/*

或者,你至少可以做ls -a -l -R/data,看看你所有的空间是怎么回事,如果确实有真有些(隐藏)空间的问题。


26
知道如何在无根电话上执行此操作吗?我无权访问数据目录。很棒的帖子btw + 1
Rich

1
谢谢(你的)信息。仅供参考,您可以在Unix中合并标志,使ls命令变为ls -alR
mharper

1
使用root用户访问权限执行:#su#du / data | 排序-g以获得按大小排序的文件夹/文件的列表
JuanMa Cuevas 2013年

@JuanMaCuevas du仅列出文件夹。
naXa 2015年

@Rich,请尝试下载第三方应用程序Astro File Manager。它非常流行,可让您访问手机的文件。play.google.com/store/apps/...
Azurespot

22

以下帮助:

  • 打开设备的外壳

    adb shell
  • 导航至临时复制传入APK的临时目录

    cd /data/local/tmp
  • 列出可用文件并根据需要删除

    rm * // use at your own risk, good practice to list files first

到目前为止,对于我来说,在实际设备上这是可靠的。


编辑:事实证明,这种解决方案不如上述解决方案可靠。

我尝试了许多解决方案。没有任何帮助。最后,我找到了一个名为SD Maid的应用程序。有帮助。

它说该功能仅限于无根设备。我的根源扎根,所以很高兴看到人们在这种情况下有效,如果这只是a幸而对我有用(无论如何这是一个无法预测的问题)。

注意:我与该应用程序无关。刚刚通过搜索找到了它。


它帮助了我。我以前的一些应用程序存储在tmp文件夹中。之后,我删除那些其工作细..
马亨德兰Sakkarai

19

我已经通过在AndroidManifest.xml文件中包含android:installLocation="auto"内部<manifest>标记解决了它。


确实有效。谢谢。
Teddy

这是在实际设备上对我有用的唯一修复程序。谢谢。
莎阿·阿巴兹汗

很好,很简单。
谢谢

我添加了以下代码行。但是仍然出现此错误Error: ADB exited with exit code 1 adb: failed to install build\app\outputs\apk\app.apk: Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE] Error launching application on Android SDK built for x86.
Husna,

与模拟器一起使用的最佳解决方案。谢谢!
Br0wn

16

我已在应用程序的清单文件中添加了另一行android:installLocation="preferExternal"。通过使用此行,它将强制将应用程序安装到外部存储。看下面的例子,

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nasir.phonegap"
    android:installLocation="preferExternal" >

11

模拟器上的一个相关问题是/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

2
1.运行“ adb shell” 2. cd进入数据中的每个目录,并找到没有用的大文件。3.使用“ rm(文件名)”删除它们。4.我经常遇到的问题是诸如“ ApiDemos”和“ dalvik-cache”之类的垃圾箱(只需删除该目录的全部内容)
Adam

9

就我而言,失败是由com.android.providers.media应用程序引起的。我在x86 android模拟器上遇到了这个问题。我做了什么:

$ adb shell df
Filesystem             Size   Used   Free   Blksize
...
/data                  224M   209M    14M   4096
....

可用空间太低 /data

$ adb shell du /data
...
409870  /data/data/com.android.providers.media
...

几乎所有东西都被单个应用程序消耗了!它是系统应用程序,所以我认为最好不要删除它。相反,我清理了应用程序数据。

$ adb shell pm clear com.android.providers.media
Success
$ adb shell df
Filesystem             Size   Used   Free   Blksize
...
/data                  224M     8M   215M   4096
...

磁盘已清除,应用已成功安装。


这是唯一对我有用的解决方案。2个小时后!:)
Ruchir Baronia

6

我写这本书有点怪异,但是我不能100%地确定在某些情况下不是真的(对我有用)。如果您有以下症状:

  • 您一直在使用物理设备(在我的情况下为Samsung Galaxy Ace)工作,
  • 你已经连续几天发展了,
  • 您的电话一直处于连接状态,无论白天还是黑夜。
  • 几天后,您开始收到此错误,并且情况越来越严重。
  • 没有其他答案对您有用。
  • 你和我一样辞职...

然后,尝试以下操作:

  • 不工作时拔下手机电源!

我拔掉了手机的插头,让它在整整一天内都可以休息。我的电池没电了。此后,我重新连接它并再次开始调试。这次一切都很好!和以前一样,我的意思是真的很好。

此错误是否可能是由于某些与电池有关的硬件所致?这样想仍然感觉很奇怪,但是现在我不时(和晚上)不停地断开手机,问题没有再出现。


这一直在我身上发生-在我所有的设备上。在一天的工作中,事情通常在每天结束时开始失败。这太烦人了,其令人惊叹的Google尚未解决此问题……
slott 2012年

对我来说,行为相同,但重新启动电话可以持续解决我的问题。
bdevay 2014年

6

回答本主题的第一篇文章...

症状:某些应用程序未安装,说没有空间,实际上内部和外部存储上都有足够的可用空间!解决方案:默认情况下禁用外部安装。

通过defaut设置外部安装:

adb shell pm set-install-location 2

使得无法在无法外部安装的许多应用程序上进行安装(例如adblock +左右)

那么解决方案是

adb shell pm set-install-location 0

要么

adb shell pm set-install-location 1

0: auto (if one is full - or irrelevant !!! - it select the other)
1: internal
2: external

我开始认为这部手机的内部存储已损坏,但是将安装位置设置为1可以解决“空间不足”的问题。谢谢!
Wodin '16

6

我尝试了以下方法:

  • 重新启动我的设备
  • 删除了以前的APK
  • 重建我的APK
  • 在设备上卸载我以前的副本
  • 重新安装

检查它是否与您相同。


3
是的,重启设备是唯一可以使用的设备(尝试了此页面上的几种解决方案之后)
Sulea Cosmin 2014年

重新启动设备工作:)
cinobili19,

5

三星Galaxy Ace在其规格中公布了158 MB的内部存储,但是核心应用程序和服务消耗了其中的110 MB(我使用设备上的任务管理器进行检查)。我的应用程序有52 MB,因为它有很多资产。一旦我删除了其中一些大小不超过45 MB的文件,该应用程序即可成功安装。设备仍在提醒我内部存储空间已满,即使我只安装了一个应用程序,也应该卸载一些应用程序。

安装.apk捆绑软件的发行版本然后将其卸载后,我的设备显示99 MB的可用空间,因此它毕竟可能是调试信息,使设备杂乱无章。请参阅Louis Semprini的答案


4

在Eclipse中,

Run -- > Debug Configurations --> Select "target", 并选择要启动的首选仿真器目标。

然后在“其他仿真器命令行选项”下方添加以下内容:

-分区大小1024

然后关闭仿真器并单击调试图标,这将启动您选择的首选仿真器。

在此处输入图片说明

希望能帮助到你...!


Android Virtual Device Manager用户的提示。您可以将分区大小设置为1024,作为“内部存储”,代表disk.dataPartion.size
2013年

3

我在使用新的Nexus 4和使用Adobe AIR构建的APK时遇到了这个问题。我的清单中已经有android:installLocation =“ preferExternal”。我注意到我也在adb install-s选项(在共享大容量存储设备上安装软件包,如sdcard)打电话,这似乎有点过头了。

-sadb install我那里删除该标志可以解决此问题。


1
+1,不错,-s仅在覆盖先前安装的版本时才使用。
AAnkit

3

由于此问题仍然存在,我想为开发目的在RacZo的答案中添加一些内容。如果您不使用Eclipse插件,或者出于任何原因而没有源代码,而只是.apk,则可以在启动仿真器时使用相同的选项从命令行增加分区大小:

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

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


到目前为止,这是最好的选择,因为它不涉及更新任何文件或使用任何应用程序,只是avd
7ynk3r

2

我遇到了这个问题,因为使用Sideload Wonder Machine将应用安装到我的实际手机时出现此错误。我发现问题是在/ payload目录中有多个.apk文件。我以为这是受支持的内容,但是当我删除除一个.apk以外的所有内容时,错误消失了。


2

只需从命令行从仿真器中卸载应用程序,或者转到设置并卸载应用程序。这将阻止错误的出现。


2

如果您使用的是真实设备,则内部存储器将耗尽。只需转到Android设置-> 应用程序,然后将某些应用程序移至SD卡或卸载某些应用程序即可。

如果您使用的是仿真器,请参见RacZo的答案


9
我们谈论的是当有足够的可用存储空间时出现的存储空间不足错误。
user999717 2011年

2

尝试在完整的ROM更新后使用ADB Shell在SD卡目录中批量安装约50个应用程序时遇到了相同的错误:

for x in *.apk; do pm install -r $x; done

其中一些已安装,但许多失败并显示错误INSTALL_FAILED_INSUFFICIENT_STORAGE。所有失败的应用程序的名称中都有空格。我批量重命名了它们,然后重试。这次一切都奏效了。我没有重新启动或执行任何操作。也许这不是你们面临的问题,但这可能会帮助某人搜索与我面临的问题相同的问题。


我还注意到,当我错过拼写应用名称时,会出现相同的错误。就我而言,这是一个误导性的错误消息。
Insilico 2011年

1

仿真器解决方案

打开.Android目录。通常在您的主目录中。然后去avd,然后打开包含您要更改的avd名称的目录。

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

disk.dataPartition.size=1024

哪里1024是大小你想在MB使用。保存文件,然后wipe user data选中选中状态启动模拟器。现在,您的模拟器应具有新的大小。


1

解决方案很简单。

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

在“硬件”部分的下方,有一些属性在其右侧列出了“新建...”和“删除”。

按新建。选择数据分区大小。设置为“ 512MB”(需要MB)。这样就完成了。如果仍然遇到问题,请使用相同的方法来增加系统和缓存分区。

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


2
数据分区不能与谷歌API等级14可用的选项
特德·贝茨


1

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


1

今天,当我使用手机进行Eclipse测试/调试时,出现了此错误。

我的错误是我在应用程序名称中使用了挪威语特殊字符(“æ”,“ø”,“å”)。当我重构应用名称(使用“ o”而不是“ø”)时,应用已正确安装。

可能不是您的问题,但可能会引起其他人遇到相同错误的注意。


1

在尝试了该线程中的所有其他功能之后,我发现自己的问题是因为.apk文件的路径太长。因此,我将CD转到.apk所在的目录并执行:

cd /Very/Long/Path/To/Package/
adb install mypackage.apk

代替

adb install /Very/Long/Path/To/Package/mypackage.apk

而且工作正常...安装得很好。

只是认为这可能会对其他人有所帮助。


我可能要补充一点,使目录成为符号链接使我可以从IDE进行构建并进行调试:ln -s / Users / abc / a \荒谬地\ long \目录\ path / subpath / subsubpath / subsubsubpath / shortpath
David van Dugteren 2014年

1

解决方法:

编译为2.1不带android:installLocation="preferExternal"

好?

编译为2.2包括android:installLocation="preferExternal"

它仍将安装在低于8的SDK版本上(XML标记将被忽略)。


0

在我的情况下,它得到了固定,通过增加日食的扩展内存,通过改变值-Xmx768m的eclipse.ini


0

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


0

我也遇到了同样的问题,我进行了“出厂数据重置”操作,此后工作正常。


8
我真的不建议将此作为解决方案。过度杀伤力。
蒂姆(Tim)

3
它会擦除您的/ data,从而释放一些空间,因此安装将再次起作用。一个非常钝的乐器,而不是解决方案。几个应用程序后,错误可能会再次出现。
user999717 2011年

22
这相当于医生说的话:我不知道您的手臂出了什么问题,所以我将其切断。
德里克(Derek)

0

我的手机没有超级用户访问权限,也没有为将应用程序安装到SD卡做准备。15 MB的可用空间/data/,我的应用程序不到2 MB。

有一段时间我过去了;清理Eclipse项目并重新启动手机,但最终停止了工作(可能是在更新之后)。

清理我的应用程序缓存已为我解决了这个问题,不需要重启手机或卸载应用程序。

市场上有一些应用程序可用于一次清除多个应用程序的缓存。搜索“干净”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.