Die Installation zeigt einen Fehler in der Konsole an: INSTALL FAILED CONFLICTING PROVIDER

164

Ich experimentiere mit dem NotesList-Beispielprogramm im Android SDK. Ich habe das Programm geringfügig geändert, aber wenn ich meine bearbeitete Version installiere, wird in der Konsole immer wieder die Meldung INSTALL_FAILED_CONFLICTING_PROVIDER angezeigt, wenn ich versuche, es zu installieren, wenn sich das ursprüngliche Notizenprogramm bereits auf dem Gerät befindet. Was muss ich im Provider ändern, um eine eindeutige Datenbank zu erstellen? Es funktioniert gut, wenn ich das ursprüngliche Notizenprogramm deinstalliere und dann meine bearbeitete Version installiere.

johnsonjp34
quelle

Antworten:

198

Die in aufgeführte Behörde android:authoritiesmuss eindeutig sein. Zitieren der Dokumentation für dieses Attribut :

Um Konflikte zu vermeiden, sollten Autoritätsnamen eine Namenskonvention im Java-Stil verwenden (z. B. com.example.provider.cartoonprovider). In der Regel ist es der Name der ContentProvider-Unterklasse, der den Anbieter implementiert

CommonsWare
quelle
5
@ CommonsWare Ich habe ein android:authoritiesAttribut in meinem AndroidManifest providerTag verwendet. Ich habe dieses Projekt als mein Android-Bibliotheksprojekt verwendet. Mit diesem Bibliotheksprojekt habe ich nur wenige Projekte entwickelt. wie man das install_failed_conflicting_providerProblem löst , wenn wir ein gemeinsames Bibliotheksprojekt verwenden.
Jamal
1
@jamal: Wenn Sie Gradle für Android verwenden, z. B. von Android Studio, können Sie mit den Optionen zum Zusammenführen von Manifesten die Berechtigungszeichenfolge anpassen. Entfernen Sie andernfalls <provider>das Manifest aus der Bibliothek und definieren Sie es auf Anwendungsebene mit einer eindeutigen Berechtigungszeichenfolge.
CommonsWare
4
@jamal: tools.android.com/tech-docs/new-build-system/user-guide/… - Wenn Sie weitere Fragen haben und über eine Suche keine Antworten finden können, stellen Sie bitte eine neue Frage zum Stapelüberlauf.
CommonsWare
11
Wenn Sie die Bibliothek in zwei Projekten mit demselben Anbieternamen verwenden, kann dies zu diesem Fehler führen
Mohammed Subhi Sheikh Quroush,
1
Ich habe kein solches android:authoritiesoder <provider>in meinem Bibliotheksmanifest und erhalte diesen Fehler.
Lef
142

Wenn Sie unterschiedliche applicationIdSuffixVarianten haben und Kollisionen im Berechtigungsnamen vermeiden möchten, können Sie eine hinzufügen , um Typen zu erstellen und die applicationIdin Ihrem Manifest resultierenden Ergebnisse wie folgt zu verwenden:

<...
 android:authorities="${applicationId}.contentprovider"/>
Jose L Ugia
quelle
Sie können Ihre eigenen applicationIdDefinitionen für jeden Produktgeschmack definieren. developer.android.com/studio/build/…
Jose L Ugia
Ich denke, wenn Sie dies tun, werden die unterschiedlichen Produktaromen behoben, da Sie applicationIdohnehin für jedes Aroma unterschiedliche erstellen müssen. Wenn Sie unterschiedliche buildTypes hatten, möchten Sie auch applicationIdzwischen diesen unterscheiden, und genau das wird die applicationIdSuffixEigenschaft tun.
Chubbsondubs
Vielen Dank, mit einem fest codierten Android: Behörden in Fileprovider ist genau mein Problem!
Bruce
Gute Antwort! Bereinigen Sie die alte Version Ihrer Anwendungen, bevor Sie diese hinzufügen und ausführen.
Eren Utku
30

Wenn Sie Google Maps + Google Play Services in einem Bibliotheksprojekt verwenden (insbesondere, wenn Sie kürzlich von Eclipse zu Android Studio migriert sind), kann dieser Fehler auftreten, wenn Sie versuchen, eine App auszuführen, die Ihre Bibliothek verwendet, während eine andere App verwendet wird Die gleiche Bibliothek ist bereits auf Ihrem Gerät installiert.

