Co to oznacza: błąd [INSTALL_FAILED_CONTAINER_ERROR]?

129

Próbuję wdrożyć aplikację i czasami pojawia się ten błąd:

Failure 
[INSTALL_FAILED_CONTAINER_ERROR] 

Próbowałem go wygooglować, ale nie znalazłem, co oznacza błąd ani przez co jest spowodowany. Wdrażam przez IDE (IntelliJ), plik jest kopiowany na urządzenie do / data / local / tmp (nieukorzeniony Huawei Ideos, działający 2.2), ale menedżerowi pakietów to nie lubi. Przed zainstalowaniem apk wcześniej usunąłem aplikację z urządzenia. Upewniłem się również, że na urządzeniu nie ma starego pliku w / data / local / tmp. Nadal pojawia się ten błąd. Pakiet powinien być podpisany kluczem debugowania, ponieważ wdrażam za pośrednictwem IDE, „uruchamiając” aplikację.

$ pwd 
/data/local/tmp 
$ ls -l 
-rw-rw-rw- shell    shell    17257686 2011-04-21 20:31 
com.company.shop 
$ pm install -r com.company.shop 
        pkg: com.company.shop 
Failure [INSTALL_FAILED_CONTAINER_ERROR]

Co to oznacza i jak go rozwiązać?

Edycja / aktualizacja:

Mogę uniknąć błędu, gdy nie zezwalam na zainstalowanie aplikacji na karcie SD, ustawienie

android:installLocation="internalOnly"

w manifeście. Jest ok do programowania, ale do produkcji, nie jest to, czego chcę - ponieważ moja aplikacja jest dość duża i ma 17 MB; dlatego wolę, aby był na sdcard. Jak kiedykolwiek móc zainstalować go w pamięci zewnętrznej bez rootowania (ponieważ jest to jedyny sposób, w jaki mogłem usunąć /mnt/secure/asec/smdl2tmp1.asec, który również wydaje się być jednym z rozwiązań).

Mathias Conradt
źródło
Tak z ciekawości: czy możesz go zainstalować przez pm install -f com.company.shop?
Jakub Czaplicki
Istnieje kilka odmian tego INSTALL_FAILED_CONTAINER_ERRORproblemu, dla niektórych z nich moja odpowiedź znajduje się tutaj: stackoverflow.com/a/30343659/313113
Alex Bitek
Dla mnie było to tak proste, jak "brak miejsca" w emulatorze (???) i musiałem wyczyścić dane w menedżerze AVD.
EpicPandaForce

Odpowiedzi:

44

usuń ten plik z urządzenia

/mnt/secure/asec/smdl2tmp1.asec

Edycja / aktualizacja autorstwa Mathiasa Conradta (OP):

Jeśli nie masz uprawnień roota, musisz zamontować sdcard i usunąć ją z komputera:

/.android_secure/smdl2tmp1.asec
Mathias Conradt
źródło
3
ale moje urządzenie nie jest zrootowane i patrząc na bezpieczny folder, tylko root ma dostęp. Wcześniej udało mi się uruchomić aplikację, ale od jakiegoś czasu nie mogę jej uruchomić i daje powyższy błąd.
Mathias Conradt,
1
btw - tam też folder / mnt / ASEC / że mogę osiągnąć z braku korzeni, ale to jest pusta
Mathias Conradt
3
@Jazz Przydarzyło mi się to dzisiaj. Naprawdę chciałbym wiedzieć, dlaczego / o co w tym chodzi. Usunąć plik ręcznie? Dlaczego zaćmienie nie mogło tego zrobić? Czy to błąd telefonu?
Erik,
1
mam ten problem. Nie widzę plików / folderów na moim Macu. czy jest inny sposób?
SleepNot
14
To zadziałało, ale czy możesz wyjaśnić, dlaczego tak się dzieje? Co znajduje się w tajemniczym pliku smdl2tmp1.asec?
Alexander Pacha
222

Zmień lokalizację instalacji z

android:installLocation="preferExternal"

w

android:installLocation="auto"

w pliku AndroidManifest.xml projektu.

Rene
źródło
12
To właśnie zrobiło to dla mnie. Dzięki!
Jim McKeeth,
Tak, to też zrobiło to dla mnie. Dzięki!
Senthil Kumaran
22
ale chcę preferować Zewnętrzne ...? Jak to naprawić?
Aiden Fry
2
@Sameer nie, dzieje się tak również na prawdziwych urządzeniach - ale jest niespójne. Główne z nich to urządzenia HTC Desire S i Nexus.
Aiden Fry
1
@AidenFry Użyj rozwiązania user2445968, jeśli chcesz zachować preferExternal.
LG,
32

Jeśli używasz emulatora, edytuj go i dodaj więcej pamięci. Miałem problem taki jak ten i jedyne co zrobiłem, to edytować pamięć mojego AVD z 200 MB do 1000 MB i problem wydaje się znikać ... Powodzenia.

