L'installazione mostra l'errore nella console: INSTALL FAILED CONFLICTING PROVIDER


165

Sto sperimentando il programma di esempio NotesList nell'SDK di Android. Ho fatto una leggera variazione nel programma, ma quando installo la mia versione modificata continuo a ricevere il messaggio INSTALL_FAILED_CONFLICTING_PROVIDER nella console quando provo a installarlo quando il programma di note originale è già sul dispositivo. Cosa devo modificare nel provider per renderlo un database univoco? Funziona bene se disinstallo il programma di note originale e quindi installo la mia versione modificata.

Risposte:


198

L'autorità, come elencato in, android:authoritiesdeve essere unica. Citando la documentazione per questo attributo :

Per evitare conflitti, i nomi delle autorità dovrebbero usare una convenzione di denominazione in stile Java (come com.example.provider.cartoonprovider). In genere, è il nome della sottoclasse ContentProvider che implementa il provider


5
@ CommonsWare Ho usato l' android:authoritiesattributo nel mio AndroidManifest providertag. Ho usato quel progetto come mio progetto di libreria Android usando questo progetto di libreria Ho sviluppato alcuni progetti. come risolvere il install_failed_conflicting_providerproblema se abbiamo utilizzato un progetto di libreria comune.
Jamal,

1
@jamal: se stai usando Gradle per Android, come da Android Studio, le opzioni di unione manifest ti permetteranno di personalizzare la stringa di autorità. In caso contrario, rimuovere il <provider>manifest dal file manifest della libreria e definirlo a livello di applicazione con una stringa di autorità univoca.
CommonsWare,

4
@jamal: tools.android.com/tech-docs/new-build-system/user-guide/… - se hai ulteriori domande e non riesci a trovare le risposte tramite una ricerca, fai una nuova domanda Stack Overflow.
CommonsWare,

11
se usi la libreria in due progetti con lo stesso nome fornitore, questo potrebbe causare questo errore
Mohammed Subhi Sheikh Quroush,

1
Non ho nulla di simile android:authoritieso <provider>nella mia libreria manifest e ottenere questo errore.
lef

143

Se hai gusti diversi e vuoi evitare collisioni nel nome dell'autorità, puoi aggiungerne uno applicationIdSuffixper creare tipi e utilizzare il risultante applicationIdnel tuo manifest, in questo modo:

<...
 android:authorities="${applicationId}.contentprovider"/>

Puoi definire il tuo applicationIdsu ogni definizione di sapore del prodotto. developer.android.com/studio/build/…
Jose L Ugia,

Penso che se lo farai risolverà i diversi gusti del prodotto in quanto devi creare comunque diversi applicationIdper ogni sapore. Se hai buildTypes diversi, vuoi applicationIddifferenziare anche quelli, ed è quello che applicationIdSuffixfarà la proprietà.
Chubbsondubs,

Grazie, usare un Android hardcoded: le autorità in fileprovider sono esattamente il mio problema!
Bruce,

Bella risposta! Prima di aggiungere questi ed eseguire, pulire la vecchia versione delle applicazioni.
Eren Utku,

30

Se stai utilizzando Google Maps + Google Play Services all'interno di un progetto di libreria (specialmente se hai recentemente migrato da Eclipse ad Android Studio), puoi riscontrare questo errore quando tenti di eseguire un'app che utilizza la tua libreria, mentre un'altra app che utilizza la stessa libreria è già installata sul tuo dispositivo.

Correzione: assicurati che defaultConfig.applicationId sia definito nella sezione android del build.gradlefile per ogni progetto usando la tua libreria

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

Consiglierei di usare il nome del pacchetto dell'app specifica. Con questa correzione, i nomi dei provider non saranno più in conflitto e l'app verrà eseguita come previsto.

Sintomi

1.) I tuoi utenti vedono il temuto errore di installazione "-505" durante l'installazione dell'app dal Play Store.

2.) Verrà visualizzato questo messaggio di errore quando si tenta di installare una seconda app che utilizza la libreria tramite Android Studio [INSTALL_FAILED_CONFLICTING_PROVIDER]:

Provider in conflitto

Nella tua console, vedrai un messaggio come questo:

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 correzione è assicurarsi che defaultConfig.applicationId sia definito nella sezione android del build.gradlefile per ogni progetto usando la tua libreria

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

Altre letture sono disponibili qui nella segnalazione di bug originale: Problema 784: app multiple che utilizzano lo stesso nome del provider di autorità


Ho riscontrato questo errore dopo aver "semplicemente" spostato i miei progetti da Eclipse ad Android Studio e questo suggerimento ha risolto il problema. Grazie
Philippe Girolami,

@PhilippeGirolami "semplicemente" di sicuro. Ci è voluto circa un mese per passare completamente da un progetto molto ampio da Eclipse a Studio, e ora siamo penalizzati con un tempo di costruzione di oltre 4 minuti, rispetto ai 10-15 secondi di Eclipse.
DiscDev

@PhilippeGirolami android studio 2.0 è stato creato appositamente per affrontare la lentezza: sono su beta 5. Tuttavia, usa il software beta studio a tuo rischio, a volte funziona benissimo, a volte è orribile e ti rovinerà la notte.
DiscDev

27

