A instalação mostra um erro no console: INSTALL FAILED CONFLICTING FORVIDER

164

Estou experimentando o programa de exemplo NotesList no Android SDK. Fiz uma pequena variação no programa, mas quando instalo minha versão editada, recebo a mensagem INSTALL_FAILED_CONFLICTING_PROVIDER no console quando tento instalá-lo quando o programa de anotações original já está no dispositivo. O que preciso alterar no Provedor para torná-lo um banco de dados exclusivo? Funciona bem se eu desinstalar o programa de notas original e instalar minha versão editada.

johnsonjp34
fonte

Respostas:

198

A autoridade, conforme listado em, android:authoritiesdeve ser exclusiva. Citando a documentação para este atributo :

Para evitar conflitos, os nomes de autoridade devem usar uma convenção de nomenclatura no estilo Java (como com.example.provider.cartoonprovider). Normalmente, é o nome da subclasse ContentProvider que implementa o provedor

CommonsWare
fonte
5
@ CommonsWare Eu usei android:authoritiesatributo na minha AndroidManifest providertag. Eu usei esse projeto como meu projeto de biblioteca do Android usando este projeto de biblioteca. Desenvolvi alguns projetos. como resolver o install_failed_conflicting_providerproblema se usamos o projeto de biblioteca comum.
Jamal
1
@jamal: se você estiver usando o Gradle para Android, como no Android Studio, as opções de mesclagem de manifesto permitirão que você adapte a cadeia de autoridade. Caso contrário, remova o <provider>manifesto da biblioteca e defina-o no nível do aplicativo com uma cadeia de autoridade exclusiva.
CommonsWare
4
@jamal: tools.android.com/tech-docs/new-build-system/user-guide/… - se você tiver mais perguntas e não conseguir encontrar respostas através de uma pesquisa, faça uma nova pergunta sobre estouro de pilha.
CommonsWare
11
se você usar a biblioteca em dois projetos com o mesmo nome de provedor, isso poderá causar esse erro
Mohammed Subhi Sheikh Quroush
1
Não tenho nada parecido com isso android:authoritiesou <provider>no manifesto da minha biblioteca e com esse erro.
lef 07/07
143

Se você tem diferentes tipos e deseja evitar colisões no nome da autoridade, pode adicionar um applicationIdSuffixpara criar tipos e usar o resultado applicationIdno seu manifesto, assim:

<...
 android:authorities="${applicationId}.contentprovider"/>
Jose L Ugia
fonte
Você pode definir por conta própria applicationIdem cada definição de sabor do produto. developer.android.com/studio/build/…
Jose L Ugia
Eu acho que se você fizer isso, ele corrigirá os diferentes sabores do produto, pois você precisará criar diferentes applicationIdpara cada sabor. Se você teve diferentes buildTypes, também deseja applicationIddiferenciar entre eles, e é isso que a applicationIdSuffixpropriedade fará.
chubbsondubs
Obrigado, usando um andróide codificado: as autoridades do provedor de arquivos são exatamente o meu problema!
Bruce Bruce
Ótima resposta! Antes de adicionar e executar, limpe a versão antiga dos seus aplicativos.
Eren Utku
30

Se você estiver usando o Google Maps + Google Play Services dentro de um projeto de biblioteca (especialmente se você migrou recentemente do Eclipse para o Android Studio), poderá encontrar esse erro ao tentar executar um aplicativo que usa sua biblioteca, enquanto outro aplicativo que usa a mesma biblioteca já está instalada no seu dispositivo.

Correção: verifique se defaultConfig.applicationId está definido na seção android do build.gradlearquivo para cada projeto usando sua biblioteca

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

Eu recomendaria usar o nome do pacote do aplicativo específico. Com essa correção, os nomes dos provedores não entrarão mais em conflito e o aplicativo será executado conforme o esperado.

Sintomas

1.) Seus usuários estão vendo o temido erro de instalação "-505" ao instalar seu aplicativo na Play Store.

2.) Você verá esta mensagem de erro ao tentar instalar um segundo aplicativo que usa sua biblioteca via Android Studio [INSTALL_FAILED_CONFLICTING_PROVIDER]:

Fornecedor em conflito

No seu console, você verá uma mensagem como esta:

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

A correção é garantir que defaultConfig.applicationId esteja definido na seção android do build.gradlearquivo para cada projeto usando sua biblioteca

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

Mais leitura pode ser encontrada aqui no relatório de erro original: Problema 784: Vários aplicativos usando o mesmo nome de provedor de autoridade

DiscDev
fonte
Encontrei esse erro depois de "simplesmente" mover meus projetos do Eclipse para o Android Studio e essa dica resolveu o problema. Obrigado
Philippe Girolami
@PhilippeGirolami "simplesmente" com certeza. Demoramos cerca de um mês para fazer a transição completa de um projeto muito grande do Eclipse para o Studio, e agora somos penalizados com mais de 4 minutos de tempo de compilação, em comparação com 10 a 15 segundos no Eclipse.
DiscDev 29/02
@PhilippeGirolami O android studio 2.0 está sendo construído especificamente para lidar com a lentidão - eles estão na beta 5. No entanto, use o software beta studio por seu próprio risco, às vezes funciona muito bem, às vezes é horrível e arruinará sua noite.
DiscDev
27

Isso também pode acontecer quando você tem uma versão mais antiga do seu aplicativo instalada e faz alterações na biblioteca (suporte) ou no arquivo de manifesto. A exclusão dos aplicativos antigos do seu dispositivo ( Settings --> Application --> <your application> --> Uninstall) resolverá o problema.

