INSTALL_FAILED_CONFLICTING_PROVIDER в Android
Я использую код open-srouce от Google для приложения под названием MyTracks.
Я получаю эту ошибку, когда оригинальное приложение установлено на телефоне.
INSTALL_FAILED_CONFLICTING_PROVIDER
Я знаю, что это из-за android:authorities
в манифесте.
вот часть манифеста:
<provider
android:name="com.google.android.apps.mytracks.content.MyTracksProvider"
android:authorities="com.google.android.maps.mytracks"
android:exported="true"
android:readPermission="com.google.android.apps.mytracks.READ_TRACK_DATA"
android:writePermission="com.google.android.apps.mytracks.WRITE_TRACK_DATA" />
<!-- Search suggestion provider -->
<provider
android:name="com.google.android.apps.mytracks.content.SearchEngineProvider"
android:authorities="com.google.android.maps.mytracks.search"
android:exported="false" />
Итак, мой вопрос: я хочу знать, может ли этот подход решить проблему или нет, потому что я боюсь изменить все имена пакетов, а затем сломать все приложение.
- Значение
android :authorities
- это имя пакета. android:name
- это имя класса этого провайдера.
Правильно ли я?
Если я изменю имя пакета, другое значение, отличное от com.google etx, и переименуйте все ссылки/импорт этого пакета, должна ли проблема исчезнуть?
Ответы
Ответ 1
Значение android: authority - это имя пакета.
В этом случае это имя пакета. Он просто должен быть уникальным.
Андроид: имя - это имя класса этого провайдера
Правильно.
Если я изменю имя пакета, другое значение, отличное от com.google etx, и переименуйте все ссылки/импорт этого пакета, должна ли проблема исчезнуть?
Название пакета не имеет к этому никакого отношения. Возможно, вам также придется изменить это, так как ваше приложение может быть установлено рядом с обычным, не измененным приложением.
Вам нужно иметь уникальное значение для android:authorities
, а код в вашем приложении, использующем этот ContentProvider
, должен использовать соответствующий Uri
(content://whatever.you.change.the.authority.to/...
).
Ответ 2
Если вы используете Google Maps + Google Play Services внутри проекта библиотеки, вы можете столкнуться с этой ошибкой при попытке запустить приложение, использующее вашу библиотеку, в то время как другое приложение, использующее одну и ту же библиотеку, уже установлено на вашем устройстве.
Fix:
убедитесь, что defaultConfig.applicationId определен в разделе Android файла build.gradle
для каждого проекта, используя вашу библиотеку
android {
defaultConfig.applicationId = "com.company.appname"
}
Я бы рекомендовал использовать имя пакета для конкретного приложения. С этим исправлением имена поставщиков больше не будут конфликтовать, и ваше приложение будет работать как ожидалось.
Симптомы
1.) Ваши пользователи видят ужасную ошибку установки "-505" при установке вашего приложения из Play Маркета.
2.) Вы увидите это сообщение об ошибке при попытке установить второе приложение, использующее вашу библиотеку через Android Studio:
![введите описание изображения здесь]()
В вашей консоли вы увидите следующее сообщение:
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: несколько приложений, использующих имя одного поставщика полномочий
Ответ 3
просто удалите приложение helloFacebooks из вашего устройства
Ответ 4
если вы используете ex exbook-sdk
то для каждого приложения вам нужна уникальная строка в манифесте
<provider android:authorities="com.facebook.app.FacebookContentProviderxxxxxxxxxx"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
xxxxxxxxxx - должен быть уникальным для каждого приложения, для facebook-sdk это ваш номер facebook_id
Ответ 5
Я получил ту же ошибку, когда я изменил имя пакета в манифесте приложения. Это создает конфликт при попытке установить приложение снова (с новым именем пакета). Решение заключается в удалении старой версии приложения (которое использует старое имя пакета), тогда вы сможете установить новую версию.
Ответ 6
gradle также должен содержать этот
defaultConfig {
applicationId "com.example.app"
}
Я полностью оставил его
Ответ 7
CommonsWare имеет это право, однако, есть больше деталей, которые могут помочь.
Для меня было две ключевые части решения. Сначала я добавил $ (applicationId) к записи провайдера Manifest:
<provider
tools:replace="android:authorities"
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.files"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/fileprovider" />
</provider>
Во-вторых, когда вы переключаете Build Varients, и для меня это между "отладкой" и "выпуском", вам также необходимо синхронизировать проект с файлами Gradle. Недостаточно просто очистить и восстановить проект.
В Android Studio есть две вкладки внизу страницы AndroidManifest.xml. На вкладке "Текст", которую вы используете для редактирования, и на вкладке "Объединенный манифест" отображается итоговый манифест после сборки, и я вижу, что он правильно вводит applicationId в раздел поставщика android: полномочия.
Ответ 8
Просто удалите приложение с устройства, которое вы пытаетесь запустить, и повторите попытку переустановки приложения. Существующее приложение конфликтует с новым.
Ответ 9
Возможно, вы скомпилируете библиотеку или библиотеки. Например:
compile 'com.google.android.gms:play-services:8.1.0'
compile 'com.google.android.gms:play-services-ads:8.1.0'
compile 'com.google.android.gms:play-services-identity:8.1.0'
compile 'com.google.android.gms:play-services-gcm:8.1.0'
Над кодом сервисы google play (первая строка) включают все другие сервисы.
Ответ 10
может быть ваша память телефона заполнена, поэтому, пожалуйста, проверьте ее