Android中的INSTALL_FAILED_CONFLICTING_PROVIDER

gho*_*der 16 java android manifest android-contentprovider

我正在使用Google的开放式代码来创建名为MyTracks的应用.

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

INSTALL_FAILED_CONFLICTING_PROVIDER
Run Code Online (Sandbox Code Playgroud)

我知道这是因为android:authorities在清单中.

这是Manifest的一部分:

<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" />
Run Code Online (Sandbox Code Playgroud)

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

  1. android :authorities值是软件包的名称.这android:name是该提供者的类的名称.我对么?

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

Com*_*are 29

android:authorities值是包名.

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

android:name是该提供者的类的名称

正确.

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

包名与它无关.不过,您可能还需要更改它,以便您的应用能够与常规的,未经修改的应用程序一起安装.

您需要具有唯一值android:authorities,并且应用程序中使用此代码的代码ContentProvider需要使用适当的Uri(content://whatever.you.change.the.authority.to/...).

  • @iDroidExplorer:问题是关于内容提供商的权限.构建变体在这里无关紧要 - 权威必须仍然是唯一的.但是,您可以在清单合并过程中使用占位符来使权限字符串基于构建变体的`applicationId`.例如,使用`android:authorities ="$ {applicationId} .provider"将权限字符串作为`applicationId`并附加`.provider`. (3认同)

Dis*_*Dev 6

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

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

android {
    defaultConfig.applicationId = "com.company.appname"
}
Run Code Online (Sandbox Code Playgroud)

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

症状

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
Run Code Online (Sandbox Code Playgroud)

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

android {
    defaultConfig.applicationId = "com.company.appname"
}
Run Code Online (Sandbox Code Playgroud)

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


Sou*_*abh 5

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


Nic*_*hek 5

如果您用于前 facebook-sdk,那么对于每个应用程序,您都需要在清单中使用唯一的这一行

<provider android:authorities="com.facebook.app.FacebookContentProviderxxxxxxxxxx"
            android:name="com.facebook.FacebookContentProvider"
            android:exported="true"/>
Run Code Online (Sandbox Code Playgroud)

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