我正在开发一个具有(至少)两种不同包名称的应用程序的应用程序 - 因此就android系统而言实际上是两个不同的应用程序.该应用程序使用Facebook共享,因此我在清单中声明了提供程序:
<provider android:authorities="com.facebook.app.FacebookContentProvider{app id here}"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
Run Code Online (Sandbox Code Playgroud)
这是根据Facebook的说明完成的:https://developers.facebook.com/docs/sharing/android
这适用于一个应用程序,但尝试在同一设备上安装第二个应用程序失败,错误为INSTALL_FAILED_CONFLICTING_PROVIDER.这是清单中定义的唯一提供程序,所以我很确定这是问题所在.如果我将提供程序字符串更改为不同的东西,则在尝试打开Facebook共享对话框时会崩溃.
我已经看到声称可以在多个Android应用程序中使用相同的Facebook应用程序,但在Facebook的文档中找不到任何关于它的内容.有没有人这样做过,你是如何解决提供商权限问题的呢?谢谢.
我有一个引用库项目的主项目.它们都是用Gradle编译的.
这是主项目gradle文件的defaultConfig:
defaultConfig {
applicationId "com.example.app"
minSdkVersion 15
targetSdkVersion 21
versionCode 2
versionName "1.0"
}
Run Code Online (Sandbox Code Playgroud)
这是库项目gradle文件的defaultConfig:
defaultConfig {
minSdkVersion 11
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我没有在库中声明任何applicationId.
我在我的库项目中定义了一个权限,如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.library">
<permission android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
Run Code Online (Sandbox Code Playgroud)
构建项目时,applicationId将替换为com.example.library(库包名称).这不是我想要的.我想用com.example.app替换它,因为它是我的应用程序的applicationId.
如果我将$ {applicationID}占位符放在app的清单文件中,一切正常.
有谁知道这是否可以实现以及如何实现?