Android INSTALL_FAILED_UID_CHANGED


75

Я робив налагодження на Android, використовуючи свій Nexus 4, проте нещодавно я зіткнувся з цією помилкою тут. Після деяких досліджень цієї помилки, схоже, проблема в тому, що додаток не видаляється належним чином. Додаток, який я налагоджую, працює як на інших моїх пристроях Android, так і на емуляторах, ця помилка трапляється лише на моєму Nexus 4. Я підключив свій пристрій до комп’ютера і намагався видалити папки даних / даних, але я все ще отримую те саме питання. Я також перевірив програми-налаштування, щоб переконатися, що їх точно було видалено.

Хтось знає, як вирішити цю проблему? На думку деяких користувачів, мені потрібен root-доступ для правильного видалення даних / даних, чи це правда? Або існує інший спосіб обійти це?


4
Вам потрібно видалити дані програми з, /data/data/your.package.nameі /data/app, здається, вони не були повністю видалені.
Марек Себера

Дивіться цей відповідь нижче stackoverflow.com/questions/16277422 / ...
АСОК Buzz

це вирішило мою проблему: див. посилання
Саєм

Відповіді:


78

Іноді доводиться також видаляти папки даних. Для мене у мене був пакет в просторі користувачів com.kikin.cts, а також каталог папок в /data/data/com.kikin.cts. Продовжували отримувати INSTALL_FAILED_UID_CHANGED, але після видалення папки даних помилка зникла.


11
У мене така сама проблема, але коли я намагався видалити папку, я отримую помилку з відмовою у дозволі
Сем,

7
Мій пристрій встановлюється в / data / local / tmp / com (...), і цей метод не працює. (HTC One, IntelliJ 13)
Нілзор,

2
Будь-яке рішення знайдено? Я можу нормально будувати свій проект зі свого mac. Але коли я перейшов на свій ПК з Windows, я отримую цю помилку. Після побудови проекту на моєму ПК з Windows мій пристрій зламався, і я не зможу знову будувати за допомогою свого mac, тому що отримаю ту саму помилку ..
Лучано

Для пристроїв без коренів, можливо, нам доведеться спробувати найгірше рішення: відновити заводські налаштування.
RxПрочитайте

Насправді це була оболонка adb rm -R / data / data / <app-package>, оскільки це папка, тому -R видалить папку та все, що знаходиться всередині.
Крістоф,

26

Для вкорінених пристроїв:

Виконайте наведену нижче команду

adb rm -rf /data/data/<your.package.name>

Для некорневого пристрою:

  1. Змініть ApplicationId програми. Перейдіть за цим посиланням, щоб змінити ApplicationId.
  2. Створіть та встановіть програму. Додаток буде успішно встановлено, оскільки він розглядається як новий додаток.
  3. Тепер видаліть цю програму. Що очистить дані.
  4. Тепер змініть ApplicationId на попередній.
  5. Створення та встановлення. Магія .. Він встановить.

Геніальність. Я спробую це.
bonnyz

2
Ні, не буде. Мені не допомогло.
Роман Міненок

щось, що може знадобитися для перезавантаження телефону перед видаленням №3.
VinceStyling

Дякую! Я використовував kotlin 1.0.0-beta-1083, переключив його на 1.0.0-beta-1103, а потім застосував ваше рішення (потрібно і те, і інше, моторошна помилка) і проблему вирішено!
Deepcorn

1
Це працює для мене лише в тому випадку, коли ви перезавантажуєте пристрій після кроку 3 і раніше 5. Але це працює! Класно!
СІЛІНІК

17

Перезапустіть пристрій та очистіть проект. По суті, видалення зробило б це для вас у випадку, якщо цього не сталося, спробуйте перезапустити.


3
Здавалося, цей працює, я перезапустив пристрій, спробував запустити його знову, та сама проблема, я пішов на обід, а коли повернувся і підключив телефон знову, здається, він знову працює
AdamM

17
@adamm Здається, це не працює для мене. Я здогадуюсь це пов’язане з обідом. Ви пам’ятаєте, що ви їли того дня? : p
Нілзор

61
я їв піцу, локшину, бутерброд, у мене нічого не вийшло
Лучано

6

Ви, мабуть, ввели SharedUserID, який спричиняє це.


