webentwicklung-frage-antwort-db.com.de

INSTALL_FAILED_CONFLICTING_PROVIDER in Android

Ich verwende einen Open-Source-Code von Google für eine App namens MyTracks.

Ich erhalte diese Fehlermeldung, wenn die Original-App auf dem Telefon installiert ist.

INSTALL_FAILED_CONFLICTING_PROVIDER

Ich weiß, dass dies auf den Android:authorities im Manifest zurückzuführen ist.

hier ist der Teil des Manifests:

<provider
Android:name="com.google.Android.apps.mytracks.content.MyTracksProvider"
Android:authorities="com.google.Android.maps.mytracks"
Android:exported="true"
Android:readPermission="com.google.Android.apps.mytracks.READ_TRACK_DATA"
Android:writePermission="com.google.Android.apps.mytracks.WRITE_TRACK_DATA" />
<!-- Search suggestion provider -->
<provider
Android:name="com.google.Android.apps.mytracks.content.SearchEngineProvider"
Android:authorities="com.google.Android.maps.mytracks.search"
Android:exported="false" />

Meine Frage ist also: Ich möchte wissen, ob dieser Ansatz das Problem lösen kann oder nicht, weil ich Angst habe, alle Paketnamen zu ändern, und dann die gesamte App defekt ist.

  1. Der Android :authorities-Wert ist der Paketname. Der Android:name ist der Name der Klasse dieses Providers . Bin ich richtig?

Wenn ich den Paketnamen in einen anderen Namen als com.google etx ändere und alle Referenzen/Importe dieses Pakets umbenenne, sollte das Problem dann behoben werden?

15
ghostrider

Der Android-Wert für die Behörden ist der Paketname.

In diesem Fall ist es , dass der Paketname ist. Es muss einfach einzigartig sein.

Der Name Android: ist der Name der Klasse dieses Anbieters

Richtig.

Wenn ich den Paketnamen in einen anderen Namen als com.google etx ändere und alle Referenzen/Importe dieses Pakets umbenenne, sollte das Problem dann behoben werden?

Der Paketname hat nichts damit zu tun. Möglicherweise müssen Sie dies jedoch auch ändern, damit Ihre App neben der normalen, nicht modifizierten App installiert werden kann.

Sie müssen einen eindeutigen Wert für Android:authorities haben, und der Code in Ihrer App, der diese ContentProvider verwendet, muss eine geeignete Uri (content://whatever.you.change.the.authority.to/...) verwenden.

29
CommonsWare

Wenn Sie Google Maps + Google Play-Dienste in einem Bibliotheksprojekt verwenden, kann dieser Fehler auftreten, wenn Sie versuchen, eine App auszuführen, die Ihre Bibliothek verwendet, während auf Ihrem Gerät bereits eine andere App installiert ist, die dieselbe Bibliothek verwendet.

Fix: Vergewissern Sie sich, dass defaultConfig.applicationId im Android-Abschnitt der build.gradle-Datei 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 stehen die Providernamen nicht mehr in Konflikt, und Ihre App wird wie erwartet ausgeführt.

Symptome

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

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

 enter image description here

In Ihrer Konsole sehen Sie eine Nachricht wie diese:

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

Der Fix ist, um sicherzustellen, dass defaultConfig.applicationId im Android-Abschnitt der build.gradle-Datei für jedes Projekt definiert ist, das Ihre Bibliothek verwendet.

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

Weitere Informationen finden Sie hier im ursprünglichen Fehlerbericht: Problem 784: Mehrere Apps, die denselben Autorisierungsanbieter verwenden

5
DiscDev

deinstallieren Sie einfach die helloFacebooksample-App von Ihrem Gerät

5
Sourabh

wenn Sie beispielsweise Facebook-SDK verwenden, müssen Sie für jede App eine eindeutige Zeile in Manifest verwenden 

<provider Android:authorities="com.facebook.app.FacebookContentProviderxxxxxxxxxx"
            Android:name="com.facebook.FacebookContentProvider"
            Android:exported="true"/>

xxxxxxxxxx - sollte für jede App eindeutig sein, für facebook-sdk ist dies Ihre facebook_id-Nummer

4
NickUnuchek

Ich habe dieselbe Fehlermeldung erhalten, als ich den Paketnamen im Manifest der App geändert habe. Dies verursacht einen Konflikt, wenn Sie versuchen, die App erneut zu installieren (mit dem neuen Paketnamen). Die Lösung besteht darin, die alte Version der App zu entfernen (die den alten Paketnamen verwendet). Anschließend können Sie die neue Version installieren.

2

Der Schulabschluss muss dies auch enthalten 

defaultConfig {
  applicationId "com.example.app"
}

Ich hatte es komplett ausgelassen 

1
Krupa

CommonsWare hat das Recht, es gibt jedoch mehr Details, die helfen können.

Für mich gab es zwei Schlüsselkomponenten der Lösung: Zuerst habe ich dem Manifest-Provider-Eintrag $ (applicationId) hinzugefügt:

        <provider
            tools:replace="Android:authorities"
            Android:name="Android.support.v4.content.FileProvider"
            Android:authorities="${applicationId}.files"
            Android:exported="false"
            Android:grantUriPermissions="true">
            <meta-data
                Android:name="Android.support.FILE_PROVIDER_PATHS"
                Android:resource="@xml/fileprovider" />
        </provider>

Zweitens: Wenn Sie Build Varients wechseln, und dies ist für mich zwischen 'debug' und 'release', müssen Sie auch das Projekt mit den Gradle-Dateien synchronisieren. Es war nicht genug, um das Projekt nur zu reinigen und neu aufzubauen.

In Android Studio gibt es zwei Registerkarten unten auf der Seite AndroidManifest.xml. Die Registerkarte "Text", die Sie zum Bearbeiten verwenden, und die Registerkarte "Zusammengeführtes Manifest" zeigt das resultierende Manifest nach dem Build. Für mich kann ich sehen, dass die applicationId ordnungsgemäß in den Abschnitt "Android: Behörden" des Anbieters eingefügt wurde.

0
MobileMateo