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

joh*_*p34 141 android android-contentprovider

我正在试验Android SDK中的NotesList示例程序.我在程序中略有不同,但是当我安装编辑后的版本时,当我尝试安装原始备注程序已经在设备上时,我会在控制台中收到消息INSTALL_FAILED_CONFLICTING_PROVIDER.我需要在Provider中进行哪些更改才能使其成为唯一的数据库?如果我卸载原始备注程序然后安装我编辑的版本,它工作正常.

Com*_*are 172

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

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

  • 如果您在具有相同提供程序名称的两个项目中使用库,则可能导致此错误 (10认同)
  • @CommonsWare我在我的`AndroidManifest``provider`标签中使用了`android:authorities`属性.我已经使用该项目作为我的android库项目使用这个库项目我已经开发了一些项目.如果我们使用公共库项目,如何解决`install_failed_conflicting_provider`问题. (5认同)
  • @jamal:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support - 如果您还有其他问题,则无法通过搜索,请询问新的Stack Overflow问题. (4认同)
  • 我的库清单中没有像 `android:authorities` 或 `<provider>` 这样的东西,并收到此错误。 (2认同)

Jos*_*gia 122

如果您有不同的风格并且想要避免权限名称中的冲突,则可以添加applicationIdSuffix构建类型并applicationId在清单中使用结果,如下所示:

<...
 android:authorities="${applicationId}.contentprovider"/>
Run Code Online (Sandbox Code Playgroud)


Dis*_*Dev 30

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

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

android {
    defaultConfig.applicationId = "com.company.appname"
}
Run Code Online (Sandbox Code Playgroud)

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

症状

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
Run Code Online (Sandbox Code Playgroud)

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

android {
    defaultConfig.applicationId = "com.company.appname"
}
Run Code Online (Sandbox Code Playgroud)

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


nbu*_*urk 26

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

  • 同样在这里。我正在使用 genymotion 虚拟设备,不得不删除以前安装的应用程序。 (2认同)

Ank*_*wal 21

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

更换 -

<provider
        android:name="com.facebook.FacebookContentProvider"
        android:authorities="com.facebook.FacebookContentProvider"
        android:exported="true" />
Run Code Online (Sandbox Code Playgroud)

WITH - >

<provider
        android:name="com.facebook.FacebookContentProvider"
        android:authorities="com.facebook.FacebookContentProvider[YOUR_APP_ID]"
        android:exported="true" />
Run Code Online (Sandbox Code Playgroud)

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


bur*_*ner 15

重命名包后可能会出现相同的错误.android:authorities从AndroidManifest.xml 检查string.xml中的值.

<provider
        android:authorities="@string/content_authority"
        android:name=".data.Provider"
        ... />
Run Code Online (Sandbox Code Playgroud)

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

<string name="content_authority">com.whatever.android.sunshine.app</string>
Run Code Online (Sandbox Code Playgroud)


Ben*_*oit 8

您可能在清单中声明的​​Authority + Provider名称


Aja*_*ati 7

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

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

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

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

例如:

  <provider
        android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
        android:authorities="your.package.name.AviaryCdsProvider"
       />
Run Code Online (Sandbox Code Playgroud)


Nic*_*oul 7

我认为通过将其图标拖到“卸载”来卸载应用程序可以解决问题,但事实并非如此。

这是解决问题的方法:

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

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


Kus*_*hal 6

我尝试了很多解决方案,但找不到解决方案...但是此链接对我有帮助...我想详细说明问题...

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

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


Vla*_*nko 6

当我在多个应用程序中使用一个库时,我遇到了类似的问题。只需使用下面的确切提供者声明更新您的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> 
Run Code Online (Sandbox Code Playgroud)


Ali*_*waz 6

遇到了这个问题。

通过以下方式解决

1 - 打开 AndroidManifest.xml

2 - ctrl+f 找到“提供者”

3 - 找到提供者并在那里更新您的根目录名称。

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


小智 5

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

<provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider112623702612345" android:exported="true" />
Run Code Online (Sandbox Code Playgroud)


Lou*_*uis 5

陈述显而易见的,但也要确保你没有默默地搞砸对applicationIdin 的引用android:authorities

就我而言,我打错了字并省略了该死的美元符号:

android:authorities="{applicationId}.myprovider"
Run Code Online (Sandbox Code Playgroud)

代替 :

android:authorities="${applicationId}.myprovider"
Run Code Online (Sandbox Code Playgroud)

这不会导致任何直接错误(因为它是一个有效的授权名称)。但是几天后,当我尝试安装应用程序的不同变体时,要了解问题所在真的很痛苦,因为错误消息没有提供有关内容提供程序问题的太多信息。

解决此问题的另一种方法是比较合并的清单,寻找相同的权限。