Встановлення показує помилку в консолі: ВСТАНОВИТИ НЕВІДОМНИЙ КОНФЛІКТИВНИЙ ПОСТАВНИК


165

Я експериментую зі зразковою програмою NotesList в Android SDK. Я змінив програму незначно, але коли я встановлюю свою відредаговану версію, я продовжую отримувати повідомлення INSTALL_FAILED_CONFLICTING_PROVIDER в консолі, коли я намагаюся встановити її, коли оригінальна програма нот вже є на пристрої. Що потрібно змінити в Провайдера, щоб він став унікальною базою даних? Це добре працює, якщо я видалюю оригінальну програму нотаток, а потім встановлюю відредаговану версію.

Відповіді:


198

Повноваження, зазначені в, android:authoritiesповинні бути унікальними. Цитуючи документацію на цей атрибут :

Щоб уникнути конфліктів, імена авторитетів повинні використовувати конвенцію іменування в стилі Java (наприклад, com.example.provider.cartoonprovider). Зазвичай це ім'я підкласу ContentProvider, який реалізує провайдера


5
@ CommonsОбережно, я використовував android:authoritiesатрибут у своєму AndroidManifest providerтезі. Я використовував цей проект як мій проект бібліотеки для Android, використовуючи цей бібліотечний проект, я розробив декілька проектів. як вирішити install_failed_conflicting_providerпроблему, якщо ми використовували спільний проект бібліотеки.
Джамала

1
@jamal: Якщо ви використовуєте Gradle для Android, наприклад, для Android Studio, параметри явного злиття дозволять вам налаштувати рядок повноважень. В іншому випадку видаліть <provider>з маніфесту бібліотеки та визначте його на рівні програми унікальним рядком повноважень.
CommonsWare

4
@jamal: tools.android.com/tech-docs/new-build-system/user-guide/… - якщо у вас є додаткові запитання, і ви не можете знайти відповіді за допомогою пошуку, задайте нове запитання щодо переповнення стека.
CommonsWare

11
якщо ви використовуєте бібліотеку в двох проектах з однаковим іменем постачальника, це може спричинити цю помилку
Мохаммед Субхі Шейх Куруш

1
У мене немає такої речі, як, наприклад, android:authoritiesабо <provider>в моїй бібліотеці, і я отримую цю помилку.
лів

143

Якщо у вас є різні смаки та ви хочете уникнути зіткнень у назві повноважень, ви можете додати тип applicationIdSuffixзбірки та використовувати отриманий applicationIdу вашому маніфесті такий:

<...
 android:authorities="${applicationId}.contentprovider"/>

Ви можете визначити власну applicationIdдля кожного визначення аромату продукту. developer.android.com/studio/build/…
Jose L Ugia

Я думаю, що якщо ви це зробите, це виправить різні смаки продуктів, оскільки вам доведеться створити різні applicationIdдля кожного аромату. Якщо у вас були різні типи buildType, ви хочете applicationIdвідрізнятись і між тими, і це applicationIdSuffixбуде робити властивість.
кругляки

Дякую, використання жорсткого коду Android: повноваження у fileprovider - це саме моя проблема!
Брюс

Чудова відповідь! Перш ніж додати їх і запустити, очистіть стару версію своїх додатків.
Ерен Утку

30

Якщо ви використовуєте Карти Google + Служби Google Play усередині бібліотечного проекту (особливо якщо ви нещодавно перенесли з Eclipse на Android Studio), ви можете зіткнутися з цією помилкою при спробі запустити додаток, який використовує вашу бібліотеку, а інший додаток, який використовує та сама бібліотека вже встановлена ​​на вашому пристрої.

Виправлення: переконайтеся, що defaultConfig.applicationId визначено в розділі build.gradleфайлу Android для кожного проекту за допомогою вашої бібліотеки

android {
    defaultConfig.applicationId = "com.company.appname"
}

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

Симптоми

1.) Ваші користувачі бачать жахливу помилку встановлення "-505" під час встановлення вашого додатка з Play Store.

2.) Це повідомлення про помилку з’явиться під час спроби встановити другий додаток, який використовує вашу бібліотеку через Android Studio [INSTALL_FAILED_CONFLICTING_PROVIDER]:

Постачальник конфліктів

На вашій консолі ви побачите таке повідомлення:

Package couldn't be installed in /data/app/com.company.appname-1
com.android.server.pm.PackageManagerException: 
Can't install because provider name 
com.google.android.gms.measurement.google_measurement_service 
(in package com.company.appname) is already used by
com.company.otherInstalledAppName

Виправлення полягає в тому, щоб переконатися, що defaultConfig.applicationId визначений у розділі Android build.gradleдля кожного проекту за допомогою вашої бібліотеки

android {
    defaultConfig.applicationId = "com.company.appname"
}

Більше прочитання можна знайти в оригінальному звіті про помилку: Випуск 784: Кілька програм, що використовують одне ім’я постачальника послуг


Я зіткнувся з цією помилкою після "простого" переміщення моїх проектів із Eclipse на Android Studio, і ця порада вирішила проблему. Спасибі
Філіппу Джироламі

@PhilippeGirolami точно "просто". Нам знадобилося близько місяця, щоб повністю перейти дуже великий проект від Eclipse до Studio, і тепер ми накладаємо штрафи за 4+ хвилини часу побудови, порівняно з 10-15 секундами в Eclipse.
DiscDev

@PhilippeGirolami android studio 2.0 будується спеціально для подолання повільності - вони на бета-версії 5. Однак використовуйте програмне забезпечення бета-студії на свій страх і ризик, іноді це чудово, іноді це жахливо і зіпсує вашу ніч.
DiscDev

27

