Błąd [INSTALL_FAILED_INVALID_APK]

85

Kiedy klikam, aby uruchomić projekt, który właśnie utworzyłem w Android Studio 0.2.10 i wybieram mojego Androida (podłączony przez USB z debugowaniem przez USB), pojawia się ten błąd:

Waiting for device.
Target device: 0123456789ABCDEF
Uploading file
    local path: /Users/Rui/AndroidStudioProjects/FirstAppProject/FirstApp/build/apk/FirstApp-debug-unaligned.apk
    remote path: /data/local/tmp/rui.firstapp
Installing rui.firstapp
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/rui.firstapp"
pkg: /data/local/tmp/rui.firstapp
Failure [INSTALL_FAILED_INVALID_APK]

Masz jakiś pomysł, co to może być?

RuiG
źródło
Wybierz mój telefon ... !! Czy chodziło Ci o emulator ... ??
Gokul Nath KP
1
Nie, mój Android z włączonym debugowaniem przez USB.
RuiG
Czy upewniłeś się, że aplikacja jest zgodna z używanym urządzeniem? Sprawdź wartości MinSDKi TargetSDKw swoim manifeście. Czy próbowałeś zainstalować to w emulatorze? Spowoduje to zawężenie, czy problem dotyczy pliku APK, czy urządzenia.
free3dom

Odpowiedzi:

153

Dostawałem to w Android Studio i wszystko, co zrobiłem, aby to naprawić, to poszło "Build" > "Clean Project"i po prostu działało.

Francois Dermu
źródło
8
Jeśli nadal nie działa, zadziała kompilacja -> Przebuduj projekt po wyczyszczeniu projektu.
Pei
Właśnie to dostałem wraz z aktualizacją z wersji 5.4.1 do 5.6.1 - nie jestem pewien, co spowodowała dziwność, ale duże aktualizacje gradle z pewnością mogą. Alternatywnym rozwiązaniem wiersza poleceń jest ./gradlew cleanzwykłe polecenie kompilacji
Mike Hardy
18

Po prostu usuń stary pakiet APK android / app / build / output / apk / debug / app-debug.apk z folderu. to wszystko. miłego kodowania ...

mahendren
źródło
Witamy @VenkateshMogili
mahendren
1
rm -fr android/app/build/outputs/apk/debug/
felansu
15

Kiedyś napotkałem podobny problem, zauważyłem, że nazwa pakietu w moim Androidmanifest.xml została rozpoczęta od jednego pustego znaku spacji. like " com.example.test" instead of "com.example.test"

Usunąłem wszystkie takie nieprawidłowe spacje z mojego pliku manifestu, rozwiązało to mój problem

Edycja 1 : „-” w nazwie pakietu również powoduje ten sam problem w niektórych wersjach Androida

Achil
źródło
1
Łał! Myślałem, invalidate cache and restartże wymusi to czystą konstrukcję, ale najwyraźniej tak nie jest.
GabrielOshiro
10

Miałem ten sam problem, ale żadne z rozwiązań nie zadziałało. Problem polegał na tym, że nie miałem . separatory w nazwie mojego pakietu.
tzn. jeśli nazwa twojego pakietu to moja.nazwa_pakietu, wszystko w porządku, ale nie może to być po prostu moja_nazwa_pakietu.
Mam wskazówkę z tego raportu o błędzie.

https://code.google.com/p/android/issues/detail?id=55841

Hadi
źródło
9

Jeśli ktoś nadal ma problem, to Kompiluj-> Wyczyść projekt, a następnie Kompiluj-> Odbuduj projekt w końcu Synchronizuj projekt z plikiem Gradle .

Sandeep PC
źródło
8

Jak rozwiązać ten problem:

  1. zainstalować RootExplorer
  2. Utwórz nowy tmpfolder na karcie SD
  3. Długo naciśnij folder tmp i wybierz Linkten folder (ostatnia opcja w menu)
  4. Idź do /data/local/i dotknij przycisku CREATE LINKod dołu
Liviu
źródło
8

Miałem ten problem i żadne z powyższych rozwiązań nie zadziałało.

Z jakiegoś powodu uprawnienia w moim /data/local/tmpkatalogu nie zostały ustawione poprawnie (tylko root miał rwx). Naprawiłem problem za pomocą ADB (będziesz potrzebować zrootowanego urządzenia):

  1. Podłącz telefon przez USB
  2. Uruchom ADB za pomocą adb shell
  3. Przejdź do /data/localużywaniacd /data/local
  4. Przejdź do trybu roota za pomocą su
  5. Zezwalaj na odczyt / zapis / wykonanie w tmpkatalogu przy użyciuchmod 777 tmp
  6. Odłącz, uruchom ponownie Android Studio i ponownie podłącz urządzenie