2
Я не використовував спільний ідентифікатор користувача у своєму додатку
AdamM

Абсолютно! Це було причиною в моєму випадку :), Дякую.
Gautam Jain

Це була проблема для мене. Дякую, добрий сер. :)
m.rohail.akram

3

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


4
навряд чи рішення, якщо ви просто щось не зломте разом ... щось на зразок запаху у вашому домі, і ви вирішите проблему переїздом.
Патрік

6
Не лише телефон, Google Play також визнає його окремим додатком. Краще змінити телефон, ніж змінити назву пакета, оскільки в моєму додатку вже є 1000 користувачів.
Seshu Vinay

@SeshuVinay право, не рекомендується для виробництва. Але можна використовувати, поки додаток не з’явиться.
Ayush Goyal

3

У мене є корінь на моєму Nexus 5, але нічого не вдалося, тому мені довелося виконати скидання до заводських налаштувань, які працювали.


3

Для мене фокус був зроблений, знявши прапорець біля пункту "Перевірити програми через USB" у розділі "Параметри розробника".


1
Дякую за це. Я починав переживати при думці про необхідність відновити заводські налаштування пристрою.
Janne Oksanen

3

Думав, я поділюсь цим, якщо комусь це допоможе ... Я написав нову версію свого додатка в eclipse і спробував запустити його на своєму телефоні, незважаючи на те, що у мене була трохи старіша версія телефону, яку я завантажив із магазину Google Play. Eclipse відкрив діалогове вікно із запитанням, чи радий я видалити існуючу телефонну версію, і я погодився. Видалення було несправним і призвело до INSTALL_FAILED_UID_CHANGED.

Я спробував більшість запропонованих тут речей, не маючи удачі. На моєму телефоні не було очевидних слідів файлу .apk або файлів даних, які я міг знайти для видалення, але щось заважало мені завантажувати APK на телефон від затемнення. Я також не зміг завантажити свою попередню версію бета-тестування з Google Play - завантаження продовжилось на 100%, але потім не вдалося із повідомленням про "невідому помилку" та числом (можливо, -24).

Я був нерішучим , щоб перейменувати свій пакет , тому що у мене вже є бета - тестери і в додатку продуктів , встановлені зі старим ім'ям пакета, але я змінив ім'я пакета в затемненні тимчасово , і я зміг встановити цю нову версію на телефон , а потім завантажити старіша версія Google Play. Обидві версії радісно сиділи поруч один з одним на телефоні з однаковим ім'ям програми та піктограмою (але різні назви пакетів за кадром). Потім я міг вручну видалити одну або обидві, перетягнувши піктограму програми до піктограми видалення телефону. Видалення вручну видалило конфлікт і виправило дефектне видалення eclipse, тому я просто перейменував свій пакет eclipse на оригінальну назву і продовжив, як і раніше.

Це було набагато менш болісно, ​​ніж відновлення заводських налаштувань або постійне перейменування пакета. Можливо, це працює лише тоді, коли джерелом помилки є конфлікт між версією eclipse та версією Google Play, але варто спробувати, якщо ви потрапили в подібну ситуацію.


3

У більшості випадків INSTALL_FAILED_DEXOPTабо INSTALL_FAILED_UID_CHANGEDозначає, що у вас недостатньо місця для встановлення програми.

Видаліть із пристрою деякі невикористані програми або принаймні видаліть поточну версію програми.

adb uninstall package-name

У дуже рідкісних випадках можуть виникнути проблеми з даними програми. У вас є два варіанти, залежно від того, укорінений ваш пристрій чи ні

Некорінені

Скидання до заводських налаштувань Settings -> Backup and reset -> Factory data reset(принаймні для Samsung S5)

Вкорінений (або емулятор)

adb shell "rm -rf /data/data/package-name" 

2

Це спрацювало для мене:

adb shell rm -rf /system/app/<package.name>

1
Здається, це не спрацьовує для мене. Поки що отримую ту саму помилку
Ajit Pratap Singh

2

За допомогою оболонки ADB ви можете знайти рішення двома способами. 1. зберігати дані та знаходити рішення та 2. рішення, не зберігаючи дані

рішення для 1. - це запустити команду adb chown -R UID:UID /data/data/your.package.nameчерез командний рядок із шляху ADB.