Fix: Stellen Sie sicher, dass defaultConfig.applicationId im Android-Abschnitt der build.gradleDatei für jedes Projekt definiert ist, das Ihre Bibliothek verwendet

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

Ich würde empfehlen, den Paketnamen der jeweiligen App zu verwenden. Mit diesem Fix werden die Anbieternamen nicht mehr in Konflikt geraten und Ihre App wird wie erwartet ausgeführt.

Symptome

1.) Ihre Benutzer sehen den gefürchteten "-505" -Installationsfehler, wenn Sie Ihre App aus dem Play Store installieren.

2.) Diese Fehlermeldung wird angezeigt, wenn Sie versuchen, eine zweite App zu installieren, die Ihre Bibliothek über Android Studio [INSTALL_FAILED_CONFLICTING_PROVIDER] verwendet:

Konfliktanbieter

In Ihrer Konsole wird folgende Meldung angezeigt:

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

Das Update besteht darin, sicherzustellen, dass defaultConfig.applicationId im Android-Abschnitt der build.gradleDatei für jedes Projekt definiert ist, das Ihre Bibliothek verwendet

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

Weitere Informationen finden Sie hier im Original-Fehlerbericht: Problem 784: Mehrere Apps verwenden denselben Autoritätsanbieternamen

DiscDev
quelle
Ich habe diesen Fehler festgestellt, nachdem ich meine Projekte "einfach" von Eclipse nach Android Studio verschoben habe, und dieser Tipp hat das Problem behoben. Vielen Dank
Philippe Girolami
@PhilippeGirolami "einfach" sicher. Wir haben ungefähr einen Monat gebraucht, um ein sehr großes Projekt vollständig von Eclipse auf Studio umzustellen, und jetzt werden wir mit einer Erstellungszeit von mehr als 4 Minuten bestraft, verglichen mit 10-15 Sekunden in Eclipse.
DiscDev
@PhilippeGirolami android studio 2.0 wurde speziell entwickelt, um die Langsamkeit zu beheben - sie befinden sich in der Beta 5. Verwenden Sie die Beta Studio-Software jedoch auf eigenes Risiko. Manchmal funktioniert sie großartig, manchmal ist sie schrecklich und ruiniert Ihre Nacht.
DiscDev
27

Dies kann auch passieren, wenn Sie eine ältere Version Ihrer App installiert und Änderungen an der (Support-) Bibliothek oder der Manifestdatei vorgenommen haben. Durch Löschen der alten Anwendungen von Ihrem Gerät ( Settings --> Application --> <your application> --> Uninstall) wird das Problem dann behoben.

nburk
quelle
1
Hier gilt das gleiche. Ich habe virtuelle Genymotion-Geräte verwendet und musste die zuvor installierte Anwendung entfernen.
Ibaralf
21

Wenn Sie das Facebook SDK verwenden, liegt das Problem möglicherweise in dem Wert "Behörden", den Sie für den Facebook-Anbieter angeben.

ERSETZEN -

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

MIT ->

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

Möglicherweise müssen Sie das defaultConfig.ApplicationIdauch ändern, wie in anderen Antworten vorgeschlagen.

Ankit Aggarwal
quelle
upvoted, schlage ich vor, dies zu verwenden: android: behörden = "$ {applicationId} .com.facebook.FacebookContentProvider"
justinkoh
15

Der gleiche Fehler kann nach dem Umbenennen von Paketen auftreten. Überprüfen Sie den Wert in string.xml für android:authoritiesaus AndroidManifest.xml.

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

In string.xml sollte der Wert mit Ihrem im Manifest deklarierten Paketnamen übereinstimmen.

<string name="content_authority">com.whatever.android.sunshine.app</string>
Burseaner
quelle
Dies ist ebenfalls eine gute Lösung, benötigt jedoch Zeit und Platz, um für jeden Anbieter in der Anwendung eine neue Zeichenfolge in den Werten zu erstellen.
Lukassos
8

Der Name der Behörde + des Anbieters, den Sie wahrscheinlich im Manifest angegeben haben

Benoit
quelle
7

Grundsätzlich geschah dies bei mir, als ich versuchte, den Paketnamen der App zu ändern.

Im Emulator wurde dieselbe App bereits installiert. Als ich versuchte, die App zu installieren, nachdem ich den Paketnamen geändert hatte, hieß es, die Berechtigung wurde bereits von einer älteren Anwendung im Gerät verwendet.

Einfach nach der Deinstallation der Anwendung löste es mein Problem.

