最近有個(gè)項(xiàng)目需要用 Python 調(diào)用 Adb install 進(jìn)行 APK的安裝呀忧∈郏可是會(huì)經(jīng)常發(fā)現(xiàn) APK 不能正常安裝,錯(cuò)誤提示為 INSTALL_FAILED_INSUFFICIENT_STORAGE而账。 解決了這個(gè)問題之后順便寫個(gè)筆記記錄一下胰坟。
Why
其實(shí),在應(yīng)用第一次安裝的時(shí)候泞辐,APK 文件會(huì)被保存在如下路徑中:
/data/app/<package-name>-1.apk
當(dāng)這個(gè) APK 文件更新笔横,需要重新安裝之后, APK 會(huì)重新被保存在相同的目錄中,但是文件的序號(hào)會(huì)相應(yīng)增加咐吼。然后之前一個(gè)版本的 APK -1.apk
文件會(huì)被刪除吹缔。
/data/app/<package-name>-2.apk
如果這時(shí)又有了一個(gè)新版本的 APK 需要安裝,那么這個(gè)文件又會(huì)被保存為 -1.apk
锯茄, 相應(yīng)的厢塘,-2.apk
也會(huì)被刪除。以此類推,如果又有新的 APK俗冻, 那么這個(gè)邏輯會(huì)一直交替下去礁叔。
而 INSTALL_FAILED_INSUFFICIENT_STORAGE 錯(cuò)誤發(fā)生的情況中,大部分是因?yàn)?APK 更新之后迄薄, /data/app/
里的文件刪除失敗琅关, -1.apk
和 -2.apk
殘留導(dǎo)致的。
Solution
所以讥蔽,很簡(jiǎn)單涣易,在安裝之前先清除 /data/app/
下對(duì)應(yīng)包名的文件就好了。解決方法如下:
adb shell pm uninstall <full.packge.name>
adb shell rm -rf /data/app/<full.package.name>-*