L'installation affiche une erreur dans la console: INSTALLER UN FOURNISSEUR DE CONFLIT ÉCHOUÉ

165

J'expérimente le programme exemple NotesList dans le SDK Android. J'ai fait une légère variation dans le programme, mais lorsque j'installe ma version modifiée, je continue à recevoir le message INSTALL_FAILED_CONFLICTING_PROVIDER dans la console lorsque j'essaie de l'installer alors que le programme de notes d'origine est déjà sur l'appareil. Que dois-je changer dans le fournisseur pour en faire une base de données unique? Cela fonctionne bien si je désinstalle le programme de notes d'origine, puis installe ma version modifiée.

johnsonjp34
la source

Réponses:

198

L'autorité, comme indiqué dans android:authoritiesdoit être unique. Citant la documentation de cet attribut :

Pour éviter les conflits, les noms d'autorité doivent utiliser une convention de dénomination de style Java (telle que com.example.provider.cartoonprovider). En général, c'est le nom de la sous-classe ContentProvider qui implémente le fournisseur

CommonsWare
la source
5
@ CommonsWare J'ai utilisé un android:authoritiesattribut dans ma AndroidManifest providerbalise. J'ai utilisé ce projet comme projet de bibliothèque Android en utilisant ce projet de bibliothèque. J'ai développé quelques projets. comment résoudre le install_failed_conflicting_providerproblème si nous avons utilisé un projet de bibliothèque commun.
Jamal
1
@jamal: si vous utilisez Gradle pour Android, par exemple depuis Android Studio, les options de fusion du manifeste vous permettront de personnaliser la chaîne d'autorité. Sinon, supprimez le <provider>du manifeste de la bibliothèque et définissez-le au niveau de l'application avec une chaîne d'autorité unique.
CommonsWare
4
@jamal: tools.android.com/tech-docs/new-build-system/user-guide/… - si vous avez d'autres questions et que vous ne trouvez pas de réponses via une recherche, posez une nouvelle question Stack Overflow.
CommonsWare
11
si vous utilisez la bibliothèque dans deux projets avec le même nom de fournisseur, cela pourrait provoquer cette erreur
Mohammed Subhi Sheikh Quroush
1
Je n'ai rien de tel comme android:authoritiesou <provider>dans mon manifeste de bibliothèque et j'obtiens cette erreur.
lef
143

Si vous avez différentes saveurs et que vous souhaitez éviter les collisions dans le nom de l'autorité, vous pouvez ajouter un type applicationIdSuffixde construction et utiliser le résultat applicationIddans votre manifeste, comme ceci:

<...
 android:authorities="${applicationId}.contentprovider"/>
Jose L Ugia
la source
Vous pouvez définir le vôtre applicationIdsur chaque définition de saveur de produit. developer.android.com/studio/build/…
Jose L Ugia
Je pense que si vous faites cela, cela corrigera les différentes saveurs des produits, car vous devez de toute façon créer des différences applicationIdpour chaque saveur. Si vous aviez différents buildTypes, vous souhaitez également applicationIdles différencier, et c'est ce que applicationIdSuffixfera la propriété.
chubbsondubs
Merci d'utiliser un android codé en dur: les autorités dans le fournisseur de fichiers sont exactement mon problème!
Bruce
Très bonne réponse! Avant de les ajouter et de les exécuter, nettoyez l'ancienne version de vos applications.
Eren Utku
30

Si vous utilisez Google Maps + les services Google Play dans un projet de bibliothèque (en particulier si vous avez récemment migré d'Eclipse vers Android Studio), vous pouvez rencontrer cette erreur lorsque vous essayez d'exécuter une application qui utilise votre bibliothèque, alors qu'une autre application utilise la même bibliothèque est déjà installée sur votre appareil.

Correction: assurez-vous que defaultConfig.applicationId est défini dans la section Android du build.gradlefichier pour chaque projet utilisant votre bibliothèque

android {
    defaultConfig.applicationId = "com.company.appname"
}

Je recommanderais d'utiliser le nom du package de l'application spécifique. Avec ce correctif, les noms des fournisseurs ne seront plus en conflit et votre application fonctionnera comme prévu.

Symptômes

1.) Vos utilisateurs voient l'erreur d'installation redoutée "-505" lors de l'installation de votre application à partir du Play Store.

