Як мені вчинити з невідомим кодом помилки установки -505?


9

У мене Nexus 7, і він нещодавно оновлений до Android 5.

Два додатки створюють мені проблеми після оновлення системи, ігри, в які грають мої діти. Тупі способи померти і VVVVVV. У обох із них були піктограми після оновлення, але після натискання спливаючого вікна з'явилося повідомлення "Додаток не встановлено". Я намагаюся їх встановити. Завантаження чудово. Починається установка. А потім повідомлення про помилку:

Невідомий код помилки під час встановлення програми: "-505"

Точно однакова помилка для обох додатків. Я перезапустив пристрій безрезультатно.

Я не маю уявлення, що робити далі. Будь ласка, будь-яка добра душа дасть мені поради, як я можу виправити цю проблему

Відповіді:


10

TL; DR

Ця проблема виникає, коли програма намагається повторно оголосити існуючий дозвіл із повідомленням про помилку INSTALL_FAILED_DUPLICATE_PERMISSION. В основному це стосується програм, що базуються на Adobe AIR (префікс пакета з com.air). Основна причиною є різним виконанням коду в Lollipop 5.0 при перевірці сигнатури сертифіката , яка використовується для підпису додатка. Для рішення просто перейдіть до частини "Рішення".

Оновлення : Google вирішив цю проблему на Lollipop 5.0.1.


Технічні деталі

Витяги з програми відстеження випуску Android L Developer Preview , пов’язані із записом у трекері випуску AOSP ,

Пост №4 :

logcat повідомляє мені, що під час встановлення конфлікт із переоформленням дозволів (у моєму випадку Amazon намагається змінити декларування getui.permission.GetuiService, який вже належить Camera 360)

LogCat допису №12 :

10-25 08:06:37.805   749   824 W PackageManager: Package com.tencent.mm attempting to redeclare permission com.google.android.c2dm.permission.SEND already owned by com.google.android.gsf
10-25 08:06:37.926  4812  4812 D Finsky  : [1] PackageInstallerImpl.cancelSession: Canceling session 121130466 for com.tencent.mm
10-25 08:06:37.926  4812  4812 E Finsky  : [1] PackageInstallerImpl.handleCommitCallback: Error -505 while installing com.tencent.mm: INSTALL_FAILED_DUPLICATE_PERMISSION: Package com.tencent.mm attempting to redeclare permission com.google.android.c2dm.permission.SEND already owned by com.google.android.gsf
10-25 08:06:37.926  4812  4812 W Finsky  : [1] 4.installFailed: Install failure of com.tencent.mm: -505 null
10-25 08:06:37.933   749   749 D ZenLog  : intercepted: 0|com.android.vending|-973170826|null|10017,!priority
10-25 08:06:37.933   749   749 V NotificationService: pkg=com.android.vending canInterrupt=false intercept=true
10-25 08:06:37.964  4812  4812 D Finsky  : [1] InstallerTask.cancelCleanup: Cancel running installation of com.tencent.mm

Витяги з трекера випуску AOSP ,

Пост №4

В API19 новий X509CertImpl (encCert) загортає сертифікат (який вже розібраний і готовий до обчислення SHA1), тоді як в API 21 сертифікат передається як байтовий потік, знову аналізується і обробляється заводом сертифікатів. Яка фабрика це, залежить від контексту. У випадку пристроїв L, на яких я тестував, фабрика створить сертифікат OpenSSLX509Certificate. На жаль, у нашому сертифікаті є щось, що у openssl має проблеми, і відбиток пальців змінюється під час обробки openssl. Я можу це відтворити також за допомогою інструмента openssl, коли я конвертую наш сертифікат в інший формат (наприклад, PEM).

Якщо SHA1 буде обчислено безпосередньо на "encCert.getEncoded ()", це було б правильно в обох випадках.


Рішення

Оновлення : Станом на 2014-12-04, Google вирішив цю проблему на Lollipop 5.0.1. Для тих, хто не зробив жодного рішення, намагаючись перевстановити додаток, ви можете спалахнути зображення Lollipop 5.0.1, коли воно буде готове / дочекайтеся OTA.

Пост №20, №21

Схоже, це було виправлено в 5.0.1:

https://android.googlesource.com/platform/libcore/+/6632d8c9d8d1a3ac338d541676148677641bafe3

https://android.googlesource.com/platform/frameworks/base/+/32a22c44b8351c1cccd3a1f9c47a33469d9378e0

Статус: Випущено

Примітка комітента

Відновлення програм із неправильними сертифікатами.

У Lollipop було вікно часу, де ми зберігали сертифікати після того, як вони пройшли цикл декодування / кодування. Добре написана бібліотека OpenSSL була ліберальною при розшифровці (дозволяючи розібрати злегка неправильно сформовані серти), але потім сувора при кодуванні, що дало нам різні байти для ефективності того ж сертифіката.

Пов'язана зміна libcore (0c990ab4a90b8a5492a67b2b728ac9a4a1ccfa1b) тепер повертає початкові байти дослівно, виправляючи як встановлення, так і встановлення до Lollipop після цієї зміни.

Ця зміна відновлює будь-які програми, які були встановлені протягом описаного вище вікна часу, одноразово перевіряючи, чи дійсно дорівнює кількість сертифікатів.


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


У мене те ж саме, що і Девід: нічого не можна видалити з пристрою, ADB не бачить мій пристрій, спроби встановити знову призводять до -505 з Google Play і невимовної помилки при встановленні з локального APK. Перехід на гість також не корисний.
Роман Р.

2
Ну, я просто зрозумів, що зіткнувся і з цією проблемою. Я успішно видалив проблемні програми adb, але не зміг її встановити. Зауважте, що додаток, який я хочу встановити, має air.comпрефікс як назву пакета. Здається, це більше проблема між Google, Adobe Air та розробниками додатків. Поки щонайменше один із них не виправить, додаток неможливо буде встановити. Я поставив із зірочкою проблему, щоб отримати оновлення від Google.
Андрій Т.

3
У мене така ж помилка і в 5.1.1 (ціаногенна 12.1 галактика s3 останній ніч). У них якось був старий код, чи це останній помилка?
ike

1
У мене ця проблема на Android 6.0 Marshmallow. Чи було у цьому рішенні рішення чи просто чекати OTA?
Бен

2
@Ben, у цій публікації згадуються проблеми з INSTALL_FAILED_DUPLICATE_PERMISSION, що було виправлено 5.0.1. Я отримав цю помилку з Marshmellow через INSTALL_FAILED_CONFLICTING_PROVIDER. Я використовую постачальника діалогового вікна SDK Share Facebook, який був оголошений як у моїх налагодженнях, так і у версіях версій, запобігаючи встановленню версії випуску з Google Play Store. Ви можете бачити точний перегляд повідомлень через свою лог-коду adb. У моєму випадку я вирішив перейменувати <provider> збірки налагодження за допомогою використання manifestPlaceholders у своєму імені постачальника.
Майк Ламберт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.