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

Posted

技术标签:

【中文标题】Android上INSTALL_FAILED_INSUFFICIENT_STORAGE错误的解决方案[关闭]【英文标题】:Solution to INSTALL_FAILED_INSUFFICIENT_STORAGE error on Android [closed] 【发布时间】:2011-06-10 04:43:27 【问题描述】:

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?? 我在清单文件中得到了这个消息:-> 错误:在包 'android' 中找不到属性 'installLocation' 的资源标识符请帮助 @AndrewSmith:你能回答你的问题吗?只是在审核期间偶然发现了这个问题,因为它被标记为不是一个真正的问题。虽然标志基本上是正确的,但如果解决方案丢失,那就太可惜了。 首先要做的是:找出问题是否真的与空间有关!详情请见my answer on this question。 我在安卓模拟器上遇到了这个错误。在 android studio - AVD manager 中,有一个选项可以擦除特定设备上的数据。这解决了我的问题 【参考方案1】:

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

在我遇到这种情况并且对当前的反应不满意后,我开始工作 试图从 AOSP 源中找出答案。我找到了REAL解决方案。

说明

首先,介绍一下Android 如何安装和更新的(简化的)背景

第一次安装应用时:

    APK 文件保存为

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

应用更新时间:

    更新后的APK文件保存为:

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

    第一个版本 (1.apk) 被删除。

在我们的下一次更新中:

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

 

我们大多数人在更新应用程序时都会遇到的问题,但删除旧 APK 失败。这本身还不会导致更新失败,但确实会导致/data/app中有两个APK文件。

