【问题标题】:Install shows error in console: INSTALL FAILED CONFLICTING PROVIDER安装在控制台中显示错误:安装失败冲突提供者
【发布时间】:2013-04-28 20:57:01
【问题描述】:

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

【问题讨论】:

    标签: android android-contentprovider


    【解决方案1】:

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

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

    【讨论】:

    • @CommonsWare 我在AndroidManifest provider 标签中使用了android:authorities 属性。我已经将该项目用作我的 android 库项目,使用这个库项目我开发了几个项目。如果我们使用公共库项目,如何解决install_failed_conflicting_provider 问题。
    • @jamal:如果您使用的是 Android 版 Gradle,例如 Android Studio,清单合并选项将允许您定制权限字符串。否则,从库的清单中删除 <provider> 并在应用程序级别使用唯一的权限字符串对其进行定义。
    • @jamal: tools.android.com/tech-docs/new-build-system/user-guide/… -- 如果您还有其他问题,并且无法通过搜索找到答案,请提出新的 Stack Overflow 问题。
    • 如果您在两个项目中使用具有相同提供程序名称的库,可能会导致此错误
    • 我的库清单中没有android:authorities<provider> 之类的东西并出现此错误。
    【解决方案2】:

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

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

    【讨论】:

    • 您可以在每个产品风味定义上定义自己的applicationIddeveloper.android.com/studio/build/…
    • 我认为,如果您这样做,它将修复不同的产品风味,因为无论如何您都必须为每种风味创建不同的applicationId。如果您有不同的 buildType,您希望 applicationId 在它们之间也有所不同,这就是 applicationIdSuffix 属性的作用。
    • 谢谢,在 fileprovider 中使用硬编码的 android:authorities 正是我的问题!
    • 很好的答案!在添加这些并运行之前,请清理旧版本的应用程序。
    【解决方案3】:

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

    【讨论】:

    • 这里也一样。我正在使用 genymotion 虚拟设备,不得不删除之前安装的应用程序。
    【解决方案4】:

    如果您在库项目中使用 Google 地图 + Google Play 服务(尤其是如果您最近从 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"
    }
    

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

    【讨论】:

    • 我在“简单地”将我的项目从 Eclipse 移动到 Android Studio 后遇到了这个错误,这个技巧解决了这个问题。谢谢
    • @PhilippeGirolami “简单”肯定。我们花了大约一个月的时间将一个非常大的项目从 Eclipse 完全转换到 Studio,现在我们的构建时间为 4 分钟以上,而在 Eclipse 中为 10-15 秒。
    • @PhilippeGirolami android studio 2.0 是专门为解决缓慢问题而构建的 - 它们是 beta 5。但是,使用 beta studio 软件需要您自担风险,有时效果很好,有时很糟糕,并且会毁了你的夜晚。
    【解决方案5】:

    如果您使用的是 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"
    • 我正在研究应用程序调味,但仍然面临同样的问题,第一次成功安装 apk 但是当我更改为第二次构建变体时出现此错误Installation did not succeed. The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER 代码是:&lt;provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.com.freshdesk.helpdesk.provider" &gt;
    • 你救了我一整天。
    【解决方案6】:

    重命名包后可能会出现同样的错误。从 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>
    

    【讨论】:

    • 这也是一个很好的解决方案,但需要时间+空间来为应用程序中的每个提供者创建新的字符串值。
    【解决方案7】:

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

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

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

    【讨论】:

      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

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

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

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

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

        例子:

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

        【讨论】:

        • 我向提供者添加了 'tools:replace="android:authorities"'。
        【解决方案10】:

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

          我以为通过将应用程序的图标拖动到“卸载”来卸载应用程序可以解决问题,但它没有。

          以下是解决问题的方法:

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

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

          【讨论】:

            【解决方案12】:

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

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

            【讨论】:

              【解决方案13】:

              遇到了这个问题。

              已解决

              1 - 打开 AndroidManifest.xml

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

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

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

              【讨论】:

                【解决方案14】:

                说明显而易见,但也要确保您没有在android:authorities 中默默地弄乱对applicationId 的引用。

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

                android:authorities="{applicationId}.myprovider"
                

                而不是:

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

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

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

                【讨论】:

                  【解决方案15】:

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

                  【讨论】:

                    【解决方案16】:

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

                    【讨论】:

                      【解决方案17】:

                      我遇到了这个问题:

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

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

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

                      【讨论】:

                      • 添加productFlavors时遇到同样的问题
                      【解决方案18】:

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

                      【讨论】:

                        【解决方案19】:

                        如果您使用 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 上,您可能需要在 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. 重建

                        【讨论】:

                          【解决方案20】:

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

                          【讨论】:

                            【解决方案21】:

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

                            【讨论】:

                              【解决方案22】:

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

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

                              如果你在一个应用中有多个lib使用,同上原因。

                              【讨论】:

                                【解决方案23】:

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

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

                                它解决了我的问题。

                                【讨论】:

                                  【解决方案24】:
                                          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>
                                  

                                  【讨论】:

                                    【解决方案25】:

                                    解决方案 1

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

                                    解决方案 2

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

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

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

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

                                    【讨论】:

                                      【解决方案26】:

                                      如果您正在使用提供商检查,请按照以下方法进行检查

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

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

                                      【讨论】:

                                        【解决方案27】:

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

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

                                        您的 Facebook 应用 ID ---> 165632208074623

                                        【讨论】:

                                          【解决方案28】:

                                          如果您需要使用 facebook 登录您的应用,这里有一个提示: (此修复适用于科尔多瓦项目) 必须完成第 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 无关,我很抱歉,但它可能会帮助许多其他有这个问题的人。我在其他任何地方都找不到这个确切的答案。

                                          【讨论】:

                                            【解决方案29】:

                                            检查 标签下的 android:authorities 属性


                                            检查您的名称是否正确

                                            【讨论】:

                                              猜你喜欢
                                              • 2016-07-22
                                              • 2015-09-28
                                              • 1970-01-01
                                              • 2021-12-05
                                              • 2019-10-06
                                              • 1970-01-01
                                              • 1970-01-01
                                              • 1970-01-01
                                              • 2019-07-06
                                              相关资源
                                              最近更新 更多