Установка показывает ошибку в консоли: УСТАНОВИТЕ СБОЙ ПРОВАЙДЕРА КОНФЛИКТОВ


165

Я экспериментирую с примером программы NotesList в Android SDK. Я сделал небольшое изменение в программе, но когда я устанавливаю свою отредактированную версию, я продолжаю получать сообщение INSTALL_FAILED_CONFLICTING_PROVIDER в консоли, когда пытаюсь установить ее, когда оригинальная программа заметок уже находится на устройстве. Что мне нужно изменить в провайдере, чтобы сделать его уникальной базой данных? Это работает нормально, если я удаляю исходную программу заметок, а затем устанавливаю свою отредактированную версию.

Ответы:


198

Полномочия, перечисленные в, android:authoritiesдолжны быть уникальными. Цитирование документации для этого атрибута :

Чтобы избежать конфликтов, имена авторитетов должны использовать соглашение об именах в стиле Java (например, com.example.provider.cartoonprovider). Как правило, это имя подкласса ContentProvider, который реализует поставщика


5
@ CommonsWare Я использовал 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/…
Хосе Л Угия

Я думаю, что если вы сделаете это, это исправит разные вкусы продукта, так как вам applicationIdвсе равно придется создавать разные вкусы . Если у вас были разные buildTypes, вы также хотите applicationIdразличаться между ними, и это то, что applicationIdSuffixбудет делать свойство.
Chubbsondubs

Спасибо, используя жестко запрограммированный андроид: полномочия в fileprovider - это как раз моя проблема!
Брюс

Отличный ответ! Перед добавлением и запуском очистите старую версию ваших приложений.
Эрен Утку,

30

Если вы используете Google Maps + Google Play Services внутри проекта библиотеки (особенно если вы недавно мигрировали из Eclipse в Android Studio), вы можете столкнуться с этой ошибкой при попытке запустить приложение, которое использует вашу библиотеку, в то время как другое приложение, которое использует та же библиотека уже установлена ​​на вашем устройстве.

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

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 и мне пришлось удалить ранее установленное приложение.
Ибаральф

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: authority = "$ {applicationId} .com.facebook.FacebookContentProvider"
justinkoh

15

Такая же ошибка может возникнуть после переименования пакетов. Проверьте значение в string.xml для android:authoritiesAndroidManifest.xml.

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

В string.xml значение должно совпадать с именем вашего пакета, объявленным в манифесте.

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

Это также хорошее решение, но оно требует времени и пространства для создания новой строки в значениях для каждого поставщика в приложении.
Лукассос

8

Возможно, имя Authority + Provider, которое вы указали в манифесте


7

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

Итак, в эмуляторе это же приложение было установлено раньше. Когда я попытался установить приложение после изменения имени пакета, он сказал, что полномочия уже использовались старым приложением в устройстве.

Просто после удаления приложения это решило мою проблему.

Кроме того, имя Органа всегда должно быть your.package.name.UNIQUENAME:;

пример :

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

Я добавил 'tools: replace = "android: полномочия" к провайдеру.
Кристина

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 with ./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. Обновите пакет Nuget для Xamarin.Build.Download до версии 0.4.12-preview3.
    • На Mac, вам может понадобиться , чтобы проверить Отражает пакеты пре-релиз в Add Packages окне
  2. Закрыть Visual Studio
  3. Удалите все кэшированные расположения пакетов NuGet:
    • В 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.