Установка показывает ошибку в консоли: УСТАНОВИТЕ СБОЙ ПРОВАЙДЕРА КОНФЛИКТОВ
Я экспериментирую с примером программы 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"
/>
Я думал, что удаление приложения путем перетаскивания его значка на "Удалить" решит проблему, но это не так.
Вот что решило проблему:
- Перейдите в настройки
- Выберите приложения
- Найдите свое приложение (да, я был удивлен, увидев его здесь!) И нажмите на него
- В правом верхнем углу нажмите 3 точки
- Выберите "Удалить для всех пользователей"
Попробуйте еще раз, это должно работать сейчас.
У меня была похожая проблема, когда я использовал одну библиотеку в нескольких приложениях. Необходимо было просто обновить ваш 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:
- Обновите пакет Nuget дляXamarin.Build.Download до версии 0.4.12-preview3.
- На Mac может потребоваться установить флажок Показать предварительные версии в окне " Добавить пакеты".
- Закрыть Visual Studio
- Удалите все кэшированные расположения пакетов NuGet:
- В Windows откройте Visual Studio, но не решение:
- Сервис -> Параметр -> Диспетчер пакетов Nuget -> Общие -> Очистить все кэш Nuget
- На Mac протрите следующие папки:
~/.local/share/NuGet
~/.nuget/packages
packages
папка в решении
- В Windows откройте Visual Studio, но не решение:
- Удалить папки bin/obj в решении
- Загрузить решение
- Восстановление пакетов Nuget для решения (должно запускаться автоматически)
- перестраивать
Если вы используете поставщика контента 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>