nburk
fonte
1
O mesmo aqui. Eu estava usando dispositivos virtuais genymotion e tive que remover o aplicativo instalado anteriormente.
ibaralf
22

Se você estiver usando o SDK do Facebook, o problema poderá estar no valor "autoridades" que você fornece ao provedor do Facebook.

SUBSTITUIR -

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

COM ->

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

Pode ser necessário alterar defaultConfig.ApplicationIdtambém, conforme sugerido em outras respostas.

Ankit Aggarwal
fonte
com o voto positivo, sugiro usar isso: android: autoridades = "$ {applicationId} .com.facebook.FacebookContentProvider"
justinkoh 15/08/19
15

O mesmo erro pode ocorrer após renomear pacotes. Verifique o valor em string.xml para android:authoritiesAndroidManifest.xml.

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

Em string.xml, o valor deve ser o mesmo que o nome do seu pacote, declarado no manifesto.

<string name="content_authority">com.whatever.android.sunshine.app</string>
tesoureiro
fonte
Essa também é uma boa solução, mas leva tempo + espaço para criar uma nova sequência de valores para cada provedor no aplicativo.
Lukassos
8

O nome da Autoridade + Provedor que você declarou no manifesto provavelmente

Benoit
fonte
7

Basicamente, isso aconteceu comigo, quando tentei alterar o nome do pacote do aplicativo.

Portanto, no emulador, o mesmo aplicativo foi instalado antes. Quando tentei instalar o aplicativo depois de alterar o nome do pacote, ele dizia, autoridade já usada pelo aplicativo mais antigo no dispositivo.

Simplesmente depois de desinstalar o aplicativo, ele resolveu o meu problema.

Além disso, o nome da autoridade deve sempre ser your.package.name.UNIQUENAME:;

exemplo:

  <provider
        android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
        android:authorities="your.package.name.AviaryCdsProvider"
       />
Ajay P. Prajapati
fonte
Eu adicionei 'tools: replace = "android: autoridades"' ao provedor.
Christine
7

Eu tive um problema semelhante quando usei uma biblioteca em vários aplicativos. Foi necessário apenas atualizar o seu AndroidManifest.xml com esta declaração exata do provedor abaixo.

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

Eu tentei muitas soluções, mas não consegui encontrar a solução ... mas esse link me ajudou ... Quero dar detalhes sobre o problema ...

Eu estava executando casos de teste instrumentados para que meu aplicativo não estivesse visível no iniciador ... mas foi instalado e, portanto, usando o mesmo provedor de conteúdo . Então, devo desinstalá-lo de alguma forma. assimSettings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package

Agora, tente executar ... Isso funcionará ...

Kushal
fonte
6

Eu pensei que desinstalar o aplicativo arrastando seu ícone para "Desinstalar" resolveria o problema, mas isso não aconteceu.

Aqui está o que resolveu o problema:

  1. Vá para as configurações
  2. Escolha aplicativos
  3. Encontre seu aplicativo (sim, fiquei surpreso ao encontrá-lo aqui!) E pressione-o
  4. No canto superior direito, pressione os 3 pontos
  5. Selecione " Desinstalar para todos os usuários "

Tente novamente, ele deve funcionar agora.

Nicolas Raoul
fonte
5

Se você estiver usando o aplicativo interno do Facebook, verifique a etiqueta do provedor dentro do AndroidManifestarquivo e verifique se project Idestá correto paraandroid:authorities

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

Foi encontrado este problema.

Resolvido por:

1 - abra AndroidManifest.xml

2 - ctrl + f encontra "provedor"

3 - encontre o provedor e atualize o nome do diretório raiz lá.

executar projeto. espero que o problema seja corrigido!

Ali Nawaz
fonte
2

instalar usando adb com comando ./adb install -r abc.apkresolverá o problema (ele será substituído mesmo quando o dispositivo tiver uma versão superior do aplicativo)

Quang Vĩnh Hà
fonte
1

Se você estiver no Xamarin e receber esse erro (provavelmente por causa do 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 mencionado aqui , você precisa atualizar o Xamarin.Build.

  1. Atualize o pacote Nuget do Xamarin.Build.Download para 0.4.12-preview3
    • No Mac, pode ser necessário marcar Mostrar pacotes de pré-lançamento na janela Adicionar pacotes
  2. Feche o Visual Studio
  3. Exclua todos os locais em cache dos pacotes NuGet:
    • No Windows, abra o Visual Studio, mas não a solução:
      • Ferramentas -> Opção -> Gerenciador de Pacotes Nuget -> Geral -> Limpar todos os cache (s) do Nuget
    • No Mac, limpe as seguintes pastas:
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages pasta em solução
  4. Excluir pastas bin / obj na solução
  5. Carregar a solução
  6. Restaurar pacotes Nuget para a solução (deve ser executado automaticamente)
  7. Reconstruir
gianlucaparadise
fonte
0

No meu dispositivo Android, eu tinha sabores diferentes da mesma instalação do aplicativo . Isso me dá um erro de INSTALAR O PROVEDOR DE CONFLITO COM FALHA . então eu desinstalo todos os meus sabores do mesmo aplicativo. e tentei

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

Isso resolveu meu problema.

Vrushali Raut
fonte
0

Você pode desinstalar o nome do pacote "com.example" do dispositivo em que você executa o aplicativo depois do aplicativo. Isso funcionou para mim

MEGHA DOBARIYA
fonte