【问题标题】:INSTALL_FAILED_CONFLICTING_PROVIDER with Facebook SDK when I build multiple productFlavors当我构建多个 productFlavor 时使用 Facebook SDK 安装 INSTALL_FAILED_CONFLICTING_PROVIDER
【发布时间】:2015-06-09 05:42:00
【问题描述】:

我正在构建一个包含多个 productFlavors 的 Android 应用,并使用 Facebook SDK v4.1 进行登录和共享内容。问题是,当我尝试在已安装相同应用程序(但风格不同)的设备上安装应用程序时,会引发错误。除非我卸载现有的应用程序,否则它不允许我安装第二个应用程序。

<provider android:authorities="com.facebook.app.FacebookContentProvider{my_app_id}"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true"/>

根据这个documentandroid:authorities 应该是唯一的,我应该有多个身份验证来完成我想做的事情。但是,我不能拥有多个 Facebook AppId,并且想知道是否有更好的方法来解决这个问题。提前感谢任何可以帮助我的人!

【问题讨论】:

标签: android facebook android-contentprovider android-facebook android-productflavors


【解决方案1】:

试试下面:

清单

<provider android:authorities="com.facebook.app.FacebookContentProvider${facebookId}"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true" />
<meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="fb${facebookId}"/>

分级

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.1"
    defaultConfig {
        applicationId "com.your.package"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        manifestPlaceholders = [facebookId:"123456789"]
    }

    productFlavors {
    debug {
        applicationIdSuffix ".debug"
        manifestPlaceholders = [facebookId:"1234"]
    }
    release {
        applicationIdSuffix ".pro"
        manifestPlaceholders = [facebookId:"123456789"]
    }
}

【讨论】:

  • 很好的答案,一个问题,为什么在 fb${facebookId} 之前需要“fb”?
  • 真是个技巧!在 ${facebookId} 应用程序崩溃之前没有“fb”并显示“无效的应用程序 id”消息,我认为它已转换为数字,添加前缀“fb”可以防止这种情况发生吗?
  • @AndroidRuntimeException See Android Facebook source code
【解决方案2】:

你可以用这个:

清单

<provider android:authorities="@string/facebook_app_authority"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true" />

分级

productFlavors {
    flavor1 {
        applicationId "com.id.flavor1"
        versionCode 1
        versionName "1.0.0"
        resValue "string", "facebook_app_authority", "com.facebook.app.FacebookContentProvider0000000000000000"
    }
    flavor2 {
        applicationId "com.id.flavor2"
        versionCode 1
        versionName "1.0.0"
        resValue "string", "facebook_app_authority", "com.facebook.app.FacebookContentProvider0000000000000001"
    }
}

将 0000000000000000 替换为您的 App id

【讨论】:

    【解决方案3】:
    <provider android:authorities="com.facebook.app.FacebookContentProvider{app id here}"
                android:name="com.facebook.FacebookContentProvider"
                android:exported="true"/>
    

    【讨论】:

    • 这与现有的提供者定义有何不同?
    • 复制粘贴相同的代码问题和解决方案的代码有什么区别
    猜你喜欢
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2022-12-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多