210

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

4

29 回答 29

248

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

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

于 2013-04-28T21:17:11.237 回答
184

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

<...
 android:authorities="${applicationId}.contentprovider"/>
于 2015-05-07T14:11:02.097 回答
36

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

于 2014-09-16T19:04:03.103 回答
31

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

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

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:使用相同权限提供者名称的多个应用程序

于 2016-01-18T22:19:26.480 回答
28

如果您使用的是 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还需要按照其他答案中的建议更改。

于 2016-11-09T16:11:53.913 回答
16

重命名包后可能会出现同样的错误。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>
于 2014-12-21T15:14:19.823 回答
8

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

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

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

于 2017-01-10T13:42:42.680 回答
7

您在清单中声明的​​权限 + 提供者名称可能

于 2013-04-28T21:00:31.827 回答
7

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

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

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

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

例子 :

  <provider
        android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
        android:authorities="your.package.name.AviaryCdsProvider"
       />
于 2016-06-10T21:13:22.900 回答
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> 
于 2018-02-13T19:21:43.327 回答
7

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

这是解决问题的方法:

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

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

于 2018-07-27T06:00:14.653 回答
6

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

<provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider112623702612345" android:exported="true" />
于 2017-06-27T08:20:35.603 回答
6

遇到了这个问题。

通过以下方式解决它

1 - 打开 AndroidManifest.xml

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

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

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

于 2018-04-23T21:29:05.063 回答
5

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

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

android:authorities="{applicationId}.myprovider"

代替 :

android:authorities="${applicationId}.myprovider"

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

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

于 2021-01-28T15:22:18.280 回答
4

如果您使用的是模拟器,您可以尝试以下操作。以下对我有用。转到工具--> AVD 管理器-->(选择您的模拟器)--> 擦除数据。错误消失了。

于 2020-12-23T17:16:31.240 回答
2

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

于 2017-03-10T02:58:40.817 回答
2

我有这个问题:

Installation did not succeed.
The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER

但它不是来自清单提供者,我的应用程序中的以下库与其他应用程序发生冲突,其他应用程序无法安装:

implementation 'com.iceteck.silicompressorr:silicompressor:2.2.1'
于 2020-09-23T05:08:17.313 回答
2

在使用以下 AndroidmManifest.xml 实现库时,我遇到了这个错误

<provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="library.path.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>

当我将以下代码放入项目 AndroidManifest.xml (app/src/main) 时,我解决了这个问题:

<provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true"
        tools:replace="android:authorities">
    </provider>
于 2020-10-12T08:30:29.323 回答
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 上,您可能需要在Add Packages窗口中选中Show pre-release packages
  2. 关闭 Visual Studio
  3. 删除 NuGet 包的所有缓存位置:
    • 在 Windows 上,打开 Visual Studio 但不是解决方案:
      • 工具 -> 选项 -> Nuget 包管理器 -> 常规 -> 清除所有 Nuget 缓存
    • 在 Mac 上,擦除以下文件夹:
      • ~/.local/share/NuGet
      • ~/.nuget/packages
      • packages解决方案中的文件夹
  4. 删除解决方案中的 bin/obj 文件夹
  5. 加载解决方案
  6. 恢复解决方案的 Nuget 包(应该自动运行)
  7. 重建
于 2019-06-20T05:06:15.190 回答
1

您可以从运行该应用程序的设备上卸载程序包名称“com.example”,然后再运行该应用程序。这对我有用

于 2020-03-18T12:56:52.417 回答
1

它帮助了我:转到 AndroidManifest 并粘贴或替换为此代码

<provider
        android:authorities="${applicationId}.here.this.library.provider"
        android:name="androidx.core.content.FileProvider"
        android:exported="false"
        android:grantUriPermissions="true"
        tools:replace="android:authorities" >

    </provider>
于 2020-10-15T14:07:02.640 回答
1

是的!我和你有同样的问题。正如你所说,你使用“变体”。保持“权威”的唯一性,你可以这样写

android:authorities="${applicationId}.provider"

如果您在一个应用程序中使用了多个库,则与上述相同。

于 2021-05-18T06:02:08.253 回答
0

在我的 android 设备中,我安装了同一个应用程序的不同风格。这给了我错误INSTALL FAILED CONFLICTING PROVIDER。所以我卸载了同一个应用程序的所有风格。并尝试过

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

它解决了我的问题。

于 2018-02-15T09:18:27.573 回答
0
        need to use android:name="androidx.core.content.contentprovider 
        or android:name="androidx.core.content.provider insteadof 
        android:name="androidx.core.content.fileprovider

        <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.contentprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/filepaths" />
    </provider>
于 2020-09-08T16:15:05.980 回答
0

解决方案 1

在物理设备而不是模拟器上运行应用程序。我遇到了这个问题,我的应用没有定义内容提供者。

解决方案 2

在另一个例子中,我安装了一个与相同的 applicationId 匹配的检测测试应用程序。

为了解决这个问题,我必须运行- uA 是task ./gradlew uA的缩写。uninstallAll

您也可以使用 Gradle 面板并选择导航到app\install\uninstallAll任务

如果您使用模拟器,则可以清除数据

于 2020-10-01T18:04:42.177 回答
0

如果您正在使用提供商检查并通过以下方法进行检查

        <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="androidx.multidex.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_path" />
    </provider>

或使用它

    <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.contentprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_path" />
    </provider>

如果应用程序已经在您的移动卸载中退出,然后检查

于 2021-12-02T08:39:08.500 回答
0

如果您使用 Audience Network Content Provider,您需要在您的应用 AndroidManifest.xml 中添加此代码

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

您的 Facebook 应用程序 ID ---> 165632208074623

于 2021-12-25T16:33:28.450 回答
0

如果您需要使用 facebook 登录您的应用程序,这里有一个提示:(此修复在 cordova 项目中有效)必须完成第 1 步和第 2 步才能解决问题。

1.在该文件中找到文件:platform/android/android.json:删除此代码:

,{"xml": "<provider android:authorities=\"com.facebook.app.FacebookContentProvider<FACEBOOK_APP_ID>\" android:exported=\"true\" android:name=\"com.facebook.FacebookContentProvider\" />","count": 1
}

然后找到文件:platforms/android/app/src/main/androidManifest.xml

删除此代码:

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

现在应用程序可以正常运行。如果这个答案与 OP 无关,我很抱歉,但它可能会帮助许多其他有这个问题的人。我在其他任何地方都找不到这个确切的答案。

于 2022-01-22T12:33:35.050 回答
-2

检查<provider标签下的android:authorities属性


检查你的名是否正确

于 2020-12-10T12:32:52.787 回答