我正在使用Android SDK中的NotesList示例程序进行试验。我在程序中做了轻微的更改,但是当我安装我的编辑版本时,当我尝试在设备上已经安装原始notes程序时,我在控制台中一直得到消息INSTALL_FAILED_CONFLICTING_PROVIDER。我需要在提供者中更改什么以使其成为唯一的数据库?如果我卸载原来的notes程序,然后安装我编辑过的版本,它就可以正常工作。


当前回答

我有这个错误,当实现一个库与以下AndroidmManifest.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>

当我在Project AndroidManifest.xml (app/src/main)中放入以下代码时,我解决了这个问题:

<provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true"
        tools:replace="android:authorities">
    </provider>

其他回答

如果你在Xamarin上,你得到这个错误(可能是因为Firebase.Crashlytics):

INSTALL_FAILED_CONFLICTING_PROVIDER
Package couldn't be installed in [...]
Can't install because provider name dollar_openBracket_applicationId_closeBracket (in package [...]]) is already used by [...]

正如这里提到的,你需要更新Xamarin.Build.Download:

Update the Xamarin.Build.Download Nuget Package to 0.4.12-preview3 On Mac, you may need to check Show pre-release packages in the Add Packages window Close Visual Studio Delete all cached locations of NuGet Packages: On Windows, open Visual Studio but not the solution: Tools -> Option -> Nuget Package Manager -> General -> Clear All Nuget Cache(s) On Mac, wipe the following folders: ~/.local/share/NuGet ~/.nuget/packages packages folder in solution Delete bin/obj folders in solution Load the Solution Restore Nuget Packages for the Solution (should run automatically) Rebuild

在android:authorities中列出的权限必须是唯一的。引用此属性的文档:

为了避免冲突,授权名称应该使用java风格的命名约定(例如com.example.provider.卡通提供者)。通常,它是实现提供者的ContentProvider子类的名称

您可以卸载名称为“com”的软件包。在你运行应用程序之后,你在其中运行应用程序的设备。这对我很有效

这是显而易见的,但也要确保你没有在android中混淆了对applicationId的引用:权威。

在我的例子中,我犯了一个错误,漏掉了该死的美元符号:

android:authorities="{applicationId}.myprovider"

而不是:

android:authorities="${applicationId}.myprovider"

这不会立即导致任何错误(因为它是有效的权威名称)。但几天后,当我尝试安装一个应用程序的不同变体时,要了解错误是什么真的很痛苦,因为错误消息没有提供关于内容提供者错误的太多信息。

解决此问题的另一种方法是比较合并的清单,寻找相同的权限。

我本以为通过拖拽图标到“卸载”来卸载应用程序就能解决问题,但事实并非如此。

下面是解决问题的方法:

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

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