Android 安装在控制台中显示错误:安装失败冲突提供程序

Android 安装在控制台中显示错误:安装失败冲突提供程序,android,android-contentprovider,Android,Android Contentprovider,我正在Android SDK中试用NotesList示例程序。我在程序中做了一些改动,但是当我安装编辑过的版本时,当我尝试在设备上安装原始notes程序时,在控制台中不断收到消息install\u FAILED\u CONFLICTING\u PROVIDER。我需要对提供程序进行哪些更改才能使其成为唯一的数据库?如果我卸载原始notes程序,然后安装编辑过的版本,效果会很好 您在清单中声明的权限+提供商名称可能如android:authorities中所列的权限必须是唯一的。引述: 为了避免冲

我正在Android SDK中试用NotesList示例程序。我在程序中做了一些改动,但是当我安装编辑过的版本时,当我尝试在设备上安装原始notes程序时,在控制台中不断收到消息install\u FAILED\u CONFLICTING\u PROVIDER。我需要对提供程序进行哪些更改才能使其成为唯一的数据库?如果我卸载原始notes程序,然后安装编辑过的版本,效果会很好

您在清单中声明的权限+提供商名称可能

android:authorities
中所列的权限必须是唯一的。引述:

为了避免冲突,机构名称应该使用Java风格的命名约定(例如com.example.provider.cartonprovider)。通常,它是实现提供程序的ContentProvider子类的名称


当您安装了较旧版本的应用程序并对(支持)库或清单文件进行了更改时,也会发生这种情况。从设备中删除旧的应用程序(
Settings-->Application-->-->Uninstall
)将解决此问题

重命名包后可能会出现相同的错误。检查AndroidManifest.xml中的
android:authorities
的string.xml中的值

<provider
        android:authorities="@string/content_authority"
        android:name=".data.Provider"
        ... />

在string.xml中,该值应与在清单中声明的包名相同

<string name="content_authority">com.whatever.android.sunshine.app</string>
com.whatever.android.sunshine.app

如果您有不同的风格,并且希望避免权限名称中的冲突,您可以添加一个
应用程序UFFIX
来生成类型,并在清单中使用生成的
应用程序ID
,如下所示:

<...
 android:authorities="${applicationId}.contentprovider"/>
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

如果您在库项目中使用Google Maps+Google Play服务(特别是如果您最近从Eclipse迁移到Android Studio),当您尝试运行使用库的应用程序时,可能会遇到此错误,而您的设备上已经安装了使用同一库的其他应用程序

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

android {
    defaultConfig.applicationId = "com.company.appname"
}
我建议使用特定应用程序的软件包名称。使用此修复程序,提供商名称将不再冲突,您的应用程序将按预期运行

症状

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

2.)当您尝试通过Android Studio安装使用库的第二个应用程序[安装失败\u冲突\u提供程序]时,您将看到此错误消息:

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

<...
 android:authorities="${applicationId}.contentprovider"/>
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报告中找到:

基本上,当我试图更改应用程序的包名时,这种情况发生在我身上

所以,在emulator中,以前安装过相同的应用程序。当我在更改软件包名称后尝试安装应用程序时,它说,设备中较旧的应用程序已经使用了权限

卸载应用程序后,它就解决了我的问题

此外,机构名称应始终为:
your.package.name.UNIQUENAME

例如:

  <provider
        android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
        android:authorities="your.package.name.AviaryCdsProvider"
       />

如果您使用的是Facebook SDK,那么问题可能在于您为Facebook提供商提供的“权限”值

替换-

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

使用->

<provider
        android:name="com.facebook.FacebookContentProvider"
        android:authorities="com.facebook.FacebookContentProvider[YOUR_APP_ID]"
        android:exported="true" />


您可能需要更改
defaultConfig.ApplicationId
,这也是其他答案中建议的。

我尝试了许多解决方案,但找不到解决方案。。。但这帮了我。。。我想详细介绍一下这个问题

我正在运行测试用例,所以我的应用程序在launcher中不可见。。。但它是安装的,因此使用了相同的内容提供商。所以,我应该以某种方式卸载它。因此
设置->应用程序管理器->所有下载的应用程序->卸载当前开发包中的所有应用程序


现在,试着跑。。。这将起作用…

使用带有命令的adb安装
/adb install-r abc.apk
将解决问题(即使设备具有更高的应用程序版本,它也将覆盖)

如果您正在使用Facebook内部应用程序,请检查
AndroidManifest
文件中的提供商标签,并检查您的
项目Id
是否适用于
android:authorities

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

在几个应用程序中使用一个库时,我遇到了类似的问题。只需使用下面这个确切的提供者声明更新您的AndroidManifest.xml

<manifest ...>
    <application ...>
        <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.here.this.library.provider" android:exported="false" android:grantUriPermissions="true" tools:replace="android:authorities">
        </provider>
    </application>  
</manifest> 

在我的android设备中,我安装了不同风格的同一个应用程序。这给了我错误安装失败的冲突提供程序。 所以我卸载了同一个应用程序的所有版本。 并尝试

adb安装-r/Users/demo-debug-92acfc5.apk


它解决了我的问题。

遇到了这个问题

通过以下方式解决该问题:

1-打开AndroidManifest.xml

<provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="library.path.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>
2-ctrl+f查找“提供程序”

3-找到提供者并在那里更新根目录名


运行项目。希望问题会得到解决

我认为通过将应用程序图标拖到“卸载”来卸载应用程序可以解决问题,但事实并非如此

以下是解决问题的方法:

  • 转到“设置”
  • 选择应用程序
  • 找到你的应用程序(是的,我很惊讶仍然在这里找到它!)并按下它
  • 在右上角,按3个点
  • 选择“为所有用户卸载”

  • 再试一次,它现在应该可以工作了。

    如果您使用的是Xamarin,并且出现此错误(可能是因为
    implementation 'com.iceteck.silicompressorr:silicompressor:2.2.1'
    
    <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="library.path.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>
    
    <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true"
            tools:replace="android:authorities">
        </provider>
    
    <provider
            android:authorities="${applicationId}.here.this.library.provider"
            android:name="androidx.core.content.FileProvider"
            android:exported="false"
            android:grantUriPermissions="true"
            tools:replace="android:authorities" >
    
        </provider>
    
    android:authorities="{applicationId}.myprovider"
    
    android:authorities="${applicationId}.myprovider"
    
    android:authorities="${applicationId}.provider"