安装在控制台显示错误:INSTALL FAILED CONFLICTING PROVIDER

我正在试验Android SDK中的NotesList示例程序。 我已经在程序中做了一些细微的修改,但是当我安装我的编辑版本时,当我尝试在原始的Notes程序已经在设备上安装的时候,我在控制台中不断收到消息INSTALL_FAILED_CONFLICTING_PROVIDER。 在提供商中需要更改哪些内容才能使其成为唯一的数据库? 它工作正常,如果我卸载原始的笔记程序,然后安装我编辑的版本。

android:authorities列出的android:authorities必须是唯一的。 引用该属性的文档 :

为避免冲突,机构名称应使用Java风格的命名约定(如com.example.provider.cartoonprovider)。 通常,它是实现提供者的ContentProvider子类的名称

如果您有不同的风格,并且想要避免在机构名称中发生冲突,则可以添加applicationIdSuffix来构buildtypes,并在清单中使用生成的applicationId ,如下所示:

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

如果您在库项目中使用Google地图+ Google Play服务(特别是最近从Eclipse迁移到Android Studio时),则当您尝试运行使用库的应用程序时,可能会遇到此错误,而使用其他应用程序您的设备上已经安装了相同的库。

修复:确保defaultConfig.applicationId是在build.gradle文件的android部分为每个使用你的库的项目定义的

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

我会build议使用特定应用程序的包名称。 有了这个修复程序,提供程序名称将不再发生冲突,并且您的应用程序将按预期运行。

症状

1.)当您从Play商店安装您的应用程序时,您的用户会看到可怕的“-505”安装错误。

2.)当您尝试安装第二个使用您的库通过Android Studio [INSTALL_FAILED_CONFLICTING_PROVIDER]的应用程序时,您将看到此错误消息:

冲突的提供者

在你的控制台,你会看到这样的消息:

 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 

解决的办法是确保defaultConfig.applicationId在build.gradle文件的android部分为每个使用你的库的项目定义

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

更多的阅读可以在这里find原始的错误报告: 问题784:多个应用程序使用相同的权威提供者名称

当您安装了较早版本的应用程序并对(支持)库或清单文件进行了更改时,也会发生这种情况。 从设备上删除旧的应用程序( Settings --> Application --> <your application> --> Uninstall )将解决这个问题。

重命名包后可能会发生同样的错误。 从AndroidManifest.xml中检查android.xml android:authorities string.xml中的值。

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

在string.xml中,该值应该与在manifest中声明的包名相同。

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

如果您使用Facebook SDK,那么问题可能在于您为Facebook提供商提供的“权限”值。

replace –

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

WITH – >

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

您可能还需要按照其他答案中的build议更改defaultConfig.ApplicationId

您可能已经在清单中声明了Authority + Provider名称

基本上这发生在我身上,当我试图改变应用程序的包名称。

所以,在模拟器中,之前安装了相同的应用程序。 当我试图在更改软件包名称后安装应用程序时,它说,设备中较早应用程序已经使用的权限。

简单地卸载应用程序后,它解决了我的问题。

而且,Authority的名字应该总是: your.package.name.UNIQUENAME ;

例如:

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

如果你正在使用Facebook里面的应用程序检查提供商标签内AndroidManifest文件,并检查您的project Id是正确的android:authorities

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

我已经尝试了许多解决scheme,但找不到解决scheme…但是这个链接帮助了我…我想给出详细的问题…

我正在运行Instrumentedtesting用例,所以我的应用程序在启动器中不可见…但它已安装,因此使用相同的内容提供程序 。 所以,我应该以某种方式卸载它。 因此, Settings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package

现在,尝试运行…这将工作…

使用命令安装使用adb ./adb install -r abc.apk将解决问题(即使设备具有更高的应用程序版本,它也会覆盖)