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/<full.package.name>-1
目录徘徊!在这种情况下,安装到SD card 工作正常,随后也移动到内部存储器。 (创建没有-1
结尾的/data/app-lib/<full.package.name>
。)
为什么其他“解决方案”有效
安装到外部存储的代码明显不同,没有相同的问题
卸载应用只会删除/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 行的输出以了解所有空间的去向。
我发现我的设备上@987654326@ 目录中的大量空间被浪费,这些空间来自几个月前的调试会话的旧日志文件。
这些不是我的日志文件:它们是由 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 文件中的 <manifest>
标记中包含 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 -- > Debug Configurations --> Select "target",
并选择要启动的首选模拟器目标。
然后在“其他模拟器命令行选项”下方添加:
-分区大小 1024
然后关闭模拟器并单击调试图标,这将启动您选择的首选模拟器。
希望对您有所帮助...!
【讨论】:
提示Android Virtual Device Manager
用户。您可以将分区大小设置为 1024 作为“内部存储”,表示为disk.dataPartion.size
【参考方案15】:
只需从命令行卸载模拟器中的应用程序或转到设置并卸载应用程序。这将阻止错误发生。
【讨论】:
【参考方案16】:我在使用新的 Nexus 4 和使用 Adobe 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 上显示活动