我正在使用Google的open-srouce代码来创建名为MyTracks的应用。
我在手机上安装原始应用时出现此错误。
INSTALL_FAILED_CONFLICTING_PROVIDER
我知道这是因为Manifest中的android:authorities
。
这是Manifest的一部分:
<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
是该提供者的类的名称。
我是对的吗?如果我将包名更改为另一个与com.google etx不同的名称,并重命名该包的所有引用/导入,问题是否会消失?
答案 0 :(得分:29)
android:authorities值是包名。
在这种情况下,发生作为包名称。它必须是独一无二的。
android:name是该提供者的类的名称
正确。
如果我将包名更改为另一个与com.google etx不同的名称,并重命名该包的所有引用/导入,问题是否会消失?
包名与它无关。不过,您可能还需要更改它,以便您的应用能够与常规的,未经修改的应用程序一起安装。
您需要拥有android:authorities
的唯一值,并且您的应用中使用此ContentProvider
的代码需要使用适当的Uri
(content://whatever.you.change.the.authority.to/...
)。< / p>
答案 1 :(得分:6)
如果您在图书馆项目中使用Google地图+ Google Play服务,当您尝试运行使用您的图书馆的应用时会遇到此错误,而您的设备上已安装了使用相同图书馆的其他应用
<强>修正:强>
确保使用您的库为每个项目的build.gradle
文件的android部分定义defaultConfig.applicationId
android {
defaultConfig.applicationId = "com.company.appname"
}
我建议使用特定应用的包名称。使用此修复程序,提供程序名称将不再发生冲突,您的应用程序将按预期运行。
<强>症状强>
1。)您的用户正在看到可怕的&#34; -505&#34;从Play商店安装应用时出现安装错误。
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"
}
更多阅读可在原始错误报告中找到:Issue 784: Multiple apps using same authority provider name
答案 2 :(得分:5)
只需从您的设备上卸载helloFacebooksample应用
答案 3 :(得分:4)
如果您使用ex facebook-sdk 然后对于每个应用程序,您需要在清单
中使用此行<provider android:authorities="com.facebook.app.FacebookContentProviderxxxxxxxxxx"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
xxxxxxxxxx - 对于每个应用程序应该是唯一的,对于facebook-sdk它是你的facebook_id号码
答案 4 :(得分:2)
我在应用程序的清单中更改了包名称时出现了同样的错误。当您尝试再次安装应用程序时(使用新的程序包名称),这会产生冲突。解决方案是删除旧版本的应用程序(使用旧包名称),然后您就可以安装新版本。
答案 5 :(得分:1)
gradle还需要包含此
defaultConfig {
applicationId "com.example.app"
}
我把它完全抛弃了
答案 6 :(得分:0)
CommonWare正确,但是,更多细节可能会有所帮助。
对我来说,解决方案有两个关键部分。 首先,我在清单提供者条目中添加了$(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>
第二,当您切换Build Varients时,对于我来说,这是在'debug'和'release'之间的,您还需要将Project与Gradle文件同步。仅清理和重建项目还不够。
在Android Studio中,AndroidManifest.xml页面底部有两个选项卡。用于编辑的“文本”选项卡和“合并清单”选项卡显示了生成后的结果清单,对我来说,我可以看到它正在将applicationId正确注入到提供程序的android:authorities部分。
答案 7 :(得分:0)
只需从要运行的设备上卸载应用程序,然后尝试再次重新安装。现有应用程序与新应用程序冲突。
答案 8 :(得分:-1)
您可以编译相同的库或包含库。例如:
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服务(第一行)包含所有其他服务。
答案 9 :(得分:-1)
可能是您的手机内存已满,请检查