Ошибка [INSTALL_FAILED_INVALID_APK]


86

Когда я нажимаю, чтобы запустить проект, который я только что создал в Android Studio 0.2.10, и выбираю свой Android (подключенный по USB с отладкой по USB), я получаю эту ошибку:

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]

Любая идея того, что это может быть?


Выберите мой телефон ... !! Вы имели в виду эмулятор ... ??
Gokul Nath KP

1
Нет, мой Android с отладкой по USB.
RuiG

Вы убедились, что приложение совместимо с используемым вами устройством? Проверьте MinSDKи TargetSDKзначение в манифесте. Вы пробовали установить это в эмуляторе? Это позволит сузить круг вопросов, связана ли проблема с APK-файлом или с вашим устройством.
free3dom

Ответы:


156

Я получал это в Android Studio, и все, что я сделал, чтобы исправить, это зашел, "Build" > "Clean Project"и это просто сработало.


8
Если он все еще не работает, будет работать Build -> Rebuild Project after Clean Project.
Пей

Я только что получил это с обновлением от Gradle 5.4.1 до 5.6.1 - не уверен, что это за странность, но большие обновления Gradle, безусловно, могут. За альтернативным решением для командной строки ./gradlew cleanследует обычная команда сборки
Майк Харди,

23

Просто удалите старый APK android / app / build / output / apk / debug / app-debug.apk в папку. это все. наслаждайтесь кодированием ...


Добро пожаловать @VenkateshMogili
mahendren

1
rm -fr android/app/build/outputs/apk/debug/
felansu 02 нояб.2020,

15

Однажды у меня возникла аналогичная проблема, я заметил, что имя пакета в моем Androidmanifest.xml было начато с одного символа пустого пробела. like " com.example.test" instead of "com.example.test"

Я удалил все такие недопустимые пробелы из своего файла манифеста, это решило мою проблему

Изменить 1 : '-' в имени пакета также вызывает ту же проблему в некоторых версиях Android.


1
Вот Это Да! Я думал, invalidate cache and restartчто заставит чистую сборку, видимо, нет.
GabrielOshiro 01

10

У меня была такая же проблема, но ни одно из решений не помогло мне. Проблема была в том, что у меня не было . разделители в имени моего пакета.
т.е. если имя вашего пакета - my.packagename, все в порядке, но это не может быть просто mypackagename.
Получил подсказку из этого отчета об ошибке.

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


9

Если у кого-то все еще есть проблема, тогда Build-> Clean Project, затем Build-> Rebuild project, наконец, синхронизируйте проект с файлом Gradle .


8

Как решить эту проблему:

  1. Установить RootExplorer
  2. Создать новую tmpпапку на SD-карте
  3. Нажмите и удерживайте папку tmp и выберите Linkэту папку (последний вариант в меню)
  4. Перейдите /data/local/и нажмите кнопку CREATE LINKснизу

8

У меня была эта проблема, и ни одно из вышеперечисленных решений не помогло мне.

По какой-то причине в моем /data/local/tmpкаталоге неправильно были установлены разрешения (только root имел rwx). Я исправил проблему с помощью ADB (вам понадобится рутированное устройство):

  1. Подключите телефон через USB
  2. Запустить ADB с помощью adb shell
  3. Перейти к /data/localиспользованиюcd /data/local
  4. Переключитесь в корневой режим с помощью su
  5. Разрешить чтение / запись / выполнение в tmpкаталоге с помощьюchmod 777 tmp
  6. Отключите, перезапустите Android Studio и снова подключите устройство.

7

Отключив Instant Run, я решил проблему. До сих пор не знаю никаких объяснений. После перехода на Android Studio 3.0 возникает такая проблема. Надеюсь, это поможет кому-то в будущем.


6

Когда я столкнулся с этой проблемой, для меня ее решило то, что имя пакета AndroidManifest.xml совпадает с идентификатором приложения build.grade.


3

Я нашел другую причину этой ошибки. Если вы внедрили права доступа к устройству / data / local / tmp, могут быть изменены, поэтому adb не сможет получить доступ к временному файлу. Решение - создать папку «tmp» на SD-карте и создать на нее символическую ссылку в / data / local / (через оболочку ADB или Root Explorer).


Я не мог в это поверить: перепроверил с другим устройством (все разрешения казались идентичными, вплоть до корневого уровня); возился с разрешениями (сделал их даже 777) - никак. Так что терять. Пробовал символическую ссылку - вау! Работает (+1). Я все еще хотел бы знать, почему и что за этим стоит. В моем случае это не было причиной укоренения, а заставляло демон ADB работать в «небезопасном режиме» (то есть с правами суперпользователя).
Иззи

3

Если вы напишете android:extractNativeLibs="false"в файле AndroidManifest. затем измените его наandroid:extractNativeLibs="true"


3

Я пробовал большинство предложенных выше решений (простые, а не те, которые предлагают chmod и изменяют внутренние библиотеки), и ни одно из них не работает

В конце концов, у меня сработало: «Очистить проект» -> «Перестроить проект» -> изменить имя версии приложения в модуле приложения build.gradle -> Синхронизировать Gradle -> Запустить приложение на устройстве.


У меня этот метод сработал !! Большое вам спасибо, я долго боролся с этим, это действительно спасение жизни! Не могу отблагодарить вас достаточно
stb_dev

3

Перейдите к Run/Debug Configurations

