joh*_*p34 141 android android-contentprovider
我正在试验Android SDK中的NotesList示例程序.我在程序中略有不同,但是当我安装编辑后的版本时,当我尝试安装原始备注程序已经在设备上时,我会在控制台中收到消息INSTALL_FAILED_CONFLICTING_PROVIDER.我需要在Provider中进行哪些更改才能使其成为唯一的数据库?如果我卸载原始备注程序然后安装我编辑的版本,它工作正常.
Com*_*are 172
列出的权限android:authorities
必须是唯一的.引用此属性的文档:
为避免冲突,权限名称应使用Java样式的命名约定(例如com.example.provider.cartoonprovider).通常,它是实现提供程序的ContentProvider子类的名称
Jos*_*gia 122
如果您有不同的风格并且想要避免权限名称中的冲突,则可以添加applicationIdSuffix
构建类型并applicationId
在清单中使用结果,如下所示:
<...
android:authorities="${applicationId}.contentprovider"/>
Run Code Online (Sandbox Code Playgroud)
Dis*_*Dev 30
如果您在图书馆项目中使用Google地图+ Google Play服务(特别是如果您最近从Eclipse迁移到Android Studio),则在尝试运行使用您的图书馆的应用时会遇到此错误,而使用的是其他应用您的设备上已安装相同的库.
修复:
确保build.gradle
使用您的库为每个项目的文件的android部分定义defaultConfig.applicationId
android {
defaultConfig.applicationId = "com.company.appname"
}
Run Code Online (Sandbox Code Playgroud)
我建议使用特定应用程序的包名称.使用此修复程序,提供程序名称将不再冲突,您的应用程序将按预期运行.
症状
1.)从Play商店安装应用程序时,您的用户看到了可怕的"-505"安装错误.
2.)当您尝试安装通过Android Studio [INSTALL_FAILED_CONFLICTING_PROVIDER]使用您的库的第二个应用程序时,您将看到此错误消息:
在您的控制台中,您将看到如下消息:
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:使用相同权限提供者名称的多个应用程序
nbu*_*urk 26
如果安装了较旧版本的应用程序并对(支持)库或清单文件进行了更改,也会发生这种情况.从您的设备中删除旧应用程序(Settings --> Application --> <your application> --> Uninstall
)将解决问题.
Ank*_*wal 21
如果您使用的是Facebook SDK,那么问题可能在于您为Facebook提供商提供的"权限"值.
更换 -
<provider
android:name="com.facebook.FacebookContentProvider"
android:authorities="com.facebook.FacebookContentProvider"
android:exported="true" />
Run Code Online (Sandbox Code Playgroud)
WITH - >
<provider
android:name="com.facebook.FacebookContentProvider"
android:authorities="com.facebook.FacebookContentProvider[YOUR_APP_ID]"
android:exported="true" />
Run Code Online (Sandbox Code Playgroud)
您可能需要defaultConfig.ApplicationId
按照其他答案中的建议进行更改.
bur*_*ner 15
重命名包后可能会出现相同的错误.android:authorities
从AndroidManifest.xml 检查string.xml中的值.
<provider
android:authorities="@string/content_authority"
android:name=".data.Provider"
... />
Run Code Online (Sandbox Code Playgroud)
在string.xml中,该值应与在清单中声明的包名称相同.
<string name="content_authority">com.whatever.android.sunshine.app</string>
Run Code Online (Sandbox Code Playgroud)
基本上这发生在我身上,当我试图更改应用程序的包名称时.
因此,在模拟器中,之前安装了相同的应用程序.当我试图在更改包名后安装应用程序时,它说,旧版应用程序已经在设备中使用了权限.
卸载应用程序后,它解决了我的问题.
此外,授权名称应始终为:your.package.name.UNIQUENAME
;
例如:
<provider
android:name="com.aviary.android.feather.cds.AviaryCdsProvider"
android:authorities="your.package.name.AviaryCdsProvider"
/>
Run Code Online (Sandbox Code Playgroud)
我认为通过将其图标拖到“卸载”来卸载应用程序可以解决问题,但事实并非如此。
这是解决问题的方法:
再试一次,它现在应该可以工作了。
当我在多个应用程序中使用一个库时,我遇到了类似的问题。只需使用下面的确切提供者声明更新您的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>
Run Code Online (Sandbox Code Playgroud)
遇到了这个问题。
通过以下方式解决:
1 - 打开 AndroidManifest.xml
2 - ctrl+f 找到“提供者”
3 - 找到提供者并在那里更新您的根目录名称。
运行项目。希望问题会得到解决!
小智 5
如果您在应用程序内部使用Facebook,请检查AndroidManifest
文件中的提供者标签,并检查您project Id
是否正确android:authorities
<provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider112623702612345" android:exported="true" />
Run Code Online (Sandbox Code Playgroud)
陈述显而易见的,但也要确保你没有默默地搞砸对applicationId
in 的引用android:authorities
。
就我而言,我打错了字并省略了该死的美元符号:
android:authorities="{applicationId}.myprovider"
Run Code Online (Sandbox Code Playgroud)
代替 :
android:authorities="${applicationId}.myprovider"
Run Code Online (Sandbox Code Playgroud)
这不会导致任何直接错误(因为它是一个有效的授权名称)。但是几天后,当我尝试安装应用程序的不同变体时,要了解问题所在真的很痛苦,因为错误消息没有提供有关内容提供程序问题的太多信息。
解决此问题的另一种方法是比较合并的清单,寻找相同的权限。
归档时间: |
|
查看次数: |
101513 次 |
最近记录: |