La instalación muestra un error en la consola: INSTALAR PROVEEDOR DE CONFLICTOS FALLIDO

164

Estoy experimentando con el programa de ejemplo NotesList en el SDK de Android. He realizado una ligera variación en el programa, pero cuando instalo mi versión editada, sigo recibiendo el mensaje INSTALL_FAILED_CONFLICTING_PROVIDER en la consola cuando intento instalarlo cuando el programa de notas original ya está en el dispositivo. ¿Qué necesito cambiar en el proveedor para que sea una base de datos única? Funciona bien si desinstalo el programa de notas original y luego instalo mi versión editada.

johnsonjp34
fuente

Respuestas:

198

La autoridad, como se enumera en android:authoritiesdebe ser única. Citando la documentación para este atributo :

Para evitar conflictos, los nombres de autoridad deben usar una convención de nomenclatura de estilo Java (como com.example.provider.cartoonprovider). Por lo general, es el nombre de la subclase ContentProvider que implementa el proveedor

CommonsWare
fuente
55
@ CommonsWare He usado el android:authoritiesatributo en mi AndroidManifest provideretiqueta. He usado ese proyecto como mi proyecto de biblioteca de Android usando este proyecto de biblioteca. He desarrollado algunos proyectos. cómo resolver el install_failed_conflicting_providerproblema si usamos un proyecto de biblioteca común.
Jamal
1
@jamal: si está utilizando Gradle para Android, como Android Studio, las opciones de fusión de manifiesto le permitirán adaptar la cadena de autoridad. De lo contrario, elimine el <provider>archivo del manifiesto de la biblioteca y defínalo en el nivel de la aplicación con una cadena de autoridad única.
CommonsWare
44
@jamal: tools.android.com/tech-docs/new-build-system/user-guide/… - si tiene más preguntas y no puede encontrar respuestas a través de una búsqueda, haga una nueva pregunta de desbordamiento de pila.
CommonsWare
11
si usa la biblioteca en dos proyectos con el mismo nombre de proveedor, podría causar este error
Mohammed Subhi Sheikh Quroush el
1
No tengo tal cosa android:authoritieso <provider>en mi manifiesto de la biblioteca y obtengo este error.
izquierda
143

Si tiene diferentes sabores y desea evitar colisiones en el nombre de la autoridad, puede agregar un applicationIdSuffixtipo de compilación y usar el resultado applicationIden su manifiesto, de esta manera:

<...
 android:authorities="${applicationId}.contentprovider"/>
Jose L Ugia
fuente
Puede definir el suyo applicationIden cada definición de sabor de producto. developer.android.com/studio/build/…
Jose L Ugia
Creo que si haces esto, solucionará los diferentes sabores de los productos, ya que applicationIdde todos modos tendrás que crear diferentes para cada sabor. Si tenía diferentes BuildTypes, también desea applicationIddiferir entre ellos, y eso es lo que applicationIdSuffixhará la propiedad.
chubbsondubs
¡Gracias, usar un Android codificado: las autoridades en fileprovider es exactamente mi problema!
Bruce
¡Gran respuesta! Antes de agregarlos y ejecutarlos, limpie la versión anterior de sus aplicaciones.
Eren Utku
30

Si está utilizando Google Maps + Google Play Services dentro de un proyecto de biblioteca (especialmente si recientemente migró de Eclipse a Android Studio), puede encontrar este error cuando intenta ejecutar una aplicación que usa su biblioteca, mientras que una aplicación diferente que usa la misma biblioteca ya está instalada en su dispositivo.

Solución: asegúrese de que defaultConfig.applicationId esté definido en la sección de Android del build.gradlearchivo para cada proyecto que use su biblioteca

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

Recomendaría usar el nombre del paquete de la aplicación específica. Con esta solución, los nombres de los proveedores ya no entrarán en conflicto y su aplicación se ejecutará como se esperaba.

Síntomas

1.) Sus usuarios ven el temido error de instalación "-505" al instalar su aplicación desde Play Store.

2.) Verá este mensaje de error cuando intente instalar una segunda aplicación que use su biblioteca a través de Android Studio [INSTALL_FAILED_CONFLICTING_PROVIDER]:

Proveedor conflictivo

En su consola, verá un mensaje como este:

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 solución es asegurarse de que defaultConfig.applicationId esté definido en la sección de Android del build.gradlearchivo para cada proyecto que use su biblioteca

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

Puede encontrar más lecturas aquí en el informe de error original: Problema 784: varias aplicaciones que usan el mismo nombre de proveedor de autoridad

DiscDev
fuente
Encontré este error después de "simplemente" mover mis proyectos de Eclipse a Android Studio y este consejo resolvió el problema. Gracias
Philippe Girolami
@PhilippeGirolami "simplemente" seguro. Nos llevó cerca de un mes hacer la transición completa de un proyecto muy grande de Eclipse a Studio, y ahora estamos penalizados con un tiempo de construcción de más de 4 minutos, en comparación con 10-15 segundos en Eclipse.
DiscDev
@PhilippeGirolami android studio 2.0 se está construyendo específicamente para abordar la lentitud: están en beta 5. Sin embargo, use el software beta studio bajo su propio riesgo, a veces funciona muy bien, a veces es horrible y arruinará su noche.
DiscDev
27

Esto también puede suceder cuando tiene instalada una versión anterior de su aplicación y realiza cambios en la biblioteca (de soporte) o en el archivo de manifiesto. Eliminar las viejas aplicaciones de su dispositivo ( Settings --> Application --> <your application> --> Uninstall) resolverá el problema entonces.

