J'expérimente le programme d'exemple NotesList dans le SDK Android. J'ai fait une légère modification du programme, mais lorsque j'installe ma version modifiée, je continue à obtenir le message INSTALL_FAILED_CONFLICTING_PROVIDER dans la console lorsque j'essaie de l'installer alors que le programme Notes original est déjà sur l'appareil. Que dois-je modifier dans le Provider pour en faire une base de données unique ? Tout fonctionne bien si je désinstalle le programme Notes d'origine et que j'installe ma version modifiée.
Réponses
Trop de publicités?L'autorité, telle que listée dans android:authorities
doit être unique. Citation : la documentation relative à cet attribut :
Pour éviter les conflits, les noms d'autorité doivent utiliser une convention de dénomination de style Java (comme com.example.provider.cartoonprovider). En général, il s'agit du nom de la sous-classe ContentProvider qui implémente le fournisseur.
Si vous avez des saveurs différentes et que vous voulez éviter les collisions dans le nom de l'autorité, vous pouvez ajouter une option de type applicationIdSuffix
pour construire des types et utiliser les applicationId
dans votre manifeste, comme ceci :
<...
android:authorities="${applicationId}.contentprovider"/>
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. Supprimez les anciennes applications de votre appareil ( Settings --> Application --> <your application> --> Uninstall
) résoudra alors le problème.
Si vous utilisez Google Maps + Google Play Services 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 qui utilise la même bibliothèque est déjà installée sur votre appareil.
Fixe : Assurez-vous que defaultConfig.applicationId est défini dans la section Android de l'application. build.gradle
pour chaque projet utilisant votre bibliothèque
android {
defaultConfig.applicationId = "com.company.appname"
}
Je recommande d'utiliser le nom du paquet de l'application spécifique. Avec cette correction, les noms des fournisseurs ne seront plus en conflit et votre application fonctionnera comme prévu.
Symptômes
1.) Vos utilisateurs voient la redoutable erreur d'installation "-505" lorsqu'ils installent votre application depuis le Play Store.
2.) Ce message d'erreur s'affiche 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
La solution consiste à s'assurer que defaultConfig.applicationId est défini dans la section Android de l'interface utilisateur. build.gradle
pour chaque projet utilisant votre bibliothèque
android {
defaultConfig.applicationId = "com.company.appname"
}
Vous trouverez plus d'informations ici, dans le rapport de bogue original : Numéro 784 : Plusieurs applications utilisant le même nom de fournisseur d'autorité
Si vous utilisez le kit SDK Facebook, le problème peut se situer au niveau de la valeur "authorities" que vous fournissez pour le fournisseur Facebook.
REPLACE -
<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.
- Réponses précédentes
- Plus de réponses