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'
}