infl3x
źródło
7

Wyłączenie Instant Run rozwiązało mój problem. Do tej pory nie znam żadnego wyjaśnienia. Po migracji do Android Studio 3.0 zaczyna się taki problem. Mam nadzieję, że to pomoże komuś w przyszłości.

bluetoothfx
źródło
6

Kiedy napotkałem ten problem, naprawiłem go, upewniając się, że nazwa pakietu AndroidManifest.xml jest taka sama, jak identyfikator aplikacji build.grade.

Anonsage
źródło
3

Znalazłem inny powód tego błędu. Jeśli zrootowałeś swoje urządzenie, uprawnienia dostępu do / data / local / tmp mogą ulec zmianie, więc adb nie może uzyskać dostępu do tego pliku tymczasowego. Rozwiązaniem jest utworzenie folderu „tmp” na karcie SD i utworzenie do niego dowiązania symbolicznego w / data / local / (przez powłokę ADB lub Root Explorer).

0neel
źródło
Nie mogłem w to uwierzyć: sprawdzono krzyżowo z innym urządzeniem (wszystkie uprawnienia wydawały się identyczne, aż do poziomu roota); majstrował przy uprawnieniach (uczynił je 777 równymi) - nie ma mowy. Więc co stracić. Wypróbowałem link symboliczny - wow! Działa (+1). Nadal chciałbym wiedzieć, dlaczego i co się za tym kryje. W moim przypadku nie powodowało to rootowania, ale powodowało, że demon ADB działał w "trybie niezabezpieczonym" (tj. Z uprawnieniami roota).
Izzy
3

Jeśli piszesz android:extractNativeLibs="false"w pliku AndroidManifest. następnie zmień go naandroid:extractNativeLibs="true"

Ankita Shah
źródło
2

Pomogło to w moim przypadku:

Settings -> Apps -> Google Play Store -> Click "Enable" button.
sqr163
źródło
Łał. Dzięki. Wyłączyłem Google Play i nie zauważyłem, że to była główna przyczyna moich problemów.
W0rmH0le
2

Wypróbowałem większość z powyższych rozwiązań (prostych, nie oferujących chmod i zmieniających biblioteki wewnętrzne) i żadne z nich nie działa

Ostatecznie zadziałało dla mnie: „Wyczyść projekt” -> „Przebuduj projekt” -> zmieniono nazwę wersji aplikacji w module aplikacji build.gradle -> Synchronizuj Gradle -> Uruchom aplikację na urządzeniu

HMan
źródło
2

Napotkałem ten problem z powodu niezgodnych wariantów kompilacji. Moduł dynamicznego dostarczania był w wariancie debugowania, podczas gdy pozostałe moduły były w wersji. Po prostu zmiana modułu Dynamic Delivery na wydanie, przebudowanie i zainstalowanie rozwiązała problem.

clever_trevor
źródło
2

W przypadku projektów Flutter za pomocą edytora VS Code przejdź do folderu źródłowego projektu, usuń folder „build” i rozpocznij debugowanie.

Abhi R
źródło
2

Mam ten problem w projekcie z Daggerem i wieloma modułami. To, co zadziałało (żadne z powyższych nie działało), to 1) opróżnienie folderu .gradle 2) opróżnienie folderu .idea 3) W projekcie gradle.properties zaznacz org.gradle.caching = false 4) Możliwe unieważnienie pamięci podręcznych w AS , wyczyść, odbuduj

Możesz uciec z numerem 3, wyczyść, a następnie zbuduj.

EDYCJA: Ostatnio udało mi się to obejść, ponownie uruchamiając AS, a następnie czyszcząc i instalując ponownie.

Justin
źródło
dziwnie. próbowałem powyżej. to zadziałało dla mnie Ten rozwój Androida robi się szalony. kod przez 30 sekund i poczekaj 5 minut, aby uzyskać kompilację
satyajit
@satyajit. 5 minut!! mój zajmuje 10! To jedyny, który konsekwentnie u mnie działa.
Dan Anderson
jestem w stanie sprawić, by działało z ./gradlew installDebugwiersza poleceń
satyajit
2

Przyczyną tego problemu było dla mnie wybranie niewłaściwego wariantu kompilacji dla jednego z modułów mojej aplikacji. Z narzędzia „Build Variants” wybrałem wariant modułu, który pasował do modułu aplikacji, i rozwiązałem problem.

Kościół
źródło
1