2.) Vous verrez ce message d'erreur lorsque vous essayez d'installer une deuxième application qui utilise votre bibliothèque via Android Studio [INSTALL_FAILED_CONFLICTING_PROVIDER]:

Fournisseur en conflit

Dans votre console, vous verrez un message comme celui-ci:

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

Le correctif consiste à s'assurer que defaultConfig.applicationId est défini dans la section Android du build.gradlefichier pour chaque projet utilisant votre bibliothèque

android {
    defaultConfig.applicationId = "com.company.appname"
}

Plus de lecture peut être trouvée ici dans le rapport de bogue original: Problème 784: Plusieurs applications utilisant le même nom de fournisseur d'autorité

DiscDev
la source
J'ai rencontré cette erreur après avoir "simplement" déplacé mes projets d'Eclipse vers Android Studio et cette astuce a résolu le problème. Merci
Philippe Girolami
@PhilippeGirolami "simplement" bien sûr. Il nous a fallu environ un mois pour effectuer la transition complète d'un très gros projet d'Eclipse vers Studio, et nous sommes maintenant pénalisés avec un temps de construction de plus de 4 minutes, contre 10 à 15 secondes dans Eclipse.
DiscDev
@PhilippeGirolami android studio 2.0 est spécialement conçu pour remédier à la lenteur - ils sont en version bêta 5. Cependant, utilisez le logiciel bêta studio à vos risques et périls, parfois cela fonctionne très bien, parfois c'est horrible et gâchera votre nuit.
DiscDev
27

Cela peut également se produire lorsque vous avez installé une ancienne version de votre application et que vous avez apporté des modifications à la bibliothèque (de support) ou au fichier manifeste. La suppression des anciennes applications de votre appareil ( Settings --> Application --> <your application> --> Uninstall) résoudra alors le problème.

nburk
la source
1
Pareil ici. J'utilisais des appareils virtuels genymotion et j'ai dû supprimer l'application précédemment installée.
ibaralf
23

Si vous utilisez le SDK Facebook, le problème peut être lié à la valeur «autorités» que vous indiquez pour le fournisseur Facebook.

REMPLACER -

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

AVEC ->

<provider
        android:name="com.facebook.FacebookContentProvider"
        android:authorities="com.facebook.FacebookContentProvider[YOUR_APP_ID]"
        android:exported="true" />

Vous devrez peut-être changer le defaultConfig.ApplicationIdégalement comme suggéré dans d'autres réponses.

Ankit Aggarwal
la source
upvoted, je suggère d'utiliser ceci: android: authorités = "$ {applicationId} .com.facebook.FacebookContentProvider"
justinkoh
15

La même erreur peut se produire après avoir renommé des packages. Vérifiez la valeur dans string.xml pour à android:authoritiespartir d'AndroidManifest.xml.

<provider
        android:authorities="@string/content_authority"
        android:name=".data.Provider"
        ... />

Dans string.xml, la valeur doit être la même que le nom de votre package, déclaré dans le manifeste.

<string name="content_authority">com.whatever.android.sunshine.app</string>
boursier
la source
C'est également une bonne solution mais cela prend du temps + de l'espace pour créer une nouvelle chaîne dans les valeurs de chaque fournisseur de l'application.
lukassos du
8

Le nom de l'autorité + du fournisseur que vous avez déclaré dans le manifeste probablement

Benoit
la source
7

En gros, cela m'est arrivé lorsque j'ai essayé de changer le nom du package de l'application.

Ainsi, dans l'émulateur, la même application a été installée auparavant. Lorsque j'ai essayé d'installer l'application après avoir changé le nom du package, il a été dit que l'autorité était déjà utilisée par une application plus ancienne dans l'appareil.

Simplement après avoir désinstallé l'application, cela a résolu mon problème.

