Java 在Android中安装\u失败\u冲突\u提供程序
我正在使用谷歌的开源软件MyTracks 我在手机上安装原始应用程序时遇到此错误Java 在Android中安装\u失败\u冲突\u提供程序,java,android,manifest,android-contentprovider,Java,Android,Manifest,Android Contentprovider,我正在使用谷歌的开源软件MyTracks 我在手机上安装原始应用程序时遇到此错误 INSTALL_FAILED_CONFLICTING_PROVIDER 我知道这是因为清单中的android:authorities 以下是清单的一部分: <provider android:name="com.google.android.apps.mytracks.content.MyTracksProvider" android:authorities="com.google.android.maps
INSTALL_FAILED_CONFLICTING_PROVIDER
我知道这是因为清单中的android:authorities
以下是清单的一部分:
<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" />
因此,我的问题是:我想知道这种方法是否可以解决问题,因为我害怕更改所有包的名称,然后导致整个应用程序崩溃
android:authorities
值是包名。android:name
是该提供者的类的名称。
我说得对吗您需要为
android:authorities
设置唯一值,并且应用程序中使用此ContentProvider
的代码需要使用适当的Uri
(content://whatever.you.change.the.authority.to/...
)。我在更改应用程序清单中的程序包名称时也遇到了同样的错误。当您再次尝试安装应用程序(使用新的软件包名称)时,会产生冲突。解决方案是删除应用程序的旧版本(使用旧软件包名称),然后您就可以安装新版本。只需从您的设备上卸载helloFacebooksample应用程序即可。您可以编译相同的库或包含库。例如:
compile 'com.google.android.gms:play-services:8.1.0'
compile 'com.google.android.gms:play-services-ads:8.1.0'
compile 'com.google.android.gms:play-services-identity:8.1.0'
compile 'com.google.android.gms:play-services-gcm:8.1.0'
上面的代码中,google play services(第一行)包括所有其他服务。如果您在库项目中使用google Maps+google play services,则当您尝试运行使用库的应用程序时,可能会遇到此错误,而您的设备上已经安装了使用相同库的其他应用程序 修复: 确保在
build.gradle
文件的android部分中为使用库的每个项目定义了defaultConfig.applicationId
android {
defaultConfig.applicationId = "com.company.appname"
}
我建议使用特定应用程序的软件包名称。使用此修复程序,提供商名称将不再冲突,您的应用程序将按预期运行
症状
1.)从Play Store安装应用程序时,用户会看到可怕的“-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
修复方法是确保在build.gradle
文件的android部分中为使用库的每个项目定义defaultConfig.applicationId
android {
defaultConfig.applicationId = "com.company.appname"
}
更多信息可以在原始bug报告中找到:gradle也需要包含这些信息
defaultConfig {
applicationId "com.example.app"
}
如果您使用ex FacebookSDK,那么我完全忽略了它 然后,对于每个应用程序,您需要在清单中显示唯一的这一行
<provider android:authorities="com.facebook.app.FacebookContentProviderxxxxxxxxxx"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
xxxxxxxxxx-对于每个应用程序都应该是唯一的,对于facebook sdk,它是您的facebook_id号,可能是您的手机内存已满,请检查它,但是,有更多的细节可能会有所帮助 对我来说,解决方案有两个关键部分。 首先,我将$(applicationId)添加到清单提供程序条目:
<provider
tools:replace="android:authorities"
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.files"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/fileprovider" />
</provider>
其次,当您切换构建变量时,对我来说,这是在“调试”和“发布”之间,您还需要将项目与Gradle文件同步。仅仅清理和重建项目是不够的
在Android Studio中,AndroidManifest.xml页面底部有两个选项卡。用于编辑的“文本”选项卡和“合并清单”选项卡显示生成后的清单,对我来说,我可以看到它将applicationId正确地注入到提供商的android:authorities部分。只需从您试图运行的设备上卸载该应用程序,然后再次尝试重新安装该应用程序。现有应用程序与新应用程序冲突。如果有人想同时安装这两个版本,该怎么办。例如,应用程序的测试版?Hiya Shajeel。我从未尝试过,但我想你也会遇到同样的问题-除非你知道更多?事实上,问题在于清单中声明的提供程序的权限,在更改包后,我不得不手动更改权限,现在它正在工作。@ban geoengineering感谢朋友。。你今天救了我的命我已经为我的每种口味更改了应用程序ID。但我得到了上面提到的错误。这是可能的,我运行同一个应用程序在同一个设备不同的品种。在同一个设备中,哪个应用程序会作为不同的应用程序进行响应?@iDroidExplorer:问题在于内容提供商的权限。构建变体在这里并不直接重要——权限仍然必须是唯一的。不过,您可以在清单合并过程中使用占位符,使权限字符串基于构建变量的
applicationId
。例如,使用android:authorities=“${applicationId}.provider”将权限字符串作为附加了.provider
的
applicationId`的权限字符串。除此之外,回答是:如果您正在使用facebook集成测试两个不同版本的应用程序,那么您可以登录到facebook开发者仪表板,转到您的应用程序,