Miałem ten problem na Android Studio, ponieważ w mojej kompilacji debugowania dodałem sufiks nazwy wersji -DEBUG i - był problem.

Staraj się mieć tylko litery, cyfry i kropki w nazwach wersji i identyfikatorach aplikacji

Bruno Oliveira
źródło
1

Nawigować do Run/Debug Configurations

Kliknij Uruchom na górnej karcie> Edytuj konfiguracje

  • Moduł: wybierz swoją aplikację
  • Opcje instalacji: Wdróż domyślny pakiet APK
  • Ok

wprowadź opis obrazu tutaj

user14612787
źródło
0

Po prostu miałem ten sam błąd. Miałem rok 2015 w identyfikatorze aplikacji. Zamieniłem 2015 na piętnaście i to rozwiązało problem.

Ponadto, jeśli używasz Android Studio, możesz spróbować: Narzędzia / Android / Synch Project with Gradle Files

Borzh
źródło
0

Wymuś zatrzymanie aplikacji w ustawieniach urządzenia.

evya
źródło
0

Miałem ten problem i żadne z powyższych rozwiązań nie zadziałało.

Powodem jest prawdopodobnie telefon w wersji root, który ma dostępne uprawnienia do przydziału lub instalacji apk tylko na karcie SD.

Naprawiłem problem za pomocą ADB (będziesz potrzebować zrootowanego urządzenia):

  1. Podłącz telefon przez USB
  2. Uruchom ADB za pomocą powłoki adb
  3. Przełącz się do trybu roota za pomocą su
  4. utwórz folder tmp w sdcard: mkdir / sdcard / tmp
  5. cd / data / local
  6. utwórz łącze do folderu w sdcard: ln -s / sdcard / tmp tmp
bochaltura
źródło
0

Wydaje się, że przyczyn tego niepowodzenia jest wiele. Dla mnie problem polegał na tym, że w pliku AndroidManifest odwoływałem się do nieistniejącej biblioteki (tylko w tym konkretnym urządzeniu) za pomocą tagu „uses-library”. Po usunięciu biblioteki, której to urządzenie nie miało, apk został poprawnie zainstalowany.

akash
źródło
0

Użyłem archetypu androidquickstart maven i napotkałem ten sam problem:

Nazwa mojego pakietu była jedynym androidquickstart. Zgodnie z wcześniejszymi wskazówkami

  1. Zmieniłem pakiet na androidquickstart.test
  2. Następnie w AndroidManifest.xml że zmienił package="androidquickstart"się package="androidquickstart.test"i odpowiednio usuwane próbę od innych części xml <activity android:name=".test.HelloAndroidActivity" >do<activity android:name=".HelloAndroidActivity" >
  3. a także naprawiono problemy z pakietami w plikach java (podświetlone przez IDE)
Ilya Yevlampiev
źródło
0

Nazwa Twojego pakietu powinna zawierać słowa połączone kropkami, takie jak com.example lub prashant.mydairy ..... teraz powinno działać dobrze

Pliki, w których należy zaktualizować nazwę pakietu, są następujące: 1) Plik manifestu 2) Plik Gradle (moduł appp): identyfikator aplikacji "nazwa_pakietu"

Prashant Yalatwar
źródło
1
powinien być komentarz
Furqan
0

Nazwa taskAffinity musi mieć co najmniej jeden znak „.” separator

android_su
źródło
0

Jeśli masz dostęp do konsoli urządzenia (powłoki adb), zmień uprawnienia następujących:

  1. chmod 777 / dane /
  2. chmod 777 / data / local /
    Możesz także spróbować skopiować apk, /data/local/w takim przypadku upewnij się, że ustawiłeś również odpowiednie uprawnienia do apk .
  3. chmod 777 /data/local/myapk.apk Możesz teraz podjąć próbę instalacji przez: pm install -r -d /data/local/myapk.apk (zwróć uwagę na ścieżkę bezwzględną)
Sabin
źródło
0

Wygląda na to, że przyczyną była liczba po kropce .

Miałem ten sam problem z następującym applicationId

org.tony.stark.125jarvis

Zmieniam to na

org.tony.stark.jarvis

Udało mi się zainstalować aplikację na urządzeniach z Androidem.

Ismail Iqbal
źródło
0

Można dostać ten błąd, jeśli minSdkVersionw builde.gradlejest większy niż urządzenia wersji Androida. W takim przypadku musisz zmodyfikować plik minSdkVersion.

anemomylos
źródło
0

usuń kod w AndroidManifest.xml:

narzędzia: replace = "android: appComponentFactory" android: appComponentFactory = ""

to działa.

lichao
źródło