解决方案安装

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保存为(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>-*"
    

    要么

    卸载应用程序

    用你最喜欢的方法删除两个

    /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来查看您的空间正在进入哪里,如果确实存在真正的一些(隐藏的)空间问题。

    链接地址: http://www.djcxy.com/p/65435.html

    上一篇: Solution to INSTALL

    下一篇: How to programmatically create and read WEP/EAP WiFi configurations in Android?