INSTALL_FAILED_INSUFFICIENT_STORAGE
Błąd jest zmorą życia każdego Android dewelopera. Dzieje się tak bez względu na rozmiar aplikacji lub ilość dostępnego miejsca. Ponowne uruchomienie urządzenia docelowego krótko rozwiązuje problem, ale wkrótce wróci. Istnieją setki (jeśli nie tysiące) postów na forach dyskusyjnych od osób pytających, dlaczego problem występuje, ale ludzie w Google są frustrująco milczący na ten temat.
Istnieje proste obejście. Jeśli na urządzeniu testowym działa system Android 2.2 lub nowszy, dodaj android:installLocation
atrybut do pliku manifestu aplikacji wraz z wartością "preferExternal"
. Wymusi to zainstalowanie aplikacji w zewnętrznej pamięci urządzenia, na przykład na karcie SD telefonu.
Na przykład:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.andrewsmith.android.darkness"
android:installLocation="preferExternal"
Jest to raczej pomoc dla zespołu niż poprawka i może nie być idealna, jeśli chcesz, aby gotowa aplikacja była instalowana w pamięci wewnętrznej urządzenia. Ale przynajmniej sprawi, że proces rozwoju będzie o wiele mniej frustrujący.
źródło
Odpowiedzi:
Jest to tylko tymczasowe obejście, a nie prawdziwa poprawka.
Po tym, jak mi się to przytrafiło i nie byłem zadowolony z obecnych odpowiedzi, zacząłem pracować, próbując to rozgryźć ze źródła AOSP. Znalazłem PRAWDZIWE rozwiązanie.
Wyjaśnienie
Po pierwsze, trochę (uproszczone) tło na temat instalacji i aktualizacji Androida
Problem, który ma większość z nas, występuje, gdy aplikacja jest aktualizowana, ale usuwanie starego pliku APK kończy się niepowodzeniem. Co samo w sobie jeszcze nie powoduje niepowodzenia aktualizacji, ale powoduje, że są w nim dwa pliki APK
/data/app
.Przy następnej próbie aktualizacji aplikacji system nie może przenieść pliku tymczasowego, ponieważ ani (1.apk), ani (2.apk) nie są puste. Ponieważ File # renameTo (File) nie zgłasza wyjątku, ale zamiast tego zwraca logiczny menedżer pakietów PackageManager, nie ma żadnego sposobu, aby powiedzieć, dlaczego zwraca INSTALL_FAILED_INSUFFICIENT_STORAGE, mimo że niepowodzenie nie miało nic wspólnego z ilością wolnego miejsca.
Rozwiązanie
Biegać:
LUB
Odinstaluj aplikację
Użyj swojej ulubionej metody, aby usunąć ZARÓWNO :
Upewnij się, że nic innego nie blokuje przyszłych instalacji w podobny sposób. W moim przypadku miałem
/data/app-lib/<full.package.name>-1
katalog, który został w pobliżu! W takim przypadku zadziałała instalacja na karcie SD , a następnie przeniesienie do pamięci wewnętrznej. (Tworzenie/data/app-lib/<full.package.name>
bez-1
zakończenia).Dlaczego działały inne „rozwiązania”
Kod instalowania w pamięci zewnętrznej jest znacznie inny, co nie powoduje tych samych problemów
Odinstalowanie aplikacji usuwa tylko jedną wersję pliku APK z
/data/app
. Dlatego możesz go ponownie zainstalować, ale nie możesz go zaktualizować.Ilość wolnego miejsca w emulatorze nie jest tak naprawdę istotna, gdy wystąpi ten błąd
źródło
function fix_app { adb shell "pm uninstall ${1}; rm -rf /data/app/${1}-*; su -c 'rm -rf /data/app-lib/${1}-*'" }
$ fix_app com.facebook.katana
android:installLocation="preferExternal"
ale na próżno, w moim przypadku nic nie działa. Do testowania używam prawdziwego urządzenia. Jakie jest rozwiązanie w tym przypadku?/data/local/tmp
Musisz zwiększyć pojemność pamięci emulatora Androida. Są na to dwa sposoby:
Kliknij prawym przyciskiem myszy katalog główny projektu Android, przejdź do „Uruchom jako”, a następnie do „Uruchom konfiguracje ...”. Znajdź węzeł „Aplikacja na Androida” w drzewie po lewej stronie, a następnie wybierz swój projekt i przejdź do zakładki „Cel” po prawej stronie okna i spójrz w dół na pole „Dodatkowe opcje wiersza poleceń emulatora” (czasami „ Będę musiał powiększyć okno) i na końcu wkleić tam „-partition-size 1024”. Kliknij Zastosuj, a następnie Uruchom, aby użyć emulatora.
Przejdź do Preferencji Eclipse , a następnie wybierz „Uruchom” Dodaj „rozmiar partycji 1024” w polu „Domyślna opcja emulatora”. Kliknij „Zastosuj” i używaj swojego emulatora jak zwykle.
źródło
Dziękujemy za opublikowanie tego pytania. Mam dodatkowe informacje, które mogą pomóc niektórym programistom.
Debuguję moją aplikację na urządzeniu (nie emulatorze). Urządzenie ma 21 MB wolnego miejsca
/data
(jak ujawnia „df” podczas wykonywania „powłoki adb”), a moja aplikacja ma tylko 5 MB. Odkryłem jednak, że jeśli usunę inne aplikacje na urządzeniu (bez ponownego uruchamiania telefonu lub ponownego uruchomienia adbd), INSTALL_FAILED_INSUFFICIENT_STORAGE odejdzie na chwilę, a następnie wróci.Wygląda więc na to, że debugowanie mojej aplikacji o pojemności 5 MB wymaga więcej niż 20 MB miejsca
/data
, a ponadto za każdym razem coś przeciekało.Więc zrobiłem „adb shell” i wymieniłem
/data
katalog CAŁEI spojrzałem na wyjście 5000-liniowe, aby zobaczyć, dokąd zmierza cała przestrzeń.
Odkryłem ogromne ilości zmarnowanego miejsca na moim urządzeniu w
/data/klog
katalogu w postaci starych plików dziennika z miesięcznych sesji debugowania.To nie były moje pliki dziennika: zostały utworzone przez jakąś część infrastruktury Androida.
Usunąłem je i natychmiast zapisałem 58 MB, które nie zostały przypisane w aplikacji Ustawienia żadnej konkretnej aplikacji. Mam małe urządzenie, więc 58 MB jest bardzo znaczące (około 40%).
Jak dotąd nie otrzymałem INSTALL_FAILED_INSUFFICIENT_STORAGE po wielu uruchomieniach. Miejmy nadzieję, że to był prawdziwy problem, chociaż OP sugeruje, że jego urządzenie miało dużo miejsca (ale nie powiedziało ile).
Mam nadzieję, że niektórzy z was będą mogli uciec z INSTALL_FAILED_INSUFFICIENT_STORAGE poprzez okresowe usuwanie
/data/klog/*
.Albo można zrobić przynajmniej
ls -a -l -R
w/data
, aby zobaczyć, gdzie wszystkie miejsca będzie, jeśli rzeczywiście tam jest naprawdę niektóre (ukryty) Emisja przestrzeń.źródło
ls
polecenie stało sięls -alR
du
wyświetla tylko foldery.Pomaga:
Otwórz powłokę na urządzeniu
Przejdź do katalogu tymczasowego, w którym przychodzący pakiet APK jest najpierw kopiowany
Wyświetl dostępne pliki i usuń według potrzeb
Do tej pory było to dla mnie niezawodne na rzeczywistym urządzeniu.
EDYCJA: Okazało się, że nie jest to tak niezawodne rozwiązanie jak powyższe.
Wypróbowałem kilka rozwiązań. Nic tak naprawdę nie pomogło. W końcu znalazłem aplikację o nazwie SD Maid . To pomogło.
Mówi, że funkcjonalność jest ograniczona na nierootowanych urządzeniach. Mój jest zrootowany, więc dobrze byłoby usłyszeć od ludzi skuteczne, że tak jest w tych scenariuszach i jeśli byłby to tylko przypadek, że zadziałało dla mnie (i tak jest to nieprzewidywalny problem).
UWAGA: Nie mam nic wspólnego z aplikacją. Właśnie znalazłem to podczas wyszukiwania.
źródło
Rozwiązałem go, umieszczając
android:installLocation="auto"
wewnątrz<manifest>
tagu w pliku AndroidManifest.xml.źródło
Error: ADB exited with exit code 1 adb: failed to install build\app\outputs\apk\app.apk: Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE] Error launching application on Android SDK built for x86.
Dodałem dodatkową linię do pliku manifestu aplikacji, czyli
android:installLocation="preferExternal"
. użycie tej linii wymusza zainstalowanie aplikacji w pamięci zewnętrznej. patrz przykład poniżej,źródło
Powiązanym problemem na emulatorze jest brak miejsca w
/data
partycji.Na przykład,
Oto przykładowy widok
/data/app
katalogu:Usunąłem dodatkowe pliki APK . Wydaje się, że przy każdej instalacji otrzymujesz nowy plik APK. Po prostu usuń dodatkowe pliki APK.
Na przykład,
źródło
W moim przypadku awaria była spowodowana przez
com.android.providers.media
aplikację. Stawiłem temu czoła na emulatorze Androida x86. Co ja zrobiłem:Za mało wolnego miejsca na
/data
Prawie wszystko pochłonęła jedna aplikacja! To aplikacja systemowa, więc uważam, że lepiej jej nie usuwać. Zamiast tego wyczyściłem dane aplikacji.
Dysk został wyczyszczony i aplikacja została pomyślnie zainstalowana.
źródło
Czuję się trochę dziwnie pisząc to, ale nie mogę być w 100% pewien, że w niektórych przypadkach nie jest to prawda (zadziałało dla mnie). Jeśli wystąpiły następujące objawy:
Następnie spróbuj tego:
Odłączyłem telefon i zostawiłem go na CAŁY DZIEŃ. Moja bateria trochę się zużyła. Następnie ponownie go podłączyłem i ponownie rozpocząłem debugowanie. Tym razem wszystko działało dobrze! I mam na myśli naprawdę NAPRAWDĘ w porządku, tak jak wcześniej.
Czy to możliwe, że ten błąd może być spowodowany przez niektóre elementy sprzętowe związane z baterią ? Wciąż myślenie w ten sposób jest dziwne, ale teraz co jakiś czas odłączam telefon (i na noc) i problem nie powrócił.
źródło
Odpowiadając na pierwszy post tego tematu ...
Objaw: Niektóre aplikacje nie instalują się, mówiąc, że nie ma miejsca, a w rzeczywistości jest dużo wolnego miejsca zarówno w pamięci wewnętrznej, jak i zewnętrznej !!! Rozwiązanie: domyślnie wyłącz instalację zewnętrzną.
Ustawienie zewnętrznej instalacji przez defaut z tym:
Uniemożliwia instalację w wielu aplikacjach, których nie można zainstalować zewnętrznie (takich jak Adblock +)
Zatem rozwiązaniem jest
Lub
źródło
Próbowałem następujące:
Sprawdź, czy to działa z tobą tak samo.
źródło
Samsung Galaxy Ace reklamuje w swoich specyfikacjach 158 MB pamięci wewnętrznej, ale podstawowe aplikacje i usługi zużywają około 110 MB (w celu sprawdzenia tego użyłem menedżera zadań na urządzeniu). Moja aplikacja miała 52 MB, ponieważ miała wiele zasobów. Po usunięciu niektórych z nich do 45 MB aplikacja bez problemu zainstalowała się. Urządzenie wciąż ostrzega mnie, że pamięć wewnętrzna jest prawie pełna i powinienem odinstalować niektóre aplikacje, mimo że zainstalowałem tylko jedną.
Po zainstalowaniu wersji pakietu .apk, a następnie jej odinstalowaniu, moje urządzenie wyświetla 99 MB wolnego miejsca, więc może to być mimo wszystko informacja debugująca urządzenie. Zobacz odpowiedź Louisa Sempriniego .
źródło
W Eclipse
Run -- > Debug Configurations --> Select "target",
i wybierz preferowany cel emulatora do uruchomienia.Następnie poniżej „dodatkowych opcji wiersza poleceń emulatora” dodaj:
Następnie ZAMKNIJ emulator i kliknij ikonę debugowania, która uruchomi wybrany emulator.
Mam nadzieję, że to pomoże...!
źródło
Android Virtual Device Manager
użytkowników. Możesz ustawić rozmiar partycji na 1024 jako „Pamięć wewnętrzna”, która reprezentujedisk.dataPartion.size
Wystąpił ten problem z moim nowym Nexusem 4 i pakietem APK zbudowanym w środowisku Adobe AIR. Miałem już Androida: installLocation = "preferExternal" w moim manifeście. Zauważyłem, że dzwoniłem również
adb install
z-s
opcją (Zainstaluj pakiet na wspólnej pamięci masowej, takiej jak sdcard.), Co wydawało się przesadą.Usunięcie
-s
flagi zadb install
rozwiązało problem dla mnie.źródło
Ponieważ ten problem nadal istnieje, pomyślałem, że dodam coś do odpowiedzi RacZo w celach programistycznych. Jeśli nie używasz wtyczki Eclipse lub z jakiegokolwiek powodu nie masz źródła, ale tylko .apk, możesz zwiększyć rozmiar partycji z wiersza poleceń, używając tej samej opcji podczas uruchamiania emulatora:
O ile mi wiadomo, ta opcja nie jest udokumentowana na developer.android.com, więc pomyślałem, że opublikuję ją tutaj, aby ludzie mogli znaleźć to rozwiązanie.
źródło
avd
Natknąłem się na to pytanie, ponieważ otrzymywałem ten błąd za pomocą Sideload Wonder Machine do instalowania aplikacji na moim prawdziwym telefonie. Znalazłem problem polegający na tym, że miałem wiele plików apk w katalogu / payload. Myślałem, że to było obsługiwane, ale kiedy usunąłem wszystkie pliki z wyjątkiem jednego .apk, błąd zniknął.
źródło
Wystarczy odinstalować aplikację z emulatora z wiersza polecenia lub przejść do ustawień i odinstalować aplikację. Zapobiegnie to pojawianiu się błędu.
źródło
Jeśli używasz prawdziwego urządzenia, po prostu kończy Ci się pamięć wewnętrzna. Wystarczy przejść do ustawień Androida -> Aplikacje i przenieść niektóre aplikacje na kartę SD lub odinstalować niektóre aplikacje.
Jeśli używasz emulatora, zobacz odpowiedź RacZo .
źródło
Ten sam błąd napotkałem, próbując wsadowo zainstalować około 50 aplikacji w katalogu kart SD za pomocą powłoki ADB po pełnej aktualizacji ROM:
Niektóre z nich zostały zainstalowane, ale wiele z nich zakończyło się błędem INSTALL_FAILED_INSUFFICIENT_STORAGE. Wszystkie nieudane aplikacje miały miejsce w nazwie. Zmieniłem nazwę partii i spróbowałem ponownie. Tym razem wszystko działało. Nie zrestartowałem się ani nic. Być może nie jest to problem, z którym musicie się zmierzyć, ale może to pomóc komuś, kto szuka tego samego problemu, co ja.
źródło
Rozwiązanie emulatora
Otwórz swój
.Android
katalog. Zwykle w twoim katalogu domowym. Następnie przejdź do,avd
a następnie otwórz katalog o nazwie avd, który chcesz zmienić.Teraz edytuj
config.ini
plik i dodaj następujący wiersz lub zmodyfikuj następujący wiersz:disk.dataPartition.size=1024
Gdzie
1024
jest rozmiar, którego chcesz użyć w MB. Zapisz plik, a następnie uruchom emulatorwipe user data
zaznaczony. Twój emulator powinien teraz mieć nowy rozmiar.źródło
Rozwiązanie jest proste.
Otwórz Menedżera AVD. Edytuj swój AVD.
W dolnej części sekcji sprzętu znajdują się właściwości wymienione po prawej stronie „Nowe ...” i „Usuń”.
Naciśnij Nowy. Wybierz rozmiar partycji danych. Ustaw na „512 MB” (MB jest wymagany). I jesteś skończony. jeśli nadal występują problemy, zwiększ również system i partycje pamięci podręcznej, korzystając z tej samej metody.
Wszystko zostało udokumentowane tutaj: http://developer.android.com/guide/developing/devices/managing-avds.html
źródło
Upewnij się, że nie podłączasz urządzenia z systemem Android do USB podczas próby uruchomienia emulatora
źródło
Jeśli aplikacja jest uruchomiona na emulatorze i problem występuje nadal, sprawdź menedżera powiadomień. Jeśli wyświetli się ikona i powiadomienie o „Pamięć telefonu jest pełna”, oznacza to, że zainstalowałeś już tak wiele aplikacji w emulatorze. Odinstaluj kilka aplikacji, których obecnie nie chcesz z „Ustawienia >> Zarządzaj aplikacją >> Wybierz aplikację >> Odinstaluj”.
Ten zestaw.
Teraz uruchom ponownie program.
źródło
Ten błąd pojawia się dzisiaj, gdy używam mojego telefonu do testowania / debugowania za pomocą Eclipse.
Mój błąd polegał na tym, że użyłem norweskiego znaku specjalnego („æ”, „ø”, „å”) w nazwie aplikacji. Gdy zmieniłem nazwę aplikacji (używając „o” zamiast „ø”) aplikacja została poprawnie zainstalowana.
Prawdopodobnie nie jest to twój problem, ale może być zauważony, że inni ludzie otrzymują ten sam błąd.
źródło
Po wypróbowaniu wszystkiego innego w tym wątku dowiedziałem się, że mój własny problem był spowodowany zbyt długą ścieżką do pliku .apk. Więc zapisałem się w katalogu, w którym był plik .apk i zrobiłem:
zamiast
I działało ... zainstalowane dobrze.
Pomyślałem, że to może pomóc komuś innemu.
źródło
Obejście:
Skompiluj jako 2.1 bez
android:installLocation="preferExternal"
.OK?
Skompiluj jako 2.2, w tym
android:installLocation="preferExternal"
.Będzie to nadal instalować w wersji SDK mniejszej niż 8 (tag XML jest ignorowany).
źródło
W moim przypadku zostało to naprawione poprzez zwiększenie rozszerzonej pamięci eclipse, poprzez zmianę wartości -Xmx768m w eclipse.ini
źródło
Ostatecznie odinstalowałem aplikację z urządzenia, a następnie ponownie zainstalowałem ją w Eclipse. Jest to problem, który ciągle pojawia się na moim urządzeniu przy regularnym użytkowaniu, ale dziś dostałem ten komunikat od programisty.
źródło
Ja również napotkałem ten sam problem i wykonałem „przywracanie danych fabrycznych”, a potem wszystko działało dobrze.
źródło
Nie miałem dostępu do konta root na telefonie i nie jestem przygotowany na zainstalowanie mojej aplikacji na karcie SD. 15 MB miejsca jest dostępne na,
/data/
a moja aplikacja ma mniej niż 2 MB.Przez jakiś czas sobie radziłem; czyszczenie projektu Eclipse i ponowne uruchamianie telefonu, ale ostatecznie przestało działać (prawdopodobnie po aktualizacji).
Czyszczenie pamięci podręcznej aplikacji rozwiązało problem i nie wymaga ponownego uruchomienia telefonu ani odinstalowania aplikacji.
Na rynku dostępne są aplikacje, których można użyć do wyczyszczenia pamięci podręcznej wielu aplikacji jednocześnie. Wyszukaj „czyste”.
źródło