Це також може статися, коли у вас встановлена ​​старіша версія програми та внесені зміни до бібліотеки (підтримки) або файлу маніфесту. Видалення старих програм зі свого пристрою ( Settings --> Application --> <your application> --> Uninstall) вирішить проблему.


1
Те ж саме. Я користувався віртуальними пристроями genymotion і мені довелося видалити раніше встановлений додаток.
ibaralf

23

Якщо ви використовуєте SDK Facebook, то проблема може бути у значенні "повноваження", яке ви надаєте для провайдера Facebook.

ЗАМІНА -

<provider
        android:name="com.facebook.FacebookContentProvider"
        android:authorities="com.facebook.FacebookContentProvider"
        android:exported="true" />

З ->

<provider
        android:name="com.facebook.FacebookContentProvider"
        android:authorities="com.facebook.FacebookContentProvider[YOUR_APP_ID]"
        android:exported="true" />

Можливо, вам доведеться змінити defaultConfig.ApplicationIdтакож те, як пропонується в інших відповідях.


прихильне, я пропоную скористатися цим: android: vlasti = "$ {applicationId} .com.facebook.FacebookContentProvider"
Justinkoh

15

Така ж помилка може виникнути після перейменування пакетів. Перевірте значення в string.xml на android:authoritiesвід AndroidManifest.xml.

<provider
        android:authorities="@string/content_authority"
        android:name=".data.Provider"
        ... />

У string.xml значення повинно бути таким же, як назва вашого пакета, оголошене в маніфесті.

<string name="content_authority">com.whatever.android.sunshine.app</string>

Це також хороше рішення, але потрібен час + простір, щоб створити нову рядок у значеннях для кожного постачальника програми.
lukassos

8

Ім’я організації + постачальника, яке ви, ймовірно, заявили в маніфесті


7

В основному це сталося зі мною, коли я намагався змінити назву пакета програми.

Так, в емуляторі раніше було встановлено те саме додаток. Коли я намагався встановити додаток після зміни назви пакета, він сказав, що повноваження вже використовували старі програми в пристрої.

Просто після видалення програми це вирішило мою проблему.

Також ім'ям органу завжди має бути your.package.name.UNIQUENAME:;

приклад:

  <provider
        android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
        android:authorities="your.package.name.AviaryCdsProvider"
       />

Я додав провайдера "tools: substitu = =" android: vlasti "".
Крістін

7

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

<manifest ...>
    <application ...>
        <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.here.this.library.provider" android:exported="false" android:grantUriPermissions="true" tools:replace="android:authorities">
        </provider>
    </application>  
</manifest> 

6

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

Я запускав інструментальні тестові випадки, тому моє додаток не було видно в панелі запуску ... але він був встановлений і, таким чином, використовувався той самий постачальник вмісту . Отже, я повинен якось його видалити. ТакSettings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package

Тепер спробуйте запустити ... Це спрацює ...


6

Я думав, що видалення програми, перетягнувши його значок на «Видалити», вирішить проблему, але цього не сталося.

Ось що вирішило проблему:

  1. Перейдіть у Налаштування
  2. Виберіть програми
  3. Знайдіть свою програму (так, я був здивований, що все-таки знайшов її тут!) Та натисніть її
  4. У верхньому правому куті натисніть 3 крапки
  5. Виберіть " Видалити для всіх користувачів "

Спробуйте ще раз, це має працювати зараз.


5

Якщо ви використовуєте Facebook всередині додатка, перевірте тег провайдера у AndroidManifestфайлі та перевірте, project Idчи правильно цеandroid:authorities

<provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider112623702612345" android:exported="true" />

4

Зустрівся з цим питанням.

Розв’язав це :

1 - відкрити AndroidManifest.xml

2 - ctrl + f знайти "постачальника"

3 - знайдіть постачальника та оновіть там ім’я кореневого каталогу.

запустити проект. сподіваємось, питання буде виправлено!


2

встановлення за допомогою команди adb з командою ./adb install -r abc.apkвирішить проблему (вона буде перезаписана, навіть коли пристрій має більш високу версію програми)


1

Якщо ви перебуваєте на Xamarin, ви отримуєте цю помилку (можливо, через Firebase.Crashlytics):

INSTALL_FAILED_CONFLICTING_PROVIDER
Package couldn't be installed in [...]
Can't install because provider name dollar_openBracket_applicationId_closeBracket (in package [...]]) is already used by [...]

Як згадувалося тут , вам потрібно оновити Xamarin.Build.Download:

  1. Оновіть пакет Xamarin.Build.Download Nuget до 0.4.12-попереднього перегляду3
    • На Mac, вам може знадобитися , щоб перевірити Відбиває пакети пре-реліз в Add Packages вікні
  2. Закрити Visual Studio
  3. Видаліть усі кешовані місця NuGet Packages:
    • У Windows відкрийте Visual Studio, але не рішення:
      • Інструменти -> Опція -> Менеджер пакунків Nuget -> Загальне -> Очистити всі кеш-пам’яті Nuget
    • На Mac витріть такі папки:
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages папка в розчині
  4. Видаліть папки bin / obj з розчину
  5. Завантажте рішення
  6. Відновити Nuget пакети для рішення (має працювати автоматично)
  7. Перебудувати

0

У своєму Android-пристрої у мене були різні смаки однієї програми . Це дає мені помилку ВСТАНОВИТИ ПОВЕРХНІЙ КОНФЛІКЦІЙНИЙ ПОСТАВЧИК . тому я видаляю всі свої аромати того самого додатка. і спробував

adb install -r /Users/demo-debug-92acfc5.apk

Це вирішило мою проблему.


0

Ви можете видалити назву пакета "com.example" на пристрої, на якому ви запускаєте додаток, ніж після запуску програми. Це працювало для мене

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