安装在控制台显示错误: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
将解决问题(即使设备具有更高的应用程序版本,它也会覆盖)