De plus, le nom de l'autorité doit toujours être your.package.name.UNIQUENAME:;

exemple :

  <provider
        android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
        android:authorities="your.package.name.AviaryCdsProvider"
       />
Ajay P. Prajapati
la source
J'ai ajouté 'tools: replace = "android: autorité"' au fournisseur.
Christine
7

J'ai eu un problème similaire lorsque j'ai utilisé une bibliothèque dans plusieurs applications. Il était nécessaire de mettre à jour votre AndroidManifest.xml avec cette déclaration de fournisseur exacte ci-dessous.

<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> 
Vladyslav Panchenko
la source
6

J'ai essayé de nombreuses solutions mais je n'ai pas pu trouver de solution ... mais ce lien m'a aidé ... Je veux donner des détails sur le problème ...

J'exécutais des cas de test instrumentés, donc mon application n'était pas visible dans le lanceur ... mais elle a été installée et utilise donc le même fournisseur de contenu . Donc, je devrais le désinstaller d'une manière ou d'une autre. AlorsSettings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package

Maintenant, essayez de courir ... Cela fonctionnera ...

Kushal
la source
6

Je pensais que désinstaller l'application en faisant glisser son icône sur «Désinstaller» résoudrait le problème, mais ce n'est pas le cas.

Voici ce qui a résolu le problème:

  1. Aller aux paramètres
  2. Choisissez des applications
  3. Trouvez votre application (oui j'ai été surpris de la trouver encore ici!) Et appuyez dessus
  4. En haut à droite, appuyez sur les 3 points
  5. Sélectionnez " Désinstaller pour tous les utilisateurs "

Réessayez, cela devrait fonctionner maintenant.

Nicolas Raoul
la source
5

Si vous utilisez Facebook à l'intérieur de l'application, vérifiez la balise de fournisseur dans le AndroidManifestfichier et vérifiez que votre project Idest correct pourandroid:authorities

<provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider112623702612345" android:exported="true" />
Dattatray Nande
la source
4

Rencontré ce problème.

Résolu par:

1 - ouvrez AndroidManifest.xml

2 - ctrl + f trouver "fournisseur"

3 - trouvez le fournisseur et mettez à jour le nom de votre répertoire racine ici.

exécuter le projet. j'espère que le problème sera résolu!

Ali Nawaz
la source
2

installer en utilisant adb avec la commande ./adb install -r abc.apkrésoudra le problème (il écrasera même lorsque l'appareil a une version d'application supérieure)

Quang Vĩnh Hà
la source
1

Si vous êtes sur Xamarin et que vous obtenez cette erreur (probablement à cause de 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 [...]

Comme mentionné ici , vous devez mettre à jour Xamarin.Build.Download:

  1. Mettez à jour le package Nuget Xamarin.Build.Download vers 0.4.12-preview3
    • Sur Mac, vous devrez peut-être cocher Afficher les packages de pré-version dans la fenêtre Ajouter des packages
  2. Fermer Visual Studio
  3. Supprimez tous les emplacements mis en cache des packages NuGet:
    • Sous Windows, ouvrez Visual Studio mais pas la solution:
      • Outils -> Option -> Gestionnaire de packages Nuget -> Général -> Effacer tous les cache (s) Nuget
    • Sur Mac, nettoyez les dossiers suivants:
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages dossier en solution
  4. Supprimer les dossiers bin / obj dans la solution
  5. Chargez la solution
  6. Restaurer les packages Nuget pour la solution (doit s'exécuter automatiquement)
  7. Reconstruire
gianlucaparadise
la source
0

Dans mon appareil Android, j'avais différentes saveurs de la même installation d' application . Cela me donne une erreur INSTALLER FAILED CONFLICTING PROVIDER . donc je désinstalle toutes mes saveurs de la même application. et essayé

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

Cela a résolu mon problème.

Vrushali Raut
la source
0

Vous pouvez désinstaller le nom de package "com.example" de l'appareil sur lequel vous exécutez l'application après avoir exécuté l'application. Cela a fonctionné pour moi

MEGHA DOBARIYA
la source