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

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

31 ответ

Решение

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

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

Если у вас разные вкусы, и вы хотите избежать коллизий в имени авторитета, вы можете добавить applicationIdSuffix строить типы и использовать полученные applicationId в вашем манифесте, вот так:

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

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

Если вы используете 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 также как предложено в других ответах.

Если вы используете 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: несколько приложений, использующих одно имя поставщика полномочий.

Такая же ошибка может возникнуть после переименования пакетов. Проверьте значение в 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>

Сформулируйте очевидное, но также убедитесь, что вы молча не перепутали ссылку на в .

В моем случае я допустил опечатку и пропустил чертов знак доллара:

      android:authorities="{applicationId}.myprovider"

вместо :

      android:authorities="${applicationId}.myprovider"

Это не вызвало немедленной ошибки (поскольку это действительное имя центра). Но через пару дней, когда я попытался установить разные варианты приложения, мне было очень трудно понять, что не так, поскольку сообщение об ошибке не дает много информации о том, что не так с поставщиками контента.

Другой способ устранить эту проблему - сравнить ваши объединенные манифесты в поисках идентичных источников.

Я пробовал много решений, но не смог найти решение... но эта ссылка помогла мне... Я хочу дать подробную информацию о проблеме...

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

Теперь попробуйте запустить... Это будет работать...

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

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

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

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

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

пример:

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

Я думал, что удаление приложения путем перетаскивания его значка на "Удалить" решит проблему, но это не так.

Вот что решило проблему:

  1. Перейдите в настройки
  2. Выберите приложения
  3. Найдите свое приложение (да, я был удивлен, увидев его здесь!) И нажмите на него
  4. В правом верхнем углу нажмите 3 точки
  5. Выберите "Удалить для всех пользователей"

Попробуйте еще раз, это должно работать сейчас.

У меня была похожая проблема, когда я использовал одну библиотеку в нескольких приложениях. Необходимо было просто обновить ваш 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> 

Обнаружена эта проблема.

Решил это:

1 - открыть AndroidManifest.xml

2 - Ctrl+ F найти "провайдер"

3 - найдите провайдера и обновите там имя вашего корневого каталога.

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

Если вы используете Facebook внутри приложения, проверьте тег провайдера внутри AndroidManifest файл и проверьте ваш project Id правильно для android:authorities

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

Если вы используете эмулятор, вы можете попробовать следующее. Ниже сработало для меня. Перейдите в Инструменты -> AVD Manager -> (Выберите свой эмулятор) -> Wipe Data. Ошибка исчезла.

У меня была эта проблема:

Installation did not succeed.
The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER

но это было не от поставщика манифеста, библиотека ниже в моем приложении конфликтует с другим приложением, и другие не могут быть установлены:

implementation 'com.iceteck.silicompressorr:silicompressor:2.2.1'

Установить с помощью ADB с командой ./adb install -r abc.apk решит проблему (перезапишет, даже если на устройстве установлена ​​более высокая версия приложения)

Я получил эту ошибку при реализации библиотеки со следующим AndroidmManifest.xml

<provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="library.path.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>

Я решил это, когда поместил следующий код в Project AndroidManifest.xml (app/src/main):

<provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true"
        tools:replace="android:authorities">
    </provider>

Ага! У меня та же проблема, что и у вас… Как вы сказали, вы используете «вариацию». сохранить уникальность «авторитетов», вы можете написать так

      android:authorities="${applicationId}.provider"

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

Вы можете удалить пакет с именем "com.example" с устройства, на котором вы запускаете приложение, после того, как вы запустите приложение. Это сработало для меня

если вы используете проверку провайдера и сделайте это следующим методом

              <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="androidx.multidex.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_path" />
    </provider>

или использовать его

          <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.contentprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_path" />
    </provider>

также, если приложение уже выходит из вашего мобильного удаления, а затем проверьте

Мне это помогло: зайдите в AndroidManifest и вставьте или замените этим кодом

<provider
        android:authorities="${applicationId}.here.this.library.provider"
        android:name="androidx.core.content.FileProvider"
        android:exported="false"
        android:grantUriPermissions="true"
        tools:replace="android:authorities" >

    </provider>

Если вы используете 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 может потребоваться установить флажок Показать предварительные версии в окне " Добавить пакеты".
  2. Закрыть Visual Studio
  3. Удалите все кэшированные расположения пакетов NuGet:
    • В Windows откройте Visual Studio, но не решение:
      • Сервис -> Параметр -> Диспетчер пакетов Nuget -> Общие -> Очистить все кэш Nuget
    • На Mac протрите следующие папки:
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages папка в решении
  4. Удалить папки bin/obj в решении
  5. Загрузить решение
  6. Восстановление пакетов Nuget для решения (должно запускаться автоматически)
  7. перестраивать

Если вы используете поставщика контента Audience Network, вам необходимо добавить этот код в свое приложение AndroidManifest.xml.

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

Идентификатор вашего приложения Facebook ---> 165632208074623

Если вам нужно использовать Facebook только для входа в ваше приложение, вот совет: (это исправление работало в проекте Cordova) Шаги 1 и 2 должны быть выполнены, чтобы решить проблему.

1. найдите файл: platform/android/android.json внутри этого файла: удалите этот код:

      ,{"xml": "<provider android:authorities=\"com.facebook.app.FacebookContentProvider<FACEBOOK_APP_ID>\" android:exported=\"true\" android:name=\"com.facebook.FacebookContentProvider\" />","count": 1
}

Затем найдите файл: platform/android/app/src/main/androidManifest.xml.

удалите этот код:

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

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

Внесите изменения в органы власти, как сказал @Jose L Ugia.

(Вы можете найти поставщика в манифесте (манифесте слияния))

В основном он будет подключен к SDK, который вы внедрили, поэтому удалите строку реализации SDK и синхронизируйте Gradle, а затем снова добавьте строку реализации и синхронизируйте Gradle.

Линия реализации:implementation files(<your SDK>)

Код провайдера: (вам нужно прокрутить вниз в манифесте слияния, чтобы найти его)

Я пробовал много решений, но не смог найти решение: я изменил это в AndroidManifest.

      <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.com.shareFile"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
  </provider>

Решение 1

Запустите приложение на физическом устройстве вместо эмулятора. Я столкнулся с этой проблемой, и для моего приложения не был определен поставщик контента.

Решение 2

В другом случае у меня было установлено инструментальное тестовое приложение, соответствующее тому же applicationId.

Чтобы решить проблему, мне пришлось запустить ./gradlew uA - u - сокращение от uninstallAll задача.

В качестве альтернативы вы можете использовать Gradle панель и выбрать для навигации приложение \ установки \ uninstallAll задачи

Если вы используете эмулятор, вы можете стереть данные

В моем устройстве Android были разные версии одного и того же приложения. Это дает мне ошибку УСТАНОВИТЬ СБОЙ ПРОВАЙДЕРА КОНФЛИКТОВ. поэтому я удаляю все версии одного и того же приложения. и попробовал

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

Это решило мою проблему.

        need to use android:name="androidx.core.content.contentprovider 
        or android:name="androidx.core.content.provider insteadof 
        android:name="androidx.core.content.fileprovider

        <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.contentprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/filepaths" />
    </provider>
Другие вопросы по тегам