J'expérimente avec l'exemple de programme NotesList dans le SDK Android. J'ai légèrement modifié le programme, mais lorsque j'installe ma version modifiée, le message INSTALL_FAILED_CONFLICTING_PROVIDER s'affiche dans la console lorsque je tente de l'installer alors que le programme de notes d'origine est déjà sur le périphérique. 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 original puis installe ma version modifiée.
L'autorité, telle qu'énumérée dans Android:authorities
, doit être unique. Citation la documentation pour 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). Il s’agit généralement du nom de la sous-classe ContentProvider qui implémente le fournisseur.
Si vous avez différentes variantes et que vous souhaitez éviter les collisions dans le nom de l'autorité, vous pouvez ajouter un applicationIdSuffix
pour créer des types et utiliser la applicationId
résultante dans votre manifeste, comme ceci:
<...
Android:authorities="${applicationId}.contentprovider"/>
Si vous utilisez Google Maps + 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 utilisant votre bibliothèque, tandis qu'une application différente utilisant la même bibliothèque est déjà installée sur votre appareil.
Fix: Assurez-vous que defaultConfig.applicationId est défini dans la section Android du fichier build.gradle
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 cette correction, les noms de fournisseur ne seront plus en conflit et votre application s'exécutera comme prévu.
Symptômes
1.) Vos utilisateurs constatent l'erreur d'installation "-505" tant redoutée lors de l'installation de votre application depuis le 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]:
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 fichier build.gradle
pour chaque projet utilisant votre bibliothèque.
Android {
defaultConfig.applicationId = "com.company.appname"
}
Vous trouverez plus de lectures ici dans le rapport de bogue d'origine: Problème 784: Plusieurs applications utilisant le même nom de fournisseur d'autorité
Cela peut également se produire lorsqu'une version plus ancienne de votre application est installée et que vous apportez des modifications à la bibliothèque (d'assistance) ou au fichier manifeste. Supprimer les anciennes applications de votre appareil (Settings --> Application --> <your application> --> Uninstall
) résoudra le problème.
Si vous utilisez le Kit de développement logiciel (SDK) de Facebook, le problème peut concerner 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 modifier le defaultConfig.ApplicationId
également comme suggéré dans d'autres réponses.
La même erreur peut se produire après avoir renommé des packages. Vérifiez la valeur dans string.xml pour Android:authorities
à partir de AndroidManifest.xml.
<provider
Android:authorities="@string/content_authority"
Android:name=".data.Provider"
... />
Dans string.xml, la valeur doit être identique à votre nom de package, déclaré dans le manifeste.
<string name="content_authority">com.whatever.Android.sunshine.app</string>
Le nom de l'autorité + du fournisseur que vous avez déclaré dans le manifeste est probablement
En gros, cela m'est arrivé lorsque j'ai essayé de changer le nom du paquet de l'application.
Donc, 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 paquet, il a été indiqué que l'autorité déjà utilisée par l'ancienne application de l'appareil.
Simplement après la désinstallation de l'application, mon problème a été résolu.
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"
/>
J'ai essayé beaucoup de solutions mais je n'ai pas trouvé de solution ... mais ce lien m'a aidé ... Je veux donner des détails sur le problème ...
J'exécutais des scénarios de test Instrumented pour que mon application ne soit pas visible dans le programme de lancement ... mais elle a été installée et utilise donc Same Content Provider. Donc, je devrais le désinstaller en quelque sorte. Alors Settings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package
Maintenant, essayez de courir ... Cela fonctionnera ...
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 la 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>
Si vous utilisez Facebook dans l'application, recherchez l'étiquette du fournisseur dans le fichier AndroidManifest
et vérifiez que votre project Id
est correct pour Android:authorities
<provider Android:name="com.facebook.FacebookContentProvider" Android:authorities="com.facebook.app.FacebookContentProvider112623702612345" Android:exported="true" />
installer en utilisant adb avec la commande ./adb install -r abc.apk
résoudra le problème (il écrasera même lorsque le périphérique a une version plus récente de l'application)
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:
Essayez encore, ça devrait marcher maintenant.
Dans mon appareil Android, j'avais différentes versions de la même application install. Cela me donne une erreur INSTALLER UN FOURNISSEUR CONFLICTING FAILE . Je désinstalle donc toutes les versions de la même application. et essayé
adb install -r /Users/demo-debug-92acfc5.apk
Cela a résolu mon problème.
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:
~/.local/share/NuGet
~/.nuget/packages
packages
dans la solutionRencontré ce problème.
Résolu par:
1 - ouvrez AndroidManifest.xml
2 - ctrl + f recherche "fournisseur"
3 - Recherchez le fournisseur et mettez à jour le nom de votre répertoire racine.
exécuter le projet. j'espère que le problème sera résolu!