development

Android에서 INSTALL_FAILED_INSUFFICIENT_STORAGE 오류에 대한 솔루션

big-blog 2020. 2. 12. 23:38
반응형

Android에서 INSTALL_FAILED_INSUFFICIENT_STORAGE 오류에 대한 솔루션


INSTALL_FAILED_INSUFFICIENT_STORAGE오류는 모든 안드로이드 개발자의 삶의 베인입니다. 앱 크기 또는 사용 가능한 저장 공간에 관계없이 발생합니다. 대상 장치를 재부팅하면 문제가 잠시 해결되지만 곧 다시 나타납니다. 사람들이 문제가 발생하는 이유를 묻는 수백 개의 메시지 게시판 게시물이 있지만 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 솔루션 을 찾았습니다 .

설명

우선, 안드로이드 설치 및 업데이트 방법에 대한 약간의 단순화 된 배경

앱을 처음 설치할 때 :

  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 삭제에 실패합니다. 아직 업데이트에 실패하지는 않지만에 두 개의 APK 파일이 /data/app있습니다.

다음에 앱을 업데이트하려고 할 때 (1.apk)와 (2.apk)가 비어 있지 않기 때문에 시스템이 임시 파일을 이동할 수 없습니다. File # renameTo (File)은 예외를 throw하지 않고 대신 부울 PackageManager를 리턴하므로 실패가 사용 가능한 공간과 아무 관련이없는 경우에도 INSTALL_FAILED_INSUFFICIENT_STORAGE를 리턴하는 이유를 알 수있는 방법이 없습니다.

해결책

운영:

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

또는

앱 제거

선호하는 방법을 사용하여 BOTH 를 삭제하십시오 .

/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결말.)

다른 "솔루션"이 효과가 있었던 이유

  • 외부 저장소에 설치하기위한 코드는 크게 다르며 동일한 문제가 없습니다.

  • 앱을 제거하면의 APK 파일 버전이 하나만 삭제됩니다 /data/app. 따라서 한 번만 다시 설치할 수 있지만 업데이트 할 수는 없습니다.

  • 이 버그가 발생할 때 에뮬레이터의 여유 공간 크기는 실제로 관련이 없습니다.