рішення для 2. - це запустити команду adb rm -r /data/data/your.package.nameз того самого шляху.


2

Я відчував цю проблему протягом останніх кількох днів на своєму тестовому пристрої Galaxy Note 3. Я використовував Calabash-Andrdoid і постійно отримував помилку INSTALL_FAILED_UID_CHANGED, щоразу, коли намагався виконати метод install_app. Я боровся з цією проблемою, тому що це мали два тестові пристрої. Я спробував усе вище, включаючи спорожнення папок / data / data / app та app.test. Я навіть видалив інструментальний інтерфейс, який встановлює Xamarin, оскільки це платформа, яку я використовував для розробки свого додатка. Я не міг знайти нічого іншого, щоб вручну видалити пристрій. Коли я спробував виконати свою роботу на третьому пристрої і виявив, що все працює успішно, я зрозумів, що проблема в пристроях. Врешті-решт, єдине, що мені вдалося, - це скинути заводські налаштуванняодного з пристроїв. Сподіваюся, це допоможе.

Дякую, -Шах


2

Ось щось, що не охоплюється існуючими відповідями. Це відбувалося зі мною на емуляторі. Якщо я скидаю дані користувача, я отримую INSTALL_FAILED_DEXOPT вперше, але INSTALL_FAILED_UID_CHANGED після цього. Я виявив, що rm -r /data/data/com.foo.bar достатньо для скидання до першого стану.

Фактичним винуватцем у моєму випадку є назва методу Java, яка спричинила збій dexopt. Зверніть дуже пильну увагу на те, що в logcat. Ось що подарувало:

I/PackageManager( 1275): Running dexopt on: com.foo.bar
E/dalvikvm( 2857): Invalid name: '__jni_setLocation'
E/dalvikvm( 2857): Trouble with item 14787 @ offset 0x43b68
E/dalvikvm( 2857): Cross-item verify of section type 0005 failed
E/dalvikvm( 2857): ERROR: Byte swap + verify failed
E/dalvikvm( 2857): Optimization failed
W/installd(  941): DexInv: --- END '/data/app/com.foo.bar-1.apk' --- status=0xff00, process failed
E/installd(  941): dexopt in='/data/app/com.foo.bar-1.apk' out='/data/dalvik-cache/data@app@com.foo.bar-1.apk@classes.dex' res=65280
W/PackageManager( 1275): Package couldn't be installed in /data/app/com.foo.bar-1.apk

Я не можу сказати, чому dexopt не любить деякі імена методів, але в цьому була проблема.


1

Гаразд, отже, для мого LG NEXUS 4, що корениться, ось рішення: (

  • переконайтеся, що у вас десь є ваш робочий додаток apk, підписаний чи непідписаний)

і

  • Ви видалили цей файл зі свого телефону (якщо, звичайно, існує)

Скажімо, це так: app-debug-unaligned.apk

Тепер у консолі ви пишете:

adb push app-debug-unaligned.apk /sdcard/
adb shell
su
rm -fr /data/local/tmp/app-debug-unaligned.apk
rm -fr /data/data/app-debug-unaligned.apk

Тепер вийдіть з adb і зателефонуйте

adb shell su -c "pm install /sdcard/app-debug-unaligned.apk"

Працює?


1

Я видалив /data/data/my.package.nameі /data/app/my.package.name.apk, проблема все ще залишається.

однак я знайшов папку /data/user/0/my.package.name, видалив її і вирішив проблему.


0

Просто видаліть саму програму (не папки даних), а потім переінсталюйте її, і вона повинна бути нормальною. Android скаржиться, оскільки ви, можливо, раніше налагоджували програму з іншого комп’ютера.


1
Я вже видалив програму, помилка з’являється, коли я намагаюся її повторно встановити. Також усі мої налагодження були зроблені на одній машині
AdamM

Ну, схоже, ти все одно це вирішив. Єдиний раз, коли я бачив, як ця помилка траплялася сам, коли я намагався налагодити на іншому комп’ютері;)
FX

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

2
Схоже, пора мені обідати - та сама помилка і нічого не допомогло
vir us

0

Рішення для некореневого пристрою. Перейдіть до менеджера програм і видаліть програму під назвою "Selendroid" і повторіть спробу ще раз. Це рішення працює для мене.


