問題

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"
 

這比修復更重要,如果您希望您的完成應用程式安裝在裝置的內部記憶體上,這可能是不理想的.但它至少會使開發過程變得不那麼令人沮喪.

  最佳答案

這只是一個臨時的解決方法,而不是真正的解決方法。

在我遇到這種情況後,對目前的答覆不滿意,我開始工作 試圖從AOSP源中找出它.我找到了一個REAL解決方案.

解釋

首先,關於 Android 安裝和更新的一些(簡化)背景

第一次安裝應用程式:

  1. APK 檔案儲存為

    /data/app/-1.apk(1.apk)

當應用程式更新時:

  1. 更新的APK檔案儲存為:

    /data/app/-2.apk(2.apk)

  2. 第一個版本(1.apk)被刪除。

在我們的下一次更新時:

  1. 新的 APK 儲存為(1.apk)和(2.apk)被刪除(永遠重複)。

 

我們大多數人遇到的問題發生在應用程式更新時,但刪除舊的APK失敗.這本身還沒有導致更新失敗,但它確實導致/data/app中有兩個APK檔案.

下次嘗試更新應用程式時,系統無法移動其臨時檔案,因為(1.apk)和(2.apk)都不是空的.由於File#renameTo(File)不會丟擲異常,而是返回一個布林的PackageManager,即使失敗與自由空間的數量毫無關係,它也沒有辦法告訴它為什麼返回INSTALL_FAILED_ample_STORAGE.

解決方案

執行:

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

要麼

解除安裝應用程式

使用你最喜歡的方法刪除BOTH:

/data/app/

/data/app/

確保沒有任何其他阻止未來安裝的方式類似.在我的情況下,我有一個/data/app-lib/<full.package.name>-1目錄四周延續!在這種情況下,安裝到 SD卡工作,並隨後移動到內部記憶體. (建立/data/app-lib/<full.package.name>沒有-1結束.)

為什麼其他“解決方案”有效

  • 安裝到外部儲存的程式碼大不相同,沒有相同的問題

  • 解除安裝應用程式只會在/data/app中刪除一個版本的APK檔案.這就是為什麼您可以重新安裝一次,但不會更新它.

  • 當發生此錯誤時,模擬器中的自由空間數量並不真正相關

  相同標籤的其他問題

androidinstallationandroid-sdcard