gho*_*der 16 java android manifest android-contentprovider
我正在使用Google的开放式代码来创建名为MyTracks的应用.
我在手机上安装原始应用程序时收到此错误.
INSTALL_FAILED_CONFLICTING_PROVIDER
Run Code Online (Sandbox Code Playgroud)
我知道这是因为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" />
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:我想知道这种方法是否可以解决问题,因为我害怕更改所有软件包名称,然后打破整个应用程序.
android :authorities值是软件包的名称.这android:name是该提供者的类的名称.我对么?如果我将包名更改为另一个与com.google etx不同的名称,并重命名该包的所有引用/导入,问题是否会消失?
Com*_*are 29
android:authorities值是包名.
在这种情况下,它恰好是包名称.它必须是独一无二的.
android:name是该提供者的类的名称
正确.
如果我将包名更改为另一个与com.google etx不同的名称,并重命名该包的所有引用/导入,问题是否会消失?
包名与它无关.不过,您可能还需要更改它,以便您的应用能够与常规的,未经修改的应用程序一起安装.
您需要具有唯一值android:authorities,并且应用程序中使用此代码的代码ContentProvider需要使用适当的Uri(content://whatever.you.change.the.authority.to/...).
如果您在图书馆项目中使用Google地图+ Google Play服务,则在尝试运行使用您的图书馆的应用时会遇到此错误,而您设备上已安装了使用相同图书馆的其他应用.
修复:
确保build.gradle使用您的库为每个项目的文件的android部分定义defaultConfig.applicationId
android {
defaultConfig.applicationId = "com.company.appname"
}
Run Code Online (Sandbox Code Playgroud)
我建议使用特定应用程序的包名称.使用此修复程序,提供程序名称将不再冲突,您的应用程序将按预期运行.
症状
1.)从Play商店安装应用程序时,您的用户看到了可怕的"-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
Run Code Online (Sandbox Code Playgroud)
修复是为了确保build.gradle使用您的库为每个项目的文件的android部分定义defaultConfig.applicationId
android {
defaultConfig.applicationId = "com.company.appname"
}
Run Code Online (Sandbox Code Playgroud)
可以在原始错误报告中找到更多阅读:问题784:使用相同权限提供者名称的多个应用程序
如果您用于前 facebook-sdk,那么对于每个应用程序,您都需要在清单中使用唯一的这一行
<provider android:authorities="com.facebook.app.FacebookContentProviderxxxxxxxxxx"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
Run Code Online (Sandbox Code Playgroud)
xxxxxxxxxx - 每个应用程序都应该是唯一的,对于 facebook-sdk,它是您的 facebook_id 号码
| 归档时间: |
|
| 查看次数: |
29743 次 |
| 最近记录: |