Gradle ошибка зависимостей в android

В следующем build.gradle я добавил раздел конфигурации, чтобы избежать двойного включения библиотек поддержки. Библиотеки поддержки используются в основном проекте и в зависимых проектах, таких как facebook sdk. Без раздела конфигурации я получаю "НЕОПРЕДЕЛЕННЫЙ ТОП-УРОВЕННЫЙ ИСКЛЮЧИТЕЛЬ". Добавление этой конфигурации приводит к ошибке, и приложение работает нормально.

Теперь я пытаюсь добавить RecyclerView в свое приложение, и я получаю класс RecyclerView, который не найден при раздувании recyclerview (хотя он строит нормально). Если я удалю раздел SDK в facebook и конфигурацию, recyclerview работает просто отлично.

Вопрос: Какие изменения я могу внести в build.gradle, чтобы работать с SDK в facebook и работать с RecyclerView? Другими словами, почему раздел конфигурации исключает v7, когда он должен исключать только v4?


dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:support-v4:+'
    compile 'com.android.support:support-v13:+'
    compile 'com.android.support:cardview-v7:+'
    compile 'com.android.support:recyclerview-v7:+'
    compile 'com.google.android.gms:play-services:4.4.52'
    compile project(':facebook-3.15')
    compile project(':parse-1.5.1')
    compile project(':viewpagerindicator-2.4.1')
}

configurations {
    // to avoid double inclusion of support libraries
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

Ответ 1

Нашел решение:

  • Удален раздел конфигурации в build.gradle, который исключает support-v4

  • Оказывается, что файлы .aar в основном представляют собой zip, поэтому удалили банку support-v4 из библиотеки .aar зависимости (используя 7-zip). И теперь я не получаю исключение верхнего уровня и в то же время могу использовать recyclerview-v7.

Если вы используете проекты зависимостей вместо .aar файлов, попробуйте удалить файлы поддержки-v4.jar в проектах зависимостей перед компиляцией.

Должен ли инструмент сборки gradle быть достаточно интеллектуальным, чтобы исключить дубликаты пакетов, а не чтобы пользователи могли преодолеть такие обходные пути и головные боли?

Ответ 2

Если у вас возник конфликт с библиотекой поддержки v4, вы можете просто исключить ее из одной из библиотек через gradle script:

compile ('com.android.support:recyclerview-v7:+') {
    exclude module: 'support-v4'
}

Ответ 3

Я установил, что добавление:

compile ('com.facebook.android:facebook-android-sdk:[email protected]'){
    exclude module: 'support-v4'
}