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

может быть ваша память телефона заполнена, поэтому, пожалуйста, проверьте ее