我正在面对一个陌生的问题与
android工作室.我有两个
Android应用程序使用Facebook sdk与同一个Facebook应用程序登录和分享图片.使用新的api,有必要在里面声明:
<provider android:authorities="com.facebook.app.FacebookContentProvider[app_id]" android:name="com.facebook.FacebookContentProvider" android:exported="true"/>
现在如果其中一个应用程序已经安装在设备上,我尝试安装第二个应用程序,我在Android studio上获得此错误:
INSTALL_Failed_CONFLICTING_PROVIDER
这是必需的一个Facebook提供者的问题,那是唯一的
元素在我的应用程序
所以,这样我的两个应用程序不能同时在同一台设备上安装?
我想,如果有一种方法使用相同的提供者,并避免该错误.
解决方法
这是我知道的一个老问题,但是我没有一个明确的答案,我可以找到.想到我会发布我如何做到这一点.
使用相同的Facebook应用程序标识,您不能有两个不同的应用程序(或同一个应用程序使用两个不同的应用程序ID).这会打破ContentProvider的内容.您需要在Facebook开发人员区域的主应用程序下创建一个测试应用程序.然后从那里拿出新的应用程序ID,并保持方便.
接下来,在build.gradle中,将以下条目添加(或附加)到defaultConfig块中.
manifestPlaceholders = [ facebook_app_id:"" ]
然后在你的debug config中添加:
manifestPlaceholders = [ facebook_app_id:"<the_debug_app_id_you_kept_handy>"]
然后在你的发行版中添加:
manifestPlaceholders = [ facebook_app_id:"<the_original_app_id_you_had>" ]
现在,更改你的AndroidManifest.xml.更改:
<provider android:authorities="com.facebook.app.FacebookContentProvider<original_app_id>"
至:
<provider android:authorities="com.facebook.app.FacebookContentProvider${facebook_app_id}"
并改变:
<Meta-data android:name="com.facebook.sdk.ApplicationId" android:value="<original_app_id>"/>
至:
<Meta-data android:name="com.facebook.sdk.ApplicationId" android:value="${facebook_app_id}"/>
应该这样做您所做的是向清单添加占位符.从本质上讲,这是一个变量,您可以根据构建类型或风格,将您的毕业生构建设置为使用不同的东西来填充其值.