Android中的INSTALL_FAILED_CONFLICTING_PROVIDER

我正在使用来自Google的开放式代码,用于名为MyTracks的应用程序。

当手机上安装了原始应用程序时出现此错误。

INSTALL_FAILED_CONFLICTING_PROVIDER 

我知道这是因为Manifest中的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 :authorities值是包名称。 android:name是该提供程序的类的名称。 我对么?

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

Solutions Collecting From Web of "Android中的INSTALL_FAILED_CONFLICTING_PROVIDER"

android:authority值是包名称。

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

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

正确。

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

包名与它无关。 不过,您也可能需要更改,以便您的应用能够与普通的,未修改的应用一起安装。

你需要对android:authorities有一个唯一的值,使用这个ContentProvider应用程序中的代码需要使用一个合适的Uricontent://whatever.you.change.the.authority.to/... )。

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

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

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

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

我会build议使用特定应用程序的包名称。 有了这个修复程序,提供程序名称将不再发生冲突,并且您的应用程序将按预期运行。

症状

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

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

在这里输入图像说明

在你的控制台,你会看到这样的消息:

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

更多的阅读可以在这里find原始的错误报告: 问题784:多个应用程序使用相同的权威提供者名称

如果你使用的是前的Facebook的SDK,那么对于每个应用程序,你需要在清单中唯一的这一行

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

xxxxxxxxxx – 对于每个应用都应该是唯一的,对于facebook-sdk,这是您的facebook_id号码

当我在应用程序的清单中更改包名时,出现了同样的错误。 当您尝试再次安装应用程序(使用新的软件包名称)时,会产生冲突。 解决scheme是删除旧版本的应用程序(使用旧的软件包名称),然后您将能够安装新版本。

Gradle也需要包含这个

 defaultConfig { applicationId "com.example.app" } 

我已经完全抛弃了

您可能编译相同的库或包含库。 例如 :

 compile 'com.google.android.gms:play-services:8.1.0' compile 'com.google.android.gms:play-services-ads:8.1.0' compile 'com.google.android.gms:play-services-identity:8.1.0' compile 'com.google.android.gms:play-services-gcm:8.1.0' 

以上代码,谷歌播放服务(第一行)包括所有其他服务。

可能你的手机内存已满,请检查一下