解决方案安装
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文件保存为
/data/app/-1.apk(1.apk)
当应用程序要更新时:
已更新的APK文件保存为:
/data/app/-2.apk(2.apk)
第一个版本(1.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>-*"
要么
卸载应用程序
用你最喜欢的方法删除两个 :
/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
结尾。)
为什么其他“解决方案”有效
安装到外部存储器的代码显着不同,它们没有相同的问题
卸载应用程序只会删除/data/app
一个APK文件版本。 这就是为什么你可以重新安装一次,但不更新它。
发生此错误时,模拟器中的可用空间量并不真正相关
您需要增加Android模拟器的内存容量。 有两种方法:
右键单击Android项目的根目录,转到“运行方式”,然后转到“运行配置...”。 在左边的树中找到“Android Application”节点,然后选择您的项目并转到窗口右侧的“目标”选项卡,查看“其他模拟器命令行选项”字段(有时您会“需要增大窗口大小),最后粘贴“-partition-size 1024”。 单击应用,然后运行以使用您的模拟器。
转到Eclipse的首选项,然后选择“启动”在“默认模拟器选项”字段中添加“-partition-size 1024”。 点击“应用”并像往常一样使用仿真器。
感谢您发布这个问题。 我有一些额外的见解可以帮助一些开发人员。
我正在调试我的应用程序在设备上(而不是仿真器)。 该设备拥有21 MB的免费开机/data
(在执行“adb shell”时由“df”显示),我的应用程序只有5 MB。 但是,我确实发现,如果我删除了设备上的其他应用程序(无需重新启动手机或重新启动adbd),INSTALL_FAILED_INSUFFICIENT_STORAGE会消失一段时间,然后再回来。
因此,调试我的5 MB应用程序似乎需要更多的/data
20 MB空间,并且每次调试我的应用程序时还有一些漏洞。
所以我做了“adb shell”,并列出了整个/data
目录
cd /data
ls -a -l -R
我看着5000线的输出,看看所有的空间在哪里。
我通过几个月前的调试会话以旧日志文件的形式在我的设备上的/data/klog
目录中发现了大量浪费的空间 。
这些不是我的日志文件:它们是由Android基础架构的某个部分创建的。
我删除了它们,并立即保存了58 MB,这在设置应用程序中并未归因于任何特定的应用程序。 我有一个小型设备,所以58 MB非常重要(约40%)。
到目前为止,经过多次运行后,我还没有再次获得INSTALL_FAILED_INSUFFICIENT_STORAGE。 让我们希望这是真正的问题,尽管OP建议他的设备有足够的空间(但没有说多少)。
希望你们中的一些人也可以通过定期删除/data/klog/*
来逃脱INSTALL_FAILED_INSUFFICIENT_STORAGE。
或者,您至少可以执行ls -a -l -R
in /data
来查看您的空间正在进入哪里,如果确实存在真正的一些(隐藏的)空间问题。
上一篇: Solution to INSTALL
下一篇: How to programmatically create and read WEP/EAP WiFi configurations in Android?