0

Я це виправляю, можливо, це спрацює комусь іншому.

Я перезавантажую телефон, а потім видаляю ще кілька додатків. І спробуйте ще раз встановити, це працює!

Можливо, проблема ось-ось збереження. Не знаю чому, але це зараз робота. Удачі! (Вибачте за погану англійську)


0

Використовуйте

оболонка adb

перейти до оболонки.
Потім запустіть команду follow:

rm -rf / дані / дані / назва пакета

будь-ласка, змініть ім’я пакета своїм, наприклад com.map.map


0

Для тих, хто запускає тести стилю Junit зі свого комп’ютера і отримує цю помилку - в той час як консоль, в якій він повідомляв мені про проблему з моїм додатком (упакований у форматі 'com.myapp.stuff'), справжньою проблемою був мій пакет тестового коду , який, якщо ви працюєте на пристрої, встановлюється як окрема програма з назвою пакету, наприклад 'com.myapp.stuff.test'. Видалення тестового коду "програми" за допомогою диспетчера програм та видалення мого фактичного додатка вирішило проблему для мене. Я розміщую цю відповідь тут, щоб врятувати когось іншого "Дух" момент.


0

Така сама проблема на пристрої Mediacom, спочатку a

$ adb install -r platforms/android/out/android-debug-unaligned.apk
3958 KB/s (22887489 bytes in 5.647s)
     pkg: /data/local/tmp/android-debug-unaligned.apk
     Failure [INSTALL_FAILED_DEXOPT]

то дуже наполегливий :

$ adb install -r platforms/android/out/android-debug-unaligned.apk
4949 KB/s (22887489 bytes in 4.515s)
     pkg: /data/local/tmp/android-debug-unaligned.apk
     Failure [INSTALL_FAILED_UID_CHANGED]

Скидання до заводських налаштувань не змінило динаміку (я отримав обидві помилки послідовно).

  • встановлення того самого додатка з іншим ідентифікатором спрацювало
  • встановлення іншої програми з попереднім ідентифікатором не відбувається

Вкорінення не є варіантом, рішенням для мене було стирання кешу: тепер ідентифікатор програми-порушника працює нормально, і мені не довелося скидати заводські налаштування (знову).

Сподіваюся, це допоможе


0

Для мене це було трохи більше. Просто видалення /data/data/appfolderне допомогло.

Додатковою причиною було те, що мої зовнішні бібліотеки не були включені у .apkфайл, оскільки ім'я папки було lib замість libs . Це спричинило [INSTALL_FAILED_DEXOPT]під час apkвстановлення, після чого [INSTALL_FAILED_UID_CHANGED].

Тож зміна назви папки libs у цьому випадку спрацювала для мене.


0

Я знайшов рішення, яке працює як на невкоріненому пристрої, так і на емуляторі. Хоча ви не можете безпосередньо видалити папки даних на некоренованому пристрої, ви можете використовувати pmкоманду для цього:

  1. Біжи adb shell
  2. Запустити pm uninstall <app name>(тобто com.example.myapp)
  3. Запустити pm uninstall <test app name>(тобто com.example.myapp.test) - ви можете отримати повідомлення про помилку, якщо тестовий додаток раніше не встановлювався.

Здається, з якихось причин при видаленні програм з інтерфейсу Android це не працює (можливо, не видаляє папки даних), однак при видаленні через pm команди це працює.

Спробував на "Nexus 5" і на "OnePlus One".


0

Очевидно, що це пов’язано з неправильним видаленням (можливо, через неправильне підключення кабелю).

РІШЕННЯ Завантажте SDMaid із play-store та видаліть файли Corpse (небажані файли). Повторно запустіть програму. (Але вам потрібно мати пристрій корінням)


0

Я зустрічав подібну проблему. Причиною є те, що ви не видалили весь компонент програми. Моє рішення: видалення /data/data/com.eg.android.AlipayGphone вручну.

добре працювати для мене.

Я сподіваюся, це корисно для вас!


-1

Укорінення та скидання до заводських налаштувань для мене не було варіантом, але я зміг знайти стару версію мого файлу .apk та встановити його (я думаю, це був той самий, який не вдалося видалити належним чином). Після його повторного видалення я зміг встановити нові версії.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.