nburk
fuente
1
Igual que aquí. Estaba usando dispositivos virtuales genymotion y tuve que eliminar la aplicación instalada anteriormente.
ibaralf
22

Si está utilizando el SDK de Facebook, entonces el problema podría estar en el valor de "autoridades" que proporciona al proveedor de Facebook.

REEMPLAZAR -

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

Es posible que deba cambiar el defaultConfig.ApplicationIdtambién como se sugiere en otras respuestas.

Ankit Aggarwal
fuente
votado, sugiero usar esto: android: autoridades = "$ {applicationId} .com.facebook.FacebookContentProvider"
justinkoh
15

El mismo error puede ocurrir después de cambiar el nombre de los paquetes. Verifique el valor en string.xml para android:authoritiesAndroidManifest.xml.

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

En string.xml, el valor debe ser el mismo que el nombre de su paquete, declarado en manifiesto.

<string name="content_authority">com.whatever.android.sunshine.app</string>
burseaner
fuente
Esta también es una buena solución, pero toma tiempo + espacio para crear una nueva cadena de valores para cada proveedor en la aplicación.
lukassos
8

El nombre de Autoridad + Proveedor que ha declarado en el manifiesto probablemente

Benoit
fuente
7

Básicamente esto sucedió conmigo, cuando intenté cambiar el nombre del paquete de la aplicación.

Entonces, en el emulador, la misma aplicación se instaló antes. Cuando traté de instalar la aplicación después de cambiar el nombre del paquete, dijo, la autoridad ya utilizada por una aplicación anterior en el dispositivo.

Simplemente después de desinstalar la aplicación, resolvió mi problema.

Además, el nombre de la Autoridad siempre debe ser your.package.name.UNIQUENAME:;

ejemplo:

  <provider
        android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
        android:authorities="your.package.name.AviaryCdsProvider"
       />
Ajay P. Prajapati
fuente
Agregué 'herramientas: reemplazar = "android: autoridades"' al proveedor.
Christine
7

Tuve un problema similar cuando utilicé una biblioteca en varias aplicaciones. Era necesario simplemente actualizar su AndroidManifest.xml con esta declaración exacta del proveedor a continuación.

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

He intentado muchas soluciones pero no pude encontrar la solución ... pero este enlace me ayudó ... Quiero dar detalles sobre el problema ...

Estaba ejecutando casos de prueba instrumentados, por lo que mi aplicación no estaba visible en el iniciador ... pero estaba instalada y, por lo tanto, usaba el mismo proveedor de contenido . Entonces, debería desinstalarlo de alguna manera. EntoncesSettings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package

Ahora, intenta correr ... Esto funcionará ...

Kushal
fuente
6

Pensé que desinstalar la aplicación arrastrando su icono a "Desinstalar" resolvería el problema, pero no fue así.

Esto es lo que resolvió el problema:

  1. Ir a la configuración
  2. Elige aplicaciones
  3. Encuentre su aplicación (sí, ¡me sorprendió encontrarla aquí!) Y presiónela
  4. En la esquina superior derecha, presiona los 3 puntos
  5. Seleccione " Desinstalar para todos los usuarios "

Inténtalo de nuevo, debería funcionar ahora.

Nicolas Raoul
fuente
5

Si está utilizando Facebook dentro de la aplicación, verifique la etiqueta del proveedor dentro del AndroidManifestarchivo y verifique que su project Idcorrecto seaandroid:authorities

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

Encontré este problema.

Resuelto por:

1 - abra AndroidManifest.xml

2 - ctrl + f buscar "proveedor"

3 - encuentre el proveedor y actualice su nombre de directorio raíz allí.

ejecutar proyecto. ¡Esperemos que el problema se solucione!

Ali Nawaz
fuente
2

instalar usando adb con comando ./adb install -r abc.apkresolverá el problema (se sobrescribirá incluso cuando el dispositivo tenga una versión de aplicación más alta)

Quang Vĩnh Hà
fuente
1

Si está en Xamarin y obtiene este error (probablemente debido a 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 [...]

Como se mencionó aquí , debe actualizar Xamarin.Build.Download:

  1. Actualice el paquete Xamarin.Build.Download Nuget a 0.4.12-preview3
    • En Mac, es posible que deba marcar Mostrar paquetes preliminares en la ventana Agregar paquetes
  2. Cerrar Visual Studio
  3. Eliminar todas las ubicaciones en caché de los paquetes NuGet:
    • En Windows, abra Visual Studio pero no la solución:
      • Herramientas -> Opción -> Administrador de paquetes Nuget -> General -> Borrar todos los caché Nuget
    • En Mac, limpie las siguientes carpetas:
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages carpeta en solución
  4. Eliminar carpetas bin / obj en solución
  5. Cargar la solución
  6. Restaurar paquetes Nuget para la solución (debe ejecutarse automáticamente)
  7. Reconstruir
gianlucaparadise
fuente
0

En mi dispositivo Android tuve diferentes sabores de la misma instalación de la aplicación . Esto me da error INSTALAR PROVEEDOR DE CONFLICTOS FALLIDO . así que desinstalo todos mis sabores de la misma aplicación. e intentado

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

Resolvió mi problema.

Vrushali Raut
fuente
0

Puede desinstalar el nombre del paquete "com.example" del dispositivo en el que ejecuta la aplicación después de ejecutar la aplicación. Esto funciono para mi

MEGHA DOBARIYA
fuente