下次您尝试更新应用程序时,系统无法移动其临时文件,因为 (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/&lt;full.package.name&gt;-1 目录徘徊!在这种情况下,安装到SD card 工作正常,随后也移动到内部存储器。 (创建没有-1 结尾的/data/app-lib/&lt;full.package.name&gt;。)

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

安装到外部存储的代码明显不同,没有相同的问题

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

发生此错误时,模拟器中的可用空间量并不真正相关

【讨论】:

@Msmit1993,您无权访问非根设备上的数据目录。拥有 SDK 和 ADB 并不重要。 对于真正的懒人,这里有一个 bash sn-p: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 我也尝试了android:installLocation="preferExternal",但都是徒劳的,我的情况没有任何效果。我正在使用真实设备进行测试。这种情况有什么解决办法? 我必须清除/data/local/tmp Android Studio 的 AVD 管理器现在可以在您单击“操作”下拉菜单时选择“擦除数据”,这似乎也解决了这个问题。【参考方案2】:

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

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

    转到Eclipse's首选项,然后在“默认模拟器选项”字段中选择“启动”添加“-partition-size 1024”。点击“应用”并照常使用您的模拟器。

【讨论】:

Oscar,你认为这发生在模拟器上。就我而言,它发生在实际设备上,这个答案没有解决。 第二个选项似乎对我不起作用。但是选项1做到了!好东西!并使用 2.1 模拟器。 这对我不起作用,大概是因为我启用了快照?如何使用新的 -partition-size 选项让模拟器从头开始启动 Android? 在选项 1 上丢失 - 我在此位置的 eclipse 中没有“目标”选项卡。 第二个选项对我有用,感谢@RacZo 的 gud 帖子【参考方案3】:

感谢您发布此问题。我有一些额外的见解可能会对一些开发者有所帮助。

我正在设备(不是模拟器)上调试我的应用程序。该设备在/data 上有 21 MB 可用空间(正如“df”在执行“adb shell”时所显示的那样),而我的应用程序只有 5 MB。但是,我确实发现,如果我删除了设备上的其他应用程序(不重新启动手机或重新启动 adbd),INSTALL_FAILED_INSUFFICIENT_STORAGE 会消失一段时间然后又回来。

因此,调试我的 5 MB 应用程序似乎需要更多 /data 中的 20 MB 空间,此外,每次我调试我的应用程序时都会发生泄漏。

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

cd /data
ls -a -l -R

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

我发现我的设备上@9​​87654326@ 目录中的大量空间被浪费,这些空间来自几个月前的调试会话的旧日志文件。

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

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

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

希望你们中的一些人也能够通过定期删除 /data/klog/* 来逃避 INSTALL_FAILED_INSUFFICIENT_STORAGE。

或者,您至少可以在/data 中执行ls -a -l -R 以查看您所有空间的去向,如果确实存在一些(隐藏的)空间问题。

【讨论】:

知道如何在非 root 手机上执行此操作吗?我无权访问数据目录。很棒的帖子顺便说一句 +1 感谢您的信息。仅供参考,您可以在 Unix 中合并标志,以便 ls 命令变为 ls -alR 使用 root 访问权限:# su # du /data | sort -g 获取按大小排序的文件夹/文件列表 @JuanMaCuevas du 仅列出文件夹。 @Rich,尝试下载第 3 方应用程序 Astro 文件管理器。它非常受欢迎,可让您访问手机的文件。 play.google.com/store/apps/…【参考方案4】:

以下帮助:

打开设备的外壳

adb shell

导航到第一次复制传入 APK 的临时目录

cd /data/local/tmp

列出可用文件并根据需要删除

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

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


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

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

它表示该功能仅限于无根设备。我的是根深蒂固的,所以很高兴看到人们在这些情况下有效,如果它只是一个侥幸对我有用(无论如何这是一个不可预测的问题)。

注意:我与该应用无关。刚一搜就找到了。

【讨论】:

它帮助了我.. 我以前的一些应用程序存储在 tmp 文件夹中。在我删除它们之后它工作正常..【参考方案5】:

我已经通过在 AndroidManifest.xml 文件中的 &lt;manifest&gt; 标记中包含 android:installLocation="auto" 来解决它。

【讨论】:

确实有效。谢谢。 这是唯一对我有用的修复程序,在真实设备上。谢谢。 简单而好用。谢谢 我添加了这行代码。但仍然收到此错误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. 使用模拟器的最佳解决方案。谢谢!【参考方案6】:

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

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

【讨论】:

【参考方案7】:

模拟器上的一个相关问题是/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.***lynmarathon.calendarapi2-1.apk

【讨论】:

1.运行“adb shell” 2. cd 进入数据中的每个目录,并找到那些无用的大文件。 3. 使用“rm (filename)”删除它们 4. 我经常出现的问题是“ApiDemos”和“dalvik-cache”之类的垃圾(只需删除那个的全部内容)【参考方案8】:

在我的情况下,失败是由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个小时后! :)【参考方案9】:

正在回答这个主题的第一篇文章...

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

默认设置外部安装:

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 解决了“空间不足”的问题。谢谢!【参考方案10】:

我觉得写这篇文章有点奇怪,但我不能 100% 确定它在某些情况下不是真的(它对我有用)。如果您有以下症状:

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

然后,试试这个:

不工作时拔掉手机电源!

我拔掉了手机,让它休息一整天。我的电池有点没电了。在此之后,我重新连接它并再次开始调试。这次一切正常!我的意思是真的很好,就像以前一样。

此错误是否可能是由于某些与电池相关的硬件问题?这么想还是觉得很奇怪,但现在我时不时(甚至整晚)断开我的手机,问题没有再出现。

【讨论】:

这种情况一直发生在我身上——在我所有的设备上。在一天的事业中,事情通常在每天结束时开始失败。这太烦人了,谷歌还没有解决这个问题…… 对我来说同样的行为,但重启手机解决了我的问题。【参考方案11】:

我尝试了以下方法:

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

检查它是否适用于您。

【讨论】:

是的,重启设备是唯一可行的方法(在尝试了此页面的几种解决方案之后) 重启设备工作:)【参考方案12】:

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

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

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

【讨论】:

这是迄今为止最好的选择,因为不涉及更新任何文件或使用任何应用程序,只需avd【参考方案13】:

Samsung Galaxy Ace 在其规格中宣传 158 MB 的内部存储,但核心应用程序和服务消耗了大约 110 MB(我使用设备上的任务管理器检查了这一点)。我的应用是 52 MB,因为它有很多资源。一旦我将其中的一些删除到 45 MB,该应用程序就可以顺利安装。设备仍在提醒我内部存储空间快满了,我应该卸载一些应用程序,即使我只安装了一个应用程序。

安装 .apk 包的发行版然后将其卸载后,我的设备显示 99 MB 可用空间,因此它可能是调试信息使设备变得混乱。见Louis Semprini's answer。

【讨论】:

【参考方案14】:

在 Eclipse 中,

Run -- &gt; Debug Configurations --&gt; Select "target", 并选择要启动的首选模拟器目标。

然后在“其他模拟器命令行选项”下方添加:

-分区大小 1024

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

希望对您有所帮助...!

【讨论】:

提示Android Virtual Device Manager 用户。您可以将分区大小设置为 1024 作为“内部存储”,表示为disk.dataPartion.size【参考方案15】:

只需从命令行卸载模拟器中的应用程序或转到设置并卸载应用程序。这将阻止错误发生。

【讨论】:

【参考方案16】:

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

adb install 中删除-s 标志为我解决了这个问题。

【讨论】:

+1,好一个,-s 应该只在覆盖以前安装的版本时使用。【参考方案17】:

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

【讨论】:

【参考方案18】:

模拟器解决方案

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

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

disk.dataPartition.size=1024

1024 是您希望使用的大小(以 MB 为单位)。保存文件,然后在选中wipe user data 的情况下启动您的模拟器。你的模拟器现在应该有新的尺寸了。

【讨论】:

【参考方案19】:

确保在尝试运行模拟器时不要将你的安卓设备与 USB 连接

【讨论】:

【参考方案20】:

解决方法:

编译为没有android:installLocation="preferExternal"的2.1。

好吗?

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

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

【讨论】:

【参考方案21】:

如果您使用的是真实设备,则只是内存不足。只需转到 Android 设置 -> 应用程序,然后将一些应用程序移动到 SD 卡或卸载一些应用程序。

如果您使用的是模拟器,请参阅RacZo's answer。

【讨论】:

我们说的是当有足够的可用存储空间时出现的存储空间不足错误。【参考方案22】:

当我尝试在完整的 ROM 更新后使用ADB shell 在SD card 目录中批量安装大约 50 个应用程序时遇到了同样的错误:

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

其中一些已安装,但许多失败并出现错误 INSTALL_FAILED_INSUFFICIENT_STORAGE。所有失败的应用程序的名称中都有空格。我批量重命名它们并再次尝试。这次一切都奏效了。我没有做重启或任何事情。可能这不是你们面临的问题,但这可能有助于搜索与我遇到的相同问题的人。

【讨论】:

我还注意到,当我错过拼写应用程序名称时,有时会出现同样的错误。在我的情况下,这是一个误导性的错误消息。【参考方案23】:

解决方案很简单。

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

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

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

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

【讨论】:

数据分区不是 Google API 级别 14 的可用选项【参考方案24】:

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

【讨论】:

【参考方案25】:

我今天在使用手机进行 Eclipse 测试/调试时遇到此错误。

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

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

【讨论】:

【参考方案26】:

在尝试了此线程中的所有其他内容后,我发现我自己的问题是因为 .apk 文件的路径太长。所以我 cd'ed 到 .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\ directory\ path/subpath/子子路径/子子子路径/短路径【参考方案27】:

在我的情况下,它通过增加 eclipse 的扩展内存得到修复,通过更改 eclipse.ini 中的 -Xmx768m 的值

【讨论】:

【参考方案28】:

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

【讨论】:

【参考方案29】:

我也遇到了同样的问题,我做了“恢复出厂设置”,之后就正常了。

【讨论】:

我真的不建议将此作为解决方案。完全矫枉过正。 它会擦除您的 /data,从而释放一些空间,以便重新安装。一个非常生硬的工具,而不是一个解决方案。该错误可能会在几个应用程序后再次出现。 这相当于医生说:我不知道你的胳膊怎么了,所以我要把它剪掉。【参考方案30】:

我的手机没有 root 访问权限,也没有准备好将我的应用安装到 SD 卡上。 /data/ 上有 15 MB 的可用空间,而我的应用程序小于 2 MB。

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

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

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

【讨论】:

以上是关于Android上INSTALL_FAILED_INSUFFICIENT_STORAGE错误的解决方案[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Ionic 应用程序在浏览器和 ios 上运行,但不在 android 上,与服务器的连接不成功。 (文件///android_asset/www/index.html)在android上

在 xml (android:, app:, @.., ...) 上使用 android 前缀

Android Webview 在三星和 Android 11 上崩溃

Android 在 Android 手机 LockScreen 上显示活动

android权限--android开发中的权限及含义(上)

Android:如何在 android 4.2 上折叠状态栏? [复制]