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

时间:2013-04-28 20:57:01

标签: android android-contentprovider

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

26 个答案:

答案 0 :(得分:155)

android:authorities中列出的权限必须是唯一的。引用the documentation for this attribute

  

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

的ContentProvider子类的名称

答案 1 :(得分:101)

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

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

答案 2 :(得分:30)

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

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

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

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

<强>症状

1。)您的用户正在看到可怕的&#34; -505&#34;从Play商店安装应用时出现安装错误。

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

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"
}

更多阅读可在原始错误报告中找到:Issue 784: Multiple apps using same authority provider name

答案 3 :(得分:23)

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

答案 4 :(得分:19)

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

REPLACE -

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

WITH - &gt;

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

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

答案 5 :(得分:15)

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

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

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

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

答案 6 :(得分:8)

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

答案 7 :(得分:6)

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

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

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

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

示例:

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

答案 8 :(得分:5)

如果您在app内使用Facebook检查AndroidManifest文件中的提供者代码,请检查project Idandroid:authorities是否正确

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

答案 9 :(得分:5)

陈述显而易见的事情,但也要确保您没有默默地将 applicationId 中对 android:authorities 的引用搞砸了。

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

android:authorities="{applicationId}.myprovider"

而不是:

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

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

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

答案 10 :(得分:4)

当我在多个应用程序中使用一个库时,我遇到了类似的问题。有必要使用下面的确切提供者声明更新您的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> 

答案 11 :(得分:4)

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

答案 12 :(得分:3)

我尝试了很多解决方案,但找不到解决方案......但这link帮助了我......我想详细说明问题......

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

现在,尝试运行......这将有效...

答案 13 :(得分:2)

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

答案 14 :(得分:2)

我遇到了这个问题:

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

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

implementation 'com.iceteck.silicompressorr:silicompressor:2.2.1'

答案 15 :(得分:1)

遇到这个问题。

通过以下方式解决了

1 - 打开AndroidManifest.xml

2 - ctrl + f find&#34; provider&#34;

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

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

答案 16 :(得分:1)

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

答案 17 :(得分:1)

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

以下是解决问题的方法:

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

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

答案 18 :(得分: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>

答案 19 :(得分:0)

如果您使用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 [...]

here所述,您需要更新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. 重建

答案 20 :(得分:0)

解决方案1 ​​

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

解决方案2

在另一种情况下,我安装了与相同applicationId匹配的检测测试应用。

要解决此问题,我必须运行 ./gradlew uA-u uninstallAll任务的缩写。

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

如果使用仿真器,则可以清除数据

答案 21 :(得分:0)

使用以下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>

当我将以下代码放入Project 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>

答案 22 :(得分:0)

它对我有帮助:转到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>

答案 23 :(得分:0)

在我的Android设备中,我有不同风格的同一个应用程序安装。这给了我错误安装失败的冲突提供商。 所以我卸载了同一个应用程序的所有风格。 并试过

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

它解决了我的问题。

答案 24 :(得分:0)

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

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

如果你在一个应用中使用了不止一个 lib,原因同上。

答案 25 :(得分:-2)

标签

下检查您的 android:authorities 属性。

检查您的软件包名称是否正确