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.

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


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"/>

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


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.


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.


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>

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


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"
       />

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> 

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 ...


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.


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" />

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!


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).


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

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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.