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


164

我正在尝试使用Android SDK中的NotesList示例程序。我对该程序做了些许改动,但是当我安装编辑后的版本时,如果原始的Notes程序已经在设备上,则尝试在控制台中安装该消息时,我会不断收到消息INSTALL_FAILED_CONFLICTING_PROVIDER。我需要在提供程序中进行哪些更改以使其成为唯一数据库?如果我卸载原始的Notes程序,然后安装编辑后的版本,则效果很好。

Answers:


198

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

为避免冲突,授权机构名称应使用Java样式的命名约定(例如com.example.provider.cartoonprovider)。通常,实现提供程序的是ContentProvider子类的名称


5
@ CommonsWare我android:authoritiesAndroidManifest provider标签中使用了属性。我使用该项目作为我的android库项目,并使用该库项目开发了几个项目。install_failed_conflicting_provider如果使用公共库项目,如何解决该问题。
Jamal 2014年

1
@jamal:如果您正在使用Gradle for Android(例如从Android Studio使用),则清单合并选项将使您可以定制权限字符串。否则,<provider>从库清单中删除,并在应用程序级别使用唯一的授权字符串对其进行定义。
CommonsWare,2014年

4
@jamal:tools.android.com/tech-docs/new-build-system/user-guide/…-如果您还有其他问题,并且无法通过搜索找到答案,请提出新的Stack Overflow问题。
CommonsWare,2014年

11
如果您在具有相同提供程序名称的两个项目中使用库,则可能导致此错误
Mohammed Subhi Sheikh Quroush 2014年

1
我没有这样的东西一样android:authorities<provider>在我的库清单,并收到此错误。
lef

142

如果您使用不同的样式,并且希望避免在权限名称中发生冲突,则可以添加一个applicationIdSuffix来构建类型并applicationId在清单中使用结果,如下所示:

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

您可以applicationId在每个产品口味定义中定义自己的名称。developer.android.com/studio/build/...
何塞大号Ugia

我认为,如果您这样做,将可以修复不同的产品口味,因为applicationId无论如何您都必须为每种口味创建不同的口味。如果您具有不同的buildType,那么您也希望applicationId它们之间也有所不同,这就是该applicationIdSuffix属性的作用。
chubbsondubs

谢谢,在fileprovider中使用硬编码的android:authorities正是我的问题!
2016年

好答案!在添加它们并运行之前,请清除旧版本的应用程序。
Eren Utku '17

30

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

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

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

我建议使用特定应用程序的软件包名称。使用此修复程序,提供程序名称将不再冲突,并且您的应用程序将按预期运行。

病征

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

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

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

在原始错误报告中,可以在这里找到更多信息:问题784:使用相同授权提供者名称的多个应用


在将项目从Eclipse仅仅移动到Android Studio之后,我遇到了此错误,并且本文提示解决了该问题。谢谢
Philippe Girolami

@PhilippeGirolami肯定“简单”。从一个大型项目到Eclipse到Studio的完全过渡花了我们大约一个月的时间,而现在,我们需要4分钟以上的构建时间,而Eclipse中只有10到15秒。
DiscDev '16

@PhilippeGirolami android studio 2.0是专门为解决缓慢问题而构建的-它们位于beta5。但是,使用beta studio软件需要您自担风险,有时效果很好,有时会很恐怖,并且会破坏您的夜晚。
DiscDev '16

27

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


1
同样在这里。我正在使用genymotion虚拟设备,不得不删除以前安装的应用程序。
ibaralf 2015年

22

如果您使用的是Facebook SDK,则问题可能出在您为Facebook提供者提供的“授权”值中。

更换-

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

与->

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

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


赞成,我建议使用:android:authorities =“ $ {applicationId} .com.facebook.FacebookContentProvider”
justinkoh

15

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

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

在string.xml中,该值应与清单中声明的​​包名称相同。

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

这也是一个很好的解决方案,但是需要花费时间和空间才能为应用程序中的每个提供程序创建新的值字符串。
lukassos


7

基本上,当我尝试更改应用程序的程序包名称时,发生了这种情况。

因此,在模拟器中,之前安装了相同的应用程序。当我在更改软件包名称后尝试安装应用程序时,它说设备中的旧应用程序已使用了权限。

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

此外,授权机构名称应始终为:your.package.name.UNIQUENAME;

例如:

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

我在提供程序中添加了“ tools:replace =“ android:authorities””。
克里斯汀

7

当我在多个应用程序中使用一个库时,我遇到了类似的问题。只需使用下面的确切提供程序声明更新您的AndroidManifest.xml。

<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

我尝试了许多解决方案,但找不到解决方案...但是此链接对我有帮助...我想提供有关问题的详细信息...

我正在运行仪器化测试用例,因此我的应用程序在启动器中不可见...但是已安装并因此使用Same Content Provider。因此,我应该以某种方式将其卸载。所以Settings -> Application Manager -> All Downloaded Apps -> uninstall all apps from your current development package

现在,尝试运行...这将起作用...


6

我以为可以通过将其图标拖动到“卸载”来卸载应用程序来解决问题,但是并不能解决问题。

解决问题的方法如下:

  1. 前往设置
  2. 选择应用
  3. 找到您的应用程序(是的,我很惊讶仍然在这里找到它!),然后按它
  4. 按右上角的3个点
  5. 选择“ 为所有用户卸载

再试一次,现在应该可以了。


5

如果您在应用程序内部使用Facebook,请检查AndroidManifest文件中的提供者标签,并检查您的应用程序是否project Id正确android:authorities

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

4

遇到了这个问题。

解决方法

1-打开AndroidManifest.xml

2-ctrl + f查找“提供程序”

3-查找提供商,并在此处更新您的根目录名称。

运行项目。希望问题将得到解决!


2

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


1

如果您使用Xamarin并收到此错误(可能是由于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 [...]

如前所述在这里,你需要更新Xamarin.Build.Download:

  1. 将Xamarin.Build.Download Nuget软件包更新为0.4.12-preview3
    • 在Mac上,您可能需要选中“ 添加软件包”窗口中的“ 显示预发行版软件包
  2. 关闭Visual Studio
  3. 删除NuGet软件包的所有缓存位置:
    • 在Windows上,打开Visual Studio,但不打开解决方案:
      • 工具->选项-> Nuget软件包管理器->常规->清除所有Nuget缓存
    • 在Mac上,擦除以下文件夹:
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages 解决方案中的文件夹
  4. 删除解决方案中的bin / obj文件夹
  5. 加载解决方案
  6. 恢复解决方案的Nuget程序包(应自动运行)
  7. 重建

0

在我的android设备上,我安装了相同的应用程序,但口味不同。这给我错误安装失败的冲突提供程序。所以我卸载了同一应用程序的所有版本。并尝试

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

它解决了我的问题。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.