Нажмите «Выполнить» на верхней вкладке> «Изменить конфигурации».

  • Модуль: выберите свое приложение
  • Варианты установки: развернуть APK по умолчанию
  • Хорошо

введите описание изображения здесь


2

В моем случае это помогло:

Settings -> Apps -> Google Play Store -> Click "Enable" button.

Вау. Благодарю. Я отключил GooglePlay и не заметил, что это основная причина моих проблем.
W0rmH0le

2

Я столкнулся с этой проблемой из-за несоответствия вариантов сборки. Модуль динамической доставки находился в отладочном варианте, а остальные модули были в выпуске. Простое изменение модуля динамической доставки для выпуска, перекомпоновки и установки устранило проблему.


2

Для проектов Flutter с помощью редактора VS Code перейдите в исходную папку проекта, удалите папку «build» и начните отладку.


2

У меня возникла эта проблема в проекте с Dagger и несколькими модулями. Что сработало для меня (ничего из вышеперечисленного не сработало): 1) очистить папку .gradle 2) очистить папку .idea 3) В проекте gradle.properties отметьте org.gradle.caching = false 4) Возможно, сделать недействительными кеши в AS , очистить, восстановить

Возможно, вам удастся обойтись простым №3: очистить, затем построить.

РЕДАКТИРОВАТЬ: В последнее время я смог обойти это, перезапустив AS, затем выполнив чистку, а затем снова установив.


как ни странно. я пробовал некоторые выше. это сработало для меня Эта разработка Android сходит с ума. код на 30 секунд и ожидание в течение 5 минут , чтобы получить сборки
Satyajit

@satyajit. 5 минут !! моя занимает 10! Это единственное, что у меня стабильно работает.
Дэн Андерсон

я могу заставить его работать с ./gradlew installDebugиз командной строки
Satyajit

2

Причиной этой проблемы для меня был неправильный вариант сборки, выбранный для одного из модулей моего приложения. В инструменте «Варианты сборки» я выбрал вариант модуля, который соответствует модулю приложения, и это устранило проблему для меня.


1

У меня была эта проблема в Android Studio, потому что в моей сборке отладки я добавил суффикс имени версии -DEBUG и - была проблема.

Постарайтесь, чтобы в названиях версий и идентификаторах приложений были только буквы, цифры и точки.


0

У меня была такая же ошибка. У меня был 2015 год в идентификаторе приложения. Я заменил 2015 на пятнадцать, и это решило проблему.

Кроме того, если вы используете Android Studio, вы можете попробовать: Инструменты / Android / Синхронизировать проект с файлами Gradle.


0

Принудительно остановить приложение в настройках устройства.


0

У меня была эта проблема, и ни одно из вышеперечисленных решений не помогло мне.

Причина, вероятно, в телефоне с корневой версией, у которого есть доступная квота или разрешения на установку apk только на SD-карте.

Я исправил проблему с помощью ADB (вам понадобится рутированное устройство):

  1. Подключите телефон через USB
  2. Запустить ADB с помощью оболочки adb
  3. Переключитесь в корневой режим с помощью su
  4. создать папку tmp на SD-карте: mkdir / sdcard / tmp
  5. cd / data / local
  6. создать ссылку на папку в SDCard: ln -s / sdcard / tmp tmp

0

Кажется, есть несколько причин для этой неудачи. Для меня проблема заключалась в том, что в файле AndroidManifest я сослался на несуществующую библиотеку (только на этом конкретном устройстве) с помощью тега uses-library. После удаления библиотеки, которой на этом устройстве не было, apk был установлен правильно.


0

Я использовал архетип maven androidquickstart и столкнулся с той же проблемой:

Имя моего пакета было единственным androidquickstart. Согласно советам раньше

  1. Я изменил пакет на androidquickstart.test
  2. то в AndroidManifest.xml я изменил package="androidquickstart"к package="androidquickstart.test"и , соответственно , удаляются тест из других частей XML <activity android:name=".test.HelloAndroidActivity" >в<activity android:name=".HelloAndroidActivity" >
  3. а также исправлены проблемы с пакетами в файлах java (выделены IDE)

0

Имя вашего пакета должно включать слова, объединенные точками, например com.example или prashant.mydairy ..... теперь он должен работать нормально

файлы, в которых вы должны обновить имя пакета ur, следующие: 1) файл манифеста 2) файл Gradle (модуль appp): applicationId "package.name"


1
должен быть комментарий
Furqan


0

Если у вас есть доступ к консоли устройства (оболочка adb), измените разрешения для следующих:

  1. chmod 777 / данные /
  2. chmod 777 / data / local /
    Вы также можете попробовать скопировать apk, /data/local/в этом случае убедитесь, что для apk также установлены правильные разрешения .
  3. chmod 777 /data/local/myapk.apk Теперь вы можете попытаться выполнить установку: pm install -r -d /data/local/myapk.apk (обратите внимание на абсолютный путь)

0

Похоже, что виноват номер после точки .

У меня была такая же проблема со следующим applicationId

org.tony.stark.125jarvis

Изменив его на

org.tony.stark.jarvis

Мне удалось установить приложение на устройства Android.


0

Вы можете получить эту ошибку, если размер minSdkVersionin builde.gradleбольше, чем версия Android устройства. В этом случае вам необходимо изменить файл minSdkVersion.


0

удалить код в AndroidManifest.xml:

инструменты: replace = "android: appComponentFactory" android: appComponentFactory = ""

оно работает.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.