INSTALL_FAILED_CONFLICTING_PROVIDER с Facebook SDK, когда я создаю несколько productFlavors

Я создаю приложение для Android с несколькими productFlavors и использую Facebook SDK v4.1 для входа в систему и обмена содержимым. Проблема в том, что когда я пытаюсь установить приложение на устройство, на котором уже установлено такое же приложение (но с другим вкусом), возникает ошибка. Это не позволяет мне установить второе приложение, если я не удалю существующее.

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

Согласно этому документу, android:authorities должен быть уникальным и У меня должно быть несколько авторизаций, чтобы выполнить то, что я хочу сделать. Однако я не могу иметь несколько идентификаторов приложений Facebook, и мне было интересно, есть ли лучший способ решить эту проблему. Заранее спасибо всем, кто может мне помочь!


person Nari Kim Shin    schedule 09.06.2015    source источник
comment
android:authorities="com.facebook.app.FacebookContentProvider{my_app_id}" должен быть уникальным. Похоже, что другое приложение имеет такие же полномочия. Читайте в stackoverflow.com/questions/21271246/   -  person Pankaj Kumar    schedule 09.06.2015
comment
@PankajKumar Пожалуйста, внимательно прочитайте мой вопрос.   -  person Nari Kim Shin    schedule 09.06.2015
comment
у вас есть какой-нибудь обходной путь для этой проблемы сейчас?   -  person Wayne    schedule 07.12.2015
comment
См. stackoverflow.com/questions/33295117/   -  person Denny Weinberg    schedule 02.10.2016


Ответы (3)


Попробуйте ниже:

Манифест

<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"]
    }
}
person Jaewon Kim    schedule 06.01.2017
comment
Отличный ответ, один вопрос, зачем вам fb перед fb${facebookId}? - person AndroidRuntimeException; 20.09.2017
comment
какой трюк! без «fb» перед сбоем приложения $ {facebookId} с сообщением «недопустимый идентификатор приложения», я думаю, что оно преобразуется в число, и добавление префикса «fb» может предотвратить это? - person Think Twice Code Once; 19.06.2018
comment
@AndroidRuntimeException Просмотреть исходный код Facebook для Android - person Jaewon Kim; 23.10.2019

Вы можете использовать это:

Манифест

<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 на идентификатор вашего приложения.

person evgen shein    schedule 11.11.2016

person    schedule
comment
Чем это отличается от существующего определения поставщика? - person Lima; 01.11.2015
comment
Скопируйте и вставьте тот же код, в чем разница в коде для вопроса и решения - person Pankaj; 12.07.2016