安卓INSTALL_FAILED_CONFLICTING_PROVIDER

我正在使用Google的开放代码来开发一个名为MyTracks的应用程序。

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

INSTALL_FAILED_CONFLICTING_PROVIDER

我知道这是因为在显明中。android:authorities

以下是清单的一部分:

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

所以,我的问题是:我想知道这种方法是否可以解决问题,因为我害怕更改所有软件包名称,然后破坏整个应用程序。

  1. 该值是包名称。是该提供程序的类的名称。我说的对吗?android :authoritiesandroid:name

如果我将软件包名称更改为与com.google etx不同的另一个名称,并重命名该软件包的所有引用/导入,问题应该消失吗?


答案 1

android :authority 值是包名称。

在这种情况下,它恰好是包名称。它必须是独一无二的。

android:name 是该提供程序的类的名称

正确。

如果我将软件包名称更改为与com.google etx不同的另一个名称,并重命名该软件包的所有引用/导入,问题应该消失吗?

包名称与它无关。但是,您可能还需要更改它,以便您的应用程序能够与常规的,未修改的应用程序一起安装。

你需要具有 的唯一值,并且应用中使用它的代码需要使用适当的 ()。android:authoritiesContentProviderUricontent://whatever.you.change.the.authority.to/...


答案 2

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

修复:确保默认Config.applicationId是在使用库的每个项目的文件的android部分中定义的build.gradle

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

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

症状

1.)您的用户在从Play商店安装应用程序时看到可怕的“-505”安装错误。

2.) 当您尝试通过 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

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

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

有关更多内容,请参阅原始 bug 报告:问题 784:多个应用使用相同的颁发机构提供商名称


推荐