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的包,并且重命名该包的所有引用/导入,问题是否应该消失?

  • Android内容提供者插入需要很多时间
  • Android系统。 内容提供者或数据库?
  • 如何使用ContentProvider的insert()方法通过CursorLoader将值正确插入SQLite数据库?
  • Android联系人提供商只能与所有电子邮件进行电话联系
  • Android的UriMatcher存在问题
  • 从不同的应用访问自定义内容提供商
  • Android在用户之间同步数据
  • Android在用户之间同步数据
  • 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' 

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

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