Android 에뮬레이터의 메모리 용량을 늘려야합니다. 이를위한 두 가지 방법이 있습니다.

  1. Android 프로젝트의 루트를 마우스 오른쪽 단추로 클릭하고 "다음 계정으로 실행"으로 이동 한 다음 "실행 구성 ..."으로 이동하십시오. 왼쪽의 트리에서 "Android Application"노드를 찾은 다음 프로젝트를 선택하고 창의 오른쪽에있는 "Target"탭으로 이동하여 "Additional Emulator Command Line Options"필드를 찾습니다 (때로는 ' 창을 더 크게 만들어야합니다) 마지막으로 "-partition-size 1024"를 붙여 넣습니다. 적용을 클릭 한 다음 실행을 클릭하여 에뮬레이터를 사용하십시오.

  2. Eclipse의 환경 설정으로 이동 한 다음 "기본 에뮬레이터 옵션"필드에서 "시작" "-파티션 크기 1024"추가를 선택하십시오. “적용”을 클릭하고 평소와 같이 에뮬레이터를 사용하십시오.


이 질문을 게시 해 주셔서 감사합니다. 일부 개발자에게 도움이 될만한 추가 정보가 있습니다.

에뮬레이터가 아닌 장치에서 응용 프로그램을 디버깅하고 있습니다. 기기에 21MB의 여유 공간이 있으며 /data( "adb shell"을 수행 할 때 "df"로 표시됨) 내 앱은 5MB에 불과합니다. 그러나 휴대 전화를 재부팅하거나 adbd를 다시 시작하지 않고 장치에서 다른 앱을 삭제하면 INSTALL_FAILED_INSUFFICIENT_STORAGE가 잠시 동안 사라졌다가 다시 발견됩니다.

따라서 5MB 앱을 디버깅하려면에 20MB의 공간이 더 필요하고 앱을 디버깅 /data할 때마다 무언가가 누출되는 것 같습니다.

그래서 나는 "adb shell"을하고 ENTIRE /data디렉토리를

cd /data
ls -a -l -R

그리고 나는 모든 공간이 어디로 가고 있는지보기 위해 5000 라인 출력을 보았습니다.

몇 달 전의 디버깅 세션에서 오래된 로그 파일 형식으로 디렉토리의 장치에서 방대한 양의 낭비되는 공간을/data/klog 발견 했습니다.

이것들은 내 로그 파일이 아니 었습니다. 안드로이드 인프라의 일부에 의해 생성되었습니다.

나는 그것들을 삭제하고 설정 앱에서 특정 앱에 귀속되지 않은 58MB를 즉시 저장했습니다. 작은 장치가 있으므로 58MB가 매우 중요합니다 (약 40 %).

지금까지 많은 실행 후 INSTALL_FAILED_INSUFFICIENT_STORAGE를 다시 얻지 못했습니다. OP가 자신의 장치에 충분한 공간이 있음을 제안하지만 (얼마나 많은 말을하지는 않았지만) 그것이 실제 문제가 되길 바랍니다.

바라건대 여러분 중 일부는 주기적으로 삭제하여 INSTALL_FAILED_INSUFFICIENT_STORAGE를 벗어날 수도 있습니다 /data/klog/*.

또는 실제로 실제로 (숨겨진) 공간 문제가있는 경우 모든 공간이 어디로 가고 있는지 확인하기 위해 적어도 ls -a -l -R안으로 /data들어갈 수 있습니다.


다음이 도움이됩니다.

  • 장치에 쉘을 엽니 다

    adb shell
    
  • 수신 APK가 처음 복사되는 temp 디렉토리로 이동하십시오.

    cd /data/local/tmp
    
  • 사용 가능한 파일을 나열하고 원하는대로 삭제

    rm * // use at your own risk, good practice to list files first
    

이것은 실제 장치에서 지금까지 신뢰할 수 있습니다.


편집 : 이것은 위의 솔루션만큼 신뢰할 수없는 솔루션으로 판명되었습니다.

나는 여러 가지 해결책을 시도했다. 실제로 도움이되지 않았습니다. 마지막으로 SD Maid 라는 앱을 찾았습니다 . 도움이되었습니다.

이 기능은 루팅되지 않은 장치에서만 제한됩니다. 광산은 뿌리를 내렸기 때문에 사람들로부터 효과적인 소식을 듣는 것이 좋을 것입니다. 그 시나리오에서 효과적이며 그것이 나를 위해 일한 우연이라면 (어쨌든 예측할 수없는 문제입니다).

참고 : 나는 응용 프로그램과 관련이 없습니다. 검색으로 찾았습니다.


응용 프로그램의 매니페스트 파일에 추가 줄을 추가했습니다 android:installLocation="preferExternal". 이 줄을 사용하면 앱을 외부 저장소에 강제로 설치합니다. 아래 예를 참조하십시오.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nasir.phonegap"
    android:installLocation="preferExternal" >

AndroidManifest.xml 파일에 android:installLocation="auto"내부 <manifest>태그를 포함 시켜서 해결했습니다 .


에뮬레이터의 관련 문제는 /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.brooklynmarathon.calendarapi2-1.apk

내 경우에는 com.android.providers.media으로 인해 오류가 발생했습니다 . 나는 x86 안드로이드 에뮬레이터에서 이것을 직면했다. 내가 뭘 한거지:

$ 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
...

디스크가 지워지고 앱이 성공적으로 설치되었습니다.


나는이 글을 쓰는 약간 이상한 느낌,하지만 100 % 확신이 있다고 할 수 없다 사실이 아니다경우 (나를 위해 일했다). 다음과 같은 증상이 나타난 경우 :

  • 실제 기기 (내 경우에는 Samsung Galaxy Ace)를 사용하여 작업하고 있습니다.
  • 며칠 동안 계속 개발해 왔어요
  • 휴대 전화는 항상 낮과 밤에 연결되었습니다.
  • 며칠 후에이 오류가 발생하기 시작했으며 계속 악화되고 있습니다.
  • 다른 답변들도 당신을 위해 일 하지 않았습니다 .
  • 당신은 내가 그랬던 것처럼 사임했습니다.

그런 다음 시도하십시오.

  • 당신이 일하지 않을 때 전화를 분리하십시오!

나는 전화를 뽑아서 하루 종일 쉬게했다. 배터리가 조금 닳았습니다. 그 후 다시 연결하고 다시 디버깅을 시작했습니다. 이번에는 모든 것이 잘 작동했습니다! 전과 마찬가지로 정말 괜찮습니다.

이 오류는 일부 배터리 관련 하드웨어 로 인한 것일 수 있습니까? 여전히 이런 식으로 생각하는 것이 이상하게 느껴지지만 지금은 계속해서 전화를 끊습니다.


이 주제의 첫 번째 게시물에 응답하는 중 ...

증상 : 일부 응용 프로그램이 설치되지 않고 공간이 없으며 실제로 내부 및 외부 저장 공간에 충분한 공간이 있다고 말합니다 !!! 해결 방법 : 기본적으로 외부 설치를 비활성화하십시오.

이것으로 defaut에 의한 외부 설치 설정 :

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

삼성 Galaxy Ace 는 사양에 158MB의 내부 스토리지를 광고하지만 핵심 응용 프로그램 및 서비스는 약 110MB를 소비합니다 (이를 검사하기 위해 장치의 작업 관리자를 사용했습니다). 내 앱에는 많은 자산이 있었기 때문에 52MB였습니다. 45MB 이하의 파일을 삭제하면 문제없이 앱을 설치할 수있었습니다. 장치는 여전히 내부 저장소가 거의 가득 찼음을 알리는 중이므로 하나의 앱만 설치했지만 일부 앱을 제거해야합니다.

.apk 번들의 릴리스 버전을 설치 한 다음 제거하면 내 장치에 99MB의 사용 가능한 공간이 표시되어 결국 장치를 어지럽히는 디버깅 정보가 될 수 있습니다. Louis Semprini의 답변을 참조하십시오 .


이클립스에서

Run -- > Debug Configurations --> Select "target", 시작할 에뮬레이터 대상을 선택하십시오.

그런 다음 "추가 에뮬레이터 명령 행 옵션"아래에 다음을 추가하십시오.

파티션 크기 1024

그런 다음 에뮬레이터를 닫고 디버그 아이콘을 클릭하면 선택한 선호하는 에뮬레이터가 시작됩니다.

여기에 이미지 설명을 입력하십시오

도움이 되길 바랍니다 ...!


새로운 Nexus 4와 Adobe AIR로 제작 된 APK에서이 문제가 발생했습니다. 내 매니페스트에 이미 android : installLocation = "preferExternal"이있었습니다. 또한 오버 킬처럼 보이는 옵션 (sdcard와 같은 공유 대용량 저장소에 패키지 설치)을 adb install사용하고 있음을 알았습니다 -s.

-s깃발을 제거하면 adb install문제가 해결되었습니다.


나는 다음을 시도했다.

  • 장치를 다시 시작했습니다
  • 이전 APK 삭제
  • 내 APK를 다시 작성
  • 장치에서 이전 사본을 제거하십시오.
  • 다시 설치

그것이 당신과 똑같이 작동하는지 확인하십시오.


이 문제가 여전히 존재 하므로 개발 목적으로 RacZo의 답변무언가를 추가 할 것이라고 생각했습니다 . Eclipse 플러그인을 사용 하지 않거나 어떤 이유로 든 소스가없고 .apk 만있는 경우 에뮬레이터를 시작할 때 동일한 옵션을 사용하여 명령 행에서 파티션 크기를 늘릴 수 있습니다.

emulator -avd <emulator name> -partition-size 1024

내가 아는 한이 옵션은 developer.android.com에 문서화되어 있지 않으므로 사람들 이이 솔루션을 찾을 수 있도록 여기에 게시 할 것이라고 생각했습니다.


Sideload Wonder Machine을 사용하여 실제 전화에 앱을 설치하면이 오류가 발생했기 때문에이 질문을 보았습니다. 문제는 / payload 디렉토리에 여러 개의 .apk 파일이 있다는 것입니다. 나는 이것이 지원되는 것이라고 생각했지만 하나의 .apk를 제외한 모든 것을 제거하면 오류가 사라졌습니다.


명령 줄에서 에뮬레이터에서 응용 프로그램을 제거하거나 설정으로 이동하여 응용 프로그램을 제거하십시오. 오류가 발생하지 않습니다.


실제 장치를 사용하는 경우 내부 메모리가 부족합니다. Android 설정-> 응용 프로그램 으로 이동하여 일부 앱을 SD 카드로 옮기거나 일부 앱을 제거하십시오.

에뮬레이터를 사용하는 경우 RacZo의 답변을 참조하십시오 .


전체 ROM 업데이트 후 ADB 쉘을 사용하여 SD 카드 디렉토리 에 약 50 개의 앱을 일괄 설치하려고 할 때 동일한 오류가 발생했습니다 .

for x in *.apk; do pm install -r $x; done

그들 중 일부는 설치되었지만 많은 오류가 INSTALL_FAILED_INSUFFICIENT_STORAGE 오류로 실패했습니다. 모든 실패한 앱은 이름에 공백이있었습니다. 배치 이름을 바꾸고 다시 시도했습니다. 이번에는 모두 효과가있었습니다. 나는 재부팅이나 아무것도하지 않았다. 이것이 여러분이 겪고있는 문제는 아니지만 아마도 내가 직면 한 것과 같은 문제로 검색하는 데 도움이 될 수 있습니다.


에뮬레이터 솔루션

열려있는 .Android디렉토리. 일반적으로 홈 디렉토리에 있습니다. 그런 다음 이동 avd하여 변경하려는 avd의 이름이있는 디렉토리를여십시오.

이제 config.ini파일을 편집하고 다음 줄을 추가하거나 다음 줄을 수정하십시오.

disk.dataPartition.size=1024

1024MB 단위로 사용하려는 크기는 어디에 있습니까 ? 파일을 저장 한 후 에뮬레이터를 시작하여 wipe user data확인하십시오. 에뮬레이터의 크기가 새로워졌습니다.


해결책은 간단합니다.

AVD Manager를 엽니 다. AVD를 편집하십시오.

하드웨어 섹션 아래에는 오른쪽에 "New ..."및 "Delete"로 나열된 일부 속성이 있습니다.

새로 작성을 누르십시오. 데이터 파티션 크기를 선택하십시오. "512MB"로 설정하십시오 (MB 필요). 그리고 당신은 끝났습니다. 여전히 문제가 발생하면 동일한 방법으로 시스템 및 캐시 파티션을 늘리십시오.

여기에 모두 문서화되어 있습니다 : http://developer.android.com/guide/developing/devices/managing-avds.html


에뮬레이터를 실행하는 동안 안드로이드 장치를 USB로 연결하지 마십시오


에뮬레이터에서 응용 프로그램을 실행 중이고이 문제가 지속되면 알림 관리자를 확인하십시오. "전화 메모리가 가득 찼습니다"라는 아이콘과 알림이 표시되면 이미 에뮬레이터에 너무 많은 응용 프로그램을 설치했음을 의미합니다. "설정 >> 응용 프로그램 관리 >> 응용 프로그램 선택 >> 제거"에서 현재 원하지 않는 여러 응용 프로그램을 제거하십시오.
그 세트.
이제 프로그램을 다시 실행하십시오.


Eclipse로 테스트 / 디버깅하기 위해 전화를 사용할 때 오늘이 오류가 발생했습니다.

내 오류는 응용 프로그램 이름에 노르웨이어 특수 문자 ( "æ", "ø", "å")를 사용했다는 것입니다. 앱 이름을 리팩터링했을 때 ( "ø"대신 "o"사용) 앱이 올바르게 설치되었습니다.

아마 당신의 문제는 아니지만 다른 사람들이 같은 오류를 겪을 수 있습니다.


이 스레드에서 다른 모든 것을 시도한 후 .apk 파일의 경로가 너무 길어서 자체 문제가 있음을 알았습니다. 그래서 나는 .apk가 있었고 디렉토리에 cd'ed했다 :

cd /Very/Long/Path/To/Package/
adb install mypackage.apk

대신에

adb install /Very/Long/Path/To/Package/mypackage.apk

그리고 그것은 잘 작동했습니다 ... 잘 설치되었습니다.

이것이 다른 사람에게 도움이 될 것이라고 생각했습니다.


제 경우에는 eclipse.ini 에서 -Xmx768m 값을 변경하여 이클립스의 확장 메모리를 늘려서 고쳤 습니다.


장치에서 앱을 제거한 다음 Eclipse에서 다시 설치했습니다. 이것은 정기적으로 사용하면서 장치에서 항상 얻는 문제이지만 오늘날 개발에서 그 메시지를 받았습니다.


해결 방법 :

없이 2.1로 컴파일하십시오 android:installLocation="preferExternal".

확인?

를 포함하여 2.2로 컴파일하십시오 android:installLocation="preferExternal".

이것은 여전히 ​​8 미만의 SDK 버전에 설치됩니다 (XML 태그는 무시 됨).


나도 같은 문제에 직면하여 "공장 데이터 재설정"을 수행 한 후 제대로 작동했습니다.


휴대 전화에서 루트 액세스 권한이 없으며 SD 카드에 앱을 설치할 준비가되지 않았습니다. 15MB의 여유 공간이 /data/있으며 내 응용 프로그램이 2MB 미만입니다.

잠시 동안 나는 Eclipse 프로젝트를 청소하고 전화를 다시 시작했지만 결국 작동이 멈췄습니다 (아마 업데이트 후).

내 응용 프로그램 캐시를 정리하면 문제가 해결되었으며 전화를 다시 시작하거나 앱을 제거 할 필요가 없습니다.

시장에 여러 응용 프로그램의 캐시를 한 번에 지우는 데 사용할 수있는 응용 프로그램이 있습니다. "깨끗한"을 검색하십시오.

참고 URL : https://stackoverflow.com/questions/4709137/solution-to-install-failed-insufficient-storage-error-on-android



반응형