Android 安装在控制台中显示错误:安装失败冲突提供程序
我正在Android SDK中试用NotesList示例程序。我在程序中做了一些改动,但是当我安装编辑过的版本时,当我尝试在设备上安装原始notes程序时,在控制台中不断收到消息install\u FAILED\u CONFLICTING\u PROVIDER。我需要对提供程序进行哪些更改才能使其成为唯一的数据库?如果我卸载原始notes程序,然后安装编辑过的版本,效果会很好 您在清单中声明的权限+提供商名称可能如Android 安装在控制台中显示错误:安装失败冲突提供程序,android,android-contentprovider,Android,Android Contentprovider,我正在Android SDK中试用NotesList示例程序。我在程序中做了一些改动,但是当我安装编辑过的版本时,当我尝试在设备上安装原始notes程序时,在控制台中不断收到消息install\u FAILED\u CONFLICTING\u PROVIDER。我需要对提供程序进行哪些更改才能使其成为唯一的数据库?如果我卸载原始notes程序,然后安装编辑过的版本,效果会很好 您在清单中声明的权限+提供商名称可能如android:authorities中所列的权限必须是唯一的。引述: 为了避免冲
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-找到提供者并在那里更新根目录名
运行项目。希望问题会得到解决 我认为通过将应用程序图标拖到“卸载”来卸载应用程序可以解决问题,但事实并非如此 以下是解决问题的方法:
再试一次,它现在应该可以工作了。如果您使用的是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"