有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android中的java安装\u失败\u冲突\u提供程序

我正在使用谷歌的开源软件MyTracks

我在手机上安装原始应用程序时遇到此错误

INSTALL_FAILED_CONFLICTING_PROVIDER

我知道这是因为清单中的安卓:authorities

以下是清单的一部分:

<provider
安卓:name="com.google.安卓.apps.mytracks.content.MyTracksProvider"
安卓:authorities="com.google.安卓.maps.mytracks"
安卓:exported="true"
安卓:readPermission="com.google.安卓.apps.mytracks.READ_TRACK_DATA"
安卓:writePermission="com.google.安卓.apps.mytracks.WRITE_TRACK_DATA" />
<!-- Search suggestion provider -->
<provider
安卓:name="com.google.安卓.apps.mytracks.content.SearchEngineProvider"
安卓:authorities="com.google.安卓.maps.mytracks.search"
安卓:exported="false" />

因此,我的问题是:我想知道这种方法是否可以解决问题,因为我害怕更改所有包的名称,然后导致整个应用程序崩溃

  1. 安卓 :authorities值是包名。安卓:name是该提供程序的类的名称。 我说得对吗

如果我将包名更改为与com不同的另一个包名。谷歌etx,并重命名该软件包的所有引用/导入,问题是否应该消失


共 (6) 个答案

  1. # 1 楼答案

    如果您在库项目中使用Google Maps+Google Play服务,则当您尝试运行使用库的应用程序时,可能会遇到此错误,而您的设备上已经安装了使用相同库的其他应用程序

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

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

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

    症状

    1.)从Play Store安装应用程序时,用户会看到可怕的“-505”安装错误

    (二)当您尝试通过Android Studio安装使用库的第二个应用程序时,您将看到此错误消息:

    enter image description here

    在控制台中,您将看到如下消息:

    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
    

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

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

    更多阅读请参见原始错误报告:Issue 784: Multiple apps using same authority provider name

  2. # 2 楼答案

    如果您使用ex facebook sdk 然后,对于每个应用程序,您需要在清单中显示唯一的这一行

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

    XXXXXXXXX-对于每个应用程序都应该是唯一的,对于facebook sdk,它是您的facebook\u id号

  3. # 3 楼答案

    gradle还需要包含这一点

    defaultConfig {
      applicationId "com.example.app"
    }
    

    我把它完全漏掉了

  4. # 4 楼答案

    我在更改应用程序清单中的程序包名称时遇到了相同的错误。当您再次尝试安装应用程序(使用新的软件包名称)时,会产生冲突。解决方案是删除应用程序的旧版本(使用旧软件包名称),然后您就可以安装新版本

  5. # 5 楼答案

    The android :authorities value is the package name.

    在本例中,它正好是包名。它必须是独一无二的

    The android:name is the name of the class of that provider

    If I change the package name, to another one different than the com.google etx, and rename all the references/ imports of that package, should the problem go away?

    包名与此无关。不过,你可能也需要改变这一点,以便你的应用程序能够与常规、未修改的应用程序一起安装

    您需要为android:authorities指定一个唯一的值,并且应用程序中使用该ContentProvider的代码需要使用适当的Uricontent://whatever.you.change.the.authority.to/...

  6. # 6 楼答案

    只需从您的设备上卸载helloFacebooksample应用程序