Dan
źródło
Tak, to samo stało się ze mną. Kciuki w górę :)
NaXir
Oprócz zwiększenia pamięci musiałem też wyczyścić dane użytkownika i dopiero po tym nowy rozmiar odbijał się i błąd zniknął.
Varun
2
Czy mogę zgadnąć, że odnosisz się do pamięci wewnętrznej, a nie pamięci RAM?
Jonny
1
Zwiększyłem pamięć mojego AVD, a następnie wyczyściłem dane! a teraz działa.
Spotkaj się z Vorą
7

Oznacza to, że wcześniejsza instalacja była uszkodzona. Jeśli instalujesz na zewnętrznym, sugerowałbym sformatowanie karty SD i spróbuj ponownie.

dalbator
źródło
6

Wielokrotnie miałem ten błąd. Odkryłem, że najprostszym sposobem uniknięcia błędu w całości jest po prostu sformatowanie karty SD. Korzystanie z wewnętrznych narzędzi telefonu lub emulatorów. Odkryłem, że automatycznie generowane karty SD lub nawet tworzenie własnego sdcard.iso nie powiodło się i powoduje ten błąd, chyba że zostanie sformatowany przez wewnętrzne narzędzia Androida.

user2445968
źródło
1
Witamy w Stack Overflow! Dzięki za Twój post! Prosimy nie używać podpisów / sloganów w swoich postach. Twoja skrzynka użytkownika liczy się jako Twój podpis i możesz używać swojego profilu do publikowania dowolnych informacji o sobie. Często zadawane pytania dotyczące podpisów / sloganów
Andrew Barber
Rozwiązano to tym samym rozwiązaniem, ponieważ problem jest spowodowany błędem podczas zapisywania na karcie SD, jest to lepsze rozwiązanie niż zestaw roboczy Rene, jeśli chcesz zachować androida: installLocation = "preferExternal".
LG,
Potwierdzać. Błąd na SD był powodem mnie. Testowałem to usuwając "preferuj zewnętrzne" z manifestu - jest zainstalowany poprawnie.
djdance
4

U mnie było to spowodowane brakiem miejsca na karcie SD mojego emulatora. Pracowałem z dość dużym projektem i myślałem, że 40 MB wystarczy, ale zmieniłem go na 200 MB i problem zniknął.

noisecapella
źródło
4

Wystąpił ten sam błąd z różnymi .apkna Cyanogenmod 12.1 (Android 5.1.1) w mojej Note 8 z drugą partycją dla Link2SD. Udało mi się zainstalować aplikacje, wymuszając instalację przez adb jako root:

adb root
adb install -f myapp.apk
Tobi G.
źródło
3

Otrzymałem ten komunikat o błędzie z Androida 5.0.1. Zmieniłem preferowaną lokalizację instalacji na „Wymienna karta SD” poprzez Ustawienia-> Aplikacje-> Preferowana lokalizacja instalacji.

Zmieniłem opcję z powrotem na „Niech system zdecyduje” i komunikat o błędzie zniknął.

nyxee
źródło
1
Wydawało się, że to rozwiązanie dla mnie działające z Cyanogenmod 12 (Android 5.0.2). To otwarcie wydawało się wymuszać instalację aplikacji na wymiennej karcie SD, mimo że manifest aplikacji wskazywał, że nie można jej tam zainstalować.
Sam
1

Dla mnie był to język urządzenia. Zmieniłem język na arabski, żeby przetestować swoją aplikację. Wtedy otrzymałem ten błąd. Przywrócenie języka załatwiło sprawę.

Elyess Abouda
źródło
1

android: installLocation = "auto" działa .. !!

Jeśli nie, raz sprawdź rozmiar zewnętrznej przestrzeni dyskowej. [Dostępna pamięć> rozmiar aplikacji] Jeśli przestrzeń dyskowa nie jest wystarczająca, również ten błąd jest zgłaszany.

Mallikarjungouda Annigeri
źródło
0

Miałem podobny problem z emulatorem. Zniknął, gdy zmieniłem typ procesora emulatora z ARM na Intel.

Wytas
źródło
To naprawdę nie pomaga OP w rozwiązaniu problemu, ponieważ obawiają się, że zadziała na rzeczywistych urządzeniach, z których wiele nadal korzysta z procesorów ARM.
James Green
0

w niektórych sytuacjach usunięcie libs/android-support-v4.jargeneruje ten błąd.

Amir Saniyan
źródło
0

U mnie odinstalowanie kilku aplikacji rozwiązało problem. Gdy lokalna pamięć ma wystarczającą ilość pamięci, wdrożenie APK zakończyło się pomyślnie. Ale zwykle po prostu ponownie uruchamiam gadżet i instalacja jest zakończona. Mogą też pomóc niektóre programy, takie jak Clean Master. Po prostu często wyczyść nieużywane procesy i zamknij programy za pomocą Clean Master i uzyskaj wystarczającą ilość pamięci.

CoolMind
źródło
0

Ponowne uruchomienie urządzenia rozwiązało problem.

theOzmic
źródło