Установка показывает ошибку в консоли: ошибка установки конфликтующего поставщика
я экспериментирую с образцом программы NotesList в Android SDK. Я сделал небольшое изменение в программе, но когда я устанавливаю свою отредактированную версию, я продолжаю получать сообщение INSTALL_FAILED_CONFLICTING_PROVIDER в консоли, когда я пытаюсь установить его, когда оригинальная программа notes уже находится на устройстве. Что мне нужно изменить в провайдере, чтобы сделать его уникальной базой данных? Он отлично работает, если я удаляю оригинальную программу notes, а затем устанавливаю отредактированную версию.
15 ответов
авторитет, как указано в android:authorities
должен быть уникальным. Цитата документация для этого атрибута:
чтобы избежать конфликтов, имена полномочий должны использовать соглашение об именах в стиле Java (например, com.образец.поставщик.cartoonprovider). Как правило, это имя подкласса ContentProvider, который реализует provider
Если у вас разные вкусы, и вы хотите избежать столкновений в имени органа, вы можете добавить applicationIdSuffix
для построения типов и использования результирующего applicationId
в вашем манифесте, вот так:
<...
android:authorities="${applicationId}.contentprovider"/>
если вы используете 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: несколько приложений, использующих один и тот же поставщик полномочий имя
Это также может произойти, когда у вас установлена более старая версия вашего приложения и внесены изменения в (поддержку) библиотеку или файл manifest. Удаление старых приложений с устройства (Settings --> Application --> <your application> --> Uninstall
) решит проблему.
Если вы используете Facebook SDK, то проблема может быть в значении "полномочия", которое вы предоставляете для поставщика 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
также, как предложено в других ответах.
та же ошибка может возникнуть после переименования пакетов. Проверьте значение в строке.xml для android:authorities
из AndroidManifest.XML.
<provider
android:authorities="@string/content_authority"
android:name=".data.Provider"
... />
в строку.xml значение должно совпадать с именем пакета, объявленным в манифесте.
<string name="content_authority">com.whatever.android.sunshine.app</string>
в основном это произошло со мной, когда я пытался изменить имя пакета приложения.
Итак, в эмуляторе было установлено то же приложение. Когда я попытался установить приложение после изменения имени пакета, он сказал, что авторитет уже используется старым приложением в устройстве.
просто после удаления приложения, он решил мою проблему.
кроме того, имя органа всегда должно быть:your.package.name.UNIQUENAME
;
пример :
<provider
android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
android:authorities="your.package.name.AviaryCdsProvider"
/>
если вы используете Facebook внутри приложения проверьте тег поставщика внутри AndroidManifest
файл и проверьте свой project Id
правильно android:authorities
<provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider112623702612345" android:exported="true" />
У меня была аналогичная проблема, когда я использовал одну библиотеку в нескольких приложениях. Нужно было просто обновить свой 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>
Я пробовал много решений, но не смог найти решение... но это!--2-->ссылке помог мне... Я хочу дать подробную информацию о проблеме...
я запускал инструментальные тестовые случаи, поэтому мое приложение не было видно в launcher... но он был установлен, и, таким образом, используя Тот Же Контент-Провайдер. Итак, я должен как-то удалить его. Так что Settings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package
теперь попробуйте запустить... Это сработает...
установить с помощью adb с командой ./adb install -r abc.apk
решит проблему (он будет перезаписывать, даже если устройство имеет более высокую версию приложения)
в моем устройстве android у меня было различные ароматы одного и того же приложения установить. Это дает мне ошибку ОШИБКА УСТАНОВКИ КОНФЛИКТУЮЩЕГО ПОСТАВЩИКА. поэтому я удаляю все мои вкусы одного и того же приложения. и попробовал!--6-->
adb install -r /Users/demo-debug-92acfc5.apk
это решило мою проблему.
возникла эта проблема.
решили by:
1 - открыть AndroidManifest.в XML
2-ctrl+f найти "провайдер"
3-найти поставщика и обновить имя корневого каталога там.
запустить проект. надеюсь, проблема будет исправлена!
Я думал, что удаление приложения, перетащив его значок "Удалить", решит проблему, но это не так.
вот что решило проблему:
- перейдите в Настройки
- Выбрать Приложения
- найдите свое приложение (да, я был удивлен, что все еще нашел его здесь!) и нажмите его
- в правом верхнем углу нажмите 3 точки
- выбираем "Удалить для всех пользователей"
попробуйте еще раз, должно работать сейчас.