Ciò può accadere anche quando è installata una versione precedente dell'app e sono state apportate modifiche alla libreria (supporto) o al file manifest. L'eliminazione delle vecchie applicazioni dal tuo dispositivo ( Settings --> Application --> <your application> --> Uninstall) risolverà quindi il problema.


1
Anch'io. Stavo usando i dispositivi virtuali di genymotion e dovevo rimuovere l'applicazione precedentemente installata.
ibaralf,

23

Se si utilizza Facebook SDK, il problema potrebbe riguardare il valore "autorità" fornito al provider di Facebook.

SOSTITUIRE -

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

CON ->

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

Potrebbe essere necessario modificare defaultConfig.ApplicationIdanche come suggerito in altre risposte.


votato, suggerisco di usare questo: android: authority = "$ {applicationId} .com.facebook.FacebookContentProvider"
justinkoh

15

Lo stesso errore può verificarsi dopo aver rinominato i pacchetti. Controllare il valore in string.xml per android:authoritiesda AndroidManifest.xml.

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

In string.xml il valore dovrebbe essere lo stesso del nome del pacchetto, dichiarato in manifest.

<string name="content_authority">com.whatever.android.sunshine.app</string>

Questa è anche una buona soluzione, ma richiede tempo + spazio per creare una nuova stringa di valori per ciascun provider nell'applicazione.
lukassos,

8

Il nome del provider + dell'autorità che hai probabilmente dichiarato nel manifest


7

Fondamentalmente questo è successo con me, quando ho provato a cambiare il nome del pacchetto dell'app.

Quindi, nell'emulatore, la stessa app era già stata installata. Quando ho provato a installare l'app dopo aver cambiato il nome del pacchetto, si diceva che l'autorizzazione era già utilizzata dall'applicazione precedente nel dispositivo.

Semplicemente dopo aver disinstallato l'applicazione, ho risolto il mio problema.

Inoltre, il nome Autorità dovrebbe sempre essere: your.package.name.UNIQUENAME;

esempio :

  <provider
        android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
        android:authorities="your.package.name.AviaryCdsProvider"
       />

Ho aggiunto 'strumenti: sostituisci = "android: autorizzazioni"' al provider.
Christine,

7

Ho avuto un problema simile quando ho usato una libreria in diverse applicazioni. È stato necessario semplicemente aggiornare AndroidManifest.xml con questa esatta dichiarazione del provider di seguito.

<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

Ho provato molte soluzioni ma non sono riuscito a trovare la soluzione ... ma questo link mi ha aiutato ... Voglio dare dettagli sul problema ...

Stavo eseguendo casi di test strumentati, quindi la mia app non era visibile nel programma di avvio ... ma era installata e quindi utilizzava lo stesso provider di contenuti . Quindi, dovrei disinstallarlo in qualche modo. CosìSettings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package

Ora, prova a eseguire ... Funzionerà ...


6

Ho pensato che disinstallare l'app trascinando l'icona su "Disinstalla" avrebbe risolto il problema, ma non è stato così.

Ecco cosa ha risolto il problema:

  1. Vai alle impostazioni
  2. Scegli le app
  3. Trova la tua app (sì, sono stato sorpreso di trovarla ancora qui!) E premila
  4. In alto a destra, premi i 3 punti
  5. Seleziona " Disinstalla per tutti gli utenti "

Riprova, dovrebbe funzionare ora.


5

Se stai usando Facebook all'interno dell'app, controlla il tag del provider all'interno del AndroidManifestfile e controlla che project Idsia correttoandroid:authorities

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

4

Si è verificato questo problema.

Risolto da:

1: apri AndroidManifest.xml

2 - ctrl + f trova "provider"

3 - trova il provider e aggiorna il nome della directory principale lì.

eseguire il progetto. speriamo che il problema sia risolto!


2

l'installazione usando adb con comando ./adb install -r abc.apkrisolverà il problema (sovrascriverà anche quando il dispositivo ha una versione dell'app superiore)


1

Se sei su Xamarin e ricevi questo errore (probabilmente a causa di 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 [...]

Come accennato qui , è necessario aggiornare Xamarin.Build.Download:

  1. Aggiorna il pacchetto Nuget Xamarin.Build.Download a 0.4.12-preview3
    • Su Mac, potrebbe essere necessario selezionare Mostra pacchetti pre-release nella finestra Aggiungi pacchetti
  2. Chiudi Visual Studio
  3. Elimina tutte le posizioni memorizzate nella cache dei pacchetti NuGet:
    • Su Windows, apri Visual Studio ma non la soluzione:
      • Strumenti -> Opzione -> Gestione pacchetti Nuget -> Generale -> Cancella tutte le cache Nuget
    • Su Mac, cancella le seguenti cartelle:
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages cartella in soluzione
  4. Elimina le cartelle bin / obj nella soluzione
  5. Carica la soluzione
  6. Ripristina pacchetti Nuget per la soluzione (dovrebbe essere eseguito automaticamente)
  7. Ricostruire

0

Nel mio dispositivo Android avevo diversi gusti della stessa installazione di app . Questo mi dà errore INSTALLARE FAILED CONFLICTING PROVIDER . quindi disinstallo tutte le mie versioni della stessa app. e provato

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

Ha risolto il mio problema.


0

È possibile disinstallare il nome del pacchetto "com.example" dal dispositivo in cui si esegue l'app dopo che si esegue l'app. Questo ha funzionato per me

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.