Помилка [INSTALL_FAILED_INVALID_APK]


85

Коли я натискаю, щоб запустити проект, який я щойно створив в 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

Відповіді:


153

Я отримував це в Android Studio, і все, що я робив, щоб це виправити, було перейти на, "Build" > "Clean Project"і це просто спрацювало.


8
Якщо це все ще не працює, Build -> Rebuild Project after Clean Project буде працювати.
Пей,

Я щойно отримав це з оновленням від gradle 5.4.1 до 5.6.1 - не впевнений, яка дивина спричинила це, але великі оновлення gradle, безумовно, можуть. За альтернативним рішенням командного рядка ./gradlew cleanслідує ваша звичайна команда збірки
Mike Hardy

18

Просто видаліть старий APK android / app / build / outputs / apk / debug / app-debug.apk з папки. це все. насолоджуйтесь кодуванням ...


Ласкаво просимо @VenkateshMogili
mahendren

1
rm -fr android/app/build/outputs/apk/debug/
felansu

15

Я отримав подібну проблему одного разу, те, що я спостерігав, було, ім'я пакета в моєму Androidmanifest.xml було запущено з одним символом порожнього простору. like " com.example.test" instead of "com.example.test"

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

Редагування 1 : '-' в назві пакету також спричиняє ту саму проблему в деяких версіях Android


1
Оце Так! Я думав invalidate cache and restart, змусить чисту збірку, мабуть, це не так.
Габріель Ошіро,

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

Вимкненням миттєвого запуску вирішили мою проблему. Дотепер не знаю жодного пояснення. Після переходу на андроїд-студію 3.0 проблема починається так. Сподіваюся, це допоможе комусь у майбутньому.


6

Коли я зіткнувся з цією проблемою, мене вирішило те, що ім’я пакета AndroidManifest.xml було таким, як ідентифікатор build.grade applicationId.


3

Я знайшов ще одну причину цієї помилки. Якщо ви вкорінили свій пристрій, дозволи доступу / data / local / tmp можуть бути змінені, тому adb не може отримати доступ до тимчасового файлу. Рішення полягає в створенні папки "tmp" на sdcard і створенні символічного посилання на неї в / data / local / (через оболонку ADB або Root Explorer).


Я не міг повірити, що: перехресна перевірка з іншим пристроєм (усі дозволи здавались однаковими, аж до кореневого рівня); возився з дозволами (зробив їх 777 рівними) - ніяк. То що втратити. Спробував символічне посилання - нічого собі! Працює (+1). Я все ще хотів би знати, чому і що за цим стоїть. У моєму випадку це не було вкоріненням, а змусило демон ADB працювати в "незахищеному режимі" (тобто з правами root).
Іззі,

3

Якщо ви пишете android:extractNativeLibs="false"у файлі AndroidManifest. потім змініть його наandroid:extractNativeLibs="true"


2

Це допомогло в моєму випадку:

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

Ого. Дякую. Я вимкнув GooglePlay і не помітив, що це була першопричиною моїх проблем.
W0rmH0le

2

Я спробував більшість запропонованих вище рішень (прості, а не ті, що пропонують chmod та змінюють внутрішні бібліотеки), і жодне з них не працює

Врешті-решт у мене спрацювало: "Clean Project" -> "Rebuild Project" -> змінено ім'я версії програми в модулі програми build.gradle -> Sync Gradle -> Запустити програму на пристрої


2

Я зіткнувся з цією проблемою через невідповідні варіанти збірки. Модуль динамічної доставки був у варіанті налагодження, тоді як інші модулі були випущені. Простою зміною модуля динамічної доставки на випуск, відновлення та встановлення вирішено проблему.


2

Для проектів Flutter за допомогою редактора коду VS перейдіть до вихідної папки проекту, видаліть папку "build" і починайте налагодження.


2

Я отримав цю проблему в проекті з Кинджалом та декількома модулями. У мене спрацювало (нічого з вищезазначеного не працювало): 1) очистити папку .gradle 2) очистити папку .idea 3) У проекті gradle.properties позначити org.gradle.caching = false 4) Можливо, недійсні кеші в AS , очистити, відновити

Можливо, вам вдасться врятуватися лише No3, очистити, а потім побудувати.

EDIT: Останнім часом мені вдалося обійти це шляхом перезапуску AS, після чого виконати чистку, а потім встановити знову.


дивно. я пробував деякі вище. це спрацювало для мене Цей розвиток андроїда стає божевільним. код на 30 секунд і зачекайте 5 хвилин, щоб отримати збірку
satyajit

@satyajit. 5 хв !! моя займає 10! Це єдиний, який постійно працює для мене.
Ден Андерсон,

я можу змусити це працювати з ./gradlew installDebugкомандного рядка
satyajit

2

Причиною цієї проблеми для мене був неправильний варіант збірки, вибраний для одного з модулів мого додатка. За допомогою інструмента "Варіанти побудови" я вибрав варіант модуля, який відповідає модулю програми, і він вирішив проблему для мене.


1

Я мав цю проблему на Android Studio , тому що в моїй налагодження збірки я додав ім'я версії суфікс -Debug і тому - була проблема.

Намагайтеся, щоб назви ваших версій та ідентифікатори додатків мали лише літери, цифри та крапки


1

Перейдіть до Run/Debug Configurations

Клацніть Запустити у верхній вкладці> Редагувати конфігурації

  • Модуль: Виберіть свій додаток
  • Параметри встановлення: Розгорніть APK за замовчуванням
  • В порядку

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


0

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

Крім того, якщо ви використовуєте Android Studio, ви можете спробувати: Tools / Android / Synch Project with Gradle Files


0

Примусово Зупиніть програму в налаштуваннях пристрою.


0

У мене була ця проблема, і жодне з наведених вище рішень не працювало для мене.

Причиною є, мабуть, коренева версія телефону, яка має доступні дозволи на встановлення квоти або apk лише на SDCard.

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

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

0

Здається, існує кілька причин цієї невдачі. Для мене проблема полягала в тому, що у файлі AndroidManifest я посилався на неіснуючу бібліотеку (лише на цьому конкретному пристрої) за допомогою тегу 'uses-library'. Після видалення бібліотеки, на якій на цьому пристрої не встановлено файл apk, встановлено належним чином.


0

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

Моє ім’я пакету було єдиним 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): ідентифікатор application "ім'я пакета"


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

Схоже, винуватцем є цифра після крапки .

У мене була та ж проблема з наступним ідентифікатором програми

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.