Außerdem sollte der Name der Behörde immer lauten : your.package.name.UNIQUENAME;

Beispiel:

  <provider
        android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
        android:authorities="your.package.name.AviaryCdsProvider"
       />
Ajay P. Prajapati
quelle
Ich habe dem Anbieter 'tools: replace = "android: Behörden"' hinzugefügt.
Christine
7

Ich hatte ein ähnliches Problem, als ich eine Bibliothek in mehreren Anwendungen verwendete. Es war notwendig, einfach Ihre AndroidManifest.xml mit genau dieser Anbietererklärung unten zu aktualisieren.

<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
quelle
6

Ich habe viele Lösungen ausprobiert, konnte aber keine Lösung finden ... aber dieser Link hat mir geholfen ... Ich möchte Details zum Problem angeben ...

Ich habe instrumentierte Testfälle ausgeführt, sodass meine App im Launcher nicht sichtbar war ... aber sie wurde installiert und verwendet daher denselben Inhaltsanbieter . Also sollte ich es irgendwie deinstallieren. SoSettings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package

Versuchen Sie jetzt zu rennen ... Das wird funktionieren ...

Kushal
quelle
6

Ich dachte, die Deinstallation der App durch Ziehen des Symbols auf "Deinstallieren" würde das Problem lösen, tat es aber nicht.

Folgendes hat das Problem gelöst:

  1. Gehe zu den Einstellungen
  2. Wählen Sie Apps
  3. Finden Sie Ihre App (ja, ich war überrascht, sie immer noch hier zu finden!) Und drücken Sie sie
  4. Drücken Sie oben rechts auf die 3 Punkte
  5. Wählen Sie " Für alle Benutzer deinstallieren ".

Versuchen Sie es erneut, es sollte jetzt funktionieren.

Nicolas Raoul
quelle
5

Wenn Sie Facebook in der App verwenden, suchen Sie nach dem Provider-Tag in der AndroidManifestDatei und überprüfen Sie, ob Ihre project Idkorrekt istandroid:authorities

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

Ist auf dieses Problem gestoßen.

Gelöst durch:

1 - Öffnen Sie AndroidManifest.xml

2 - Strg + F "Anbieter" finden

3 - Suchen Sie den Anbieter und aktualisieren Sie dort Ihren Stammverzeichnisnamen.

Projekt ausführen. hoffentlich wird das Problem behoben!

Ali Nawaz
quelle
2

Die Installation mit dem Befehl adb mit dem Befehl ./adb install -r abc.apklöst das Problem (es wird überschrieben, selbst wenn das Gerät eine höhere App-Version hat).

Quang Vĩnh Hà
quelle
1

Wenn Sie auf Xamarin sind und diesen Fehler erhalten (wahrscheinlich aufgrund von 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 [...]

Wie hier erwähnt , müssen Sie Xamarin.Build.Download aktualisieren:

  1. Aktualisieren Sie das Xamarin.Build.Download Nuget- Paket auf 0.4.12-Vorschau3
    • Unter Mac müssen Sie möglicherweise im Fenster Pakete hinzufügen die Option Vorabversionspakete anzeigen aktivieren
  2. Schließen Sie Visual Studio
  3. Löschen Sie alle zwischengespeicherten Speicherorte von NuGet-Paketen:
    • Öffnen Sie unter Windows Visual Studio, aber nicht die Lösung:
      • Extras -> Option -> Nuget Package Manager -> Allgemein -> Alle Nuget-Caches löschen
    • Löschen Sie auf dem Mac die folgenden Ordner:
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages Ordner in Lösung
  4. Löschen Sie die Ordner bin / obj in der Lösung
  5. Laden Sie die Lösung
  6. Wiederherstellen von Nuget-Paketen für die Lösung (sollte automatisch ausgeführt werden)
  7. Wiederaufbauen
Gianlucaparadise
quelle
0

Auf meinem Android-Gerät hatte ich verschiedene Varianten der gleichen App installiert. Dies gibt mir den Fehler INSTALL FAILED CONFLICTING PROVIDER . Also deinstalliere ich alle Varianten derselben App. und versucht

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

Es hat mein Problem gelöst.

Vrushali Raut
quelle
0

Sie können den Paketnamen "com.example" von dem Gerät deinstallieren, auf dem Sie die App ausführen, nachdem Sie die App ausgeführt haben. Das hat bei mir funktioniert

MEGHA DOBARIYA
quelle