Все библиотеки com.android.support должны использовать одну и ту же версию
Когда я обновил свою андроид студию сегодня с версии 2.2.3 до 2.3, я внезапно получил эту ошибку в моем build.gradle на первой строке компиляции в зависимостях
(Неважно, какая зависимость будет на первом месте, но она всегда выдаст мне эту ошибку):
Все библиотеки com.android.support должны использовать одну и ту же спецификацию версии (смешивание версий может привести к сбоям во время выполнения). Найдено версии 25.2.0, 24.0.0. Примеры включают com.android.support:animated-vector-drawable:25.2.0 и com.android.support:mediarouter-v7:24.0.0
я просмотрел весь свой проект, и я не могу найти какое-либо использование версий 24.0.0 (я искал ctrl + shift + F для поиска во всем проекте)
это мой build.gradle:
android {
compileSdkVersion 25
buildToolsVersion '25.0.2'
useLibrary 'org.apache.http.legacy'
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
versionName "1.0"
versionCode 1
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
debug {
minifyEnabled true
shrinkResources true
}
}
dexOptions {
javaMaxHeapSize "4g"
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:25.2.0'
compile 'com.google.android.gms:play-services:+'
compile 'com.squareup:otto:1.3.8'
compile 'com.mcxiaoke.volley:library-aar:1.0.0'
compile 'com.android.support:multidex:1.0.1'
}
13 ответов
я просмотрел весь свой проект, и я не могу найти использование версий 24.0.0
Это приходит как переходная зависимость от одной из ваших других зависимостей.
Однако сначала исправьте другие проблемы в вашем build.gradle
файл, так как они могут решить эту проблему:
Не использовать
+
для версии библиотеки. Используйте конкретную версию.Не использовать
play-services
, Используйте определенные зависимости для определенных частей SDK Play Services, которые вы хотите.play-services
включает в себя все сервисы Play Services, делая ваше приложение намного больше, чем нужно, и значительно замедляя время сборки.замещать
com.mcxiaoke.volley
с официальным залповым артефактом (com.android.volley:volley:1.0.0
)
Если ни один из них не прояснил проблему, вы можете запустить отчет о зависимостях Gradle, чтобы увидеть, каково ваше полное дерево зависимостей. Оттуда вы увидите, какая из ваших библиотек запрашивает другую версию библиотек поддержки Android. За то, что он просит, вы можете попросить об этом непосредственно с 25.2.0
или используйте другие подходы Gradle для разрешения конфликтов, чтобы договориться о получении той же версии.
Чтобы уточнить принятый ответ, правильное разрешение зависимостей для случая библиотеки поддержки выглядит следующим образом:
Не просто добавляйте транзитивные зависимости как прямые зависимости для форсирования их версий; это семантически неправильная вещь (если вы когда-либо удаляете зависимость, которая привела к транзитивной зависимости, у вас теперь есть оставшаяся зависимость, которую вы на самом деле не используете).
Сделайте следующее:
В твоем корне build.gradle
, вы уже должны иметь
ext {
supportlib_version = '27.1.1'
...
}
и использовать это свойство в вашем, например, app/build.gradle
лайк
dependencies {
implementation "com.android.support:appcompat-v7:$supportlib_version"
implementation "com.android.support:recyclerview-v7:$supportlib_version"
...
}
Теперь в вашем корне build.gradle
, иметь
subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') ) {
details.useVersion "$supportlib_version"
}
}
}
}
то есть в каждом модуле и каждой конфигурации при разрешении зависимостей, если это библиотека поддержки (но не мультидексная (может быть больше исключений)), принудительно установите версию в вашу стандартную версию библиотеки поддержки.
Для всех случаев, а не только для этих версий или библиотек:
Обратите внимание на небольшое информационное окно, в котором что-то говорится об ошибке, там указаны примеры, которые вы должны изменить и добавить.
Вы не можете видеть использование, потому что его использование, вероятно, является внутренним для другой библиотеки (например, Google Play Services или Squareup).
Просто скомпилируйте все примеры, о которых говорит маленькое информационное окно, в вашем случае:
Примеры включают com.android.support:animated-vector-drawable:25.2.0 и com.android.support:mediarouter-v7:24.0.0
Ваш
com.android.support:animated-vector-drawable:25.2.0
это версия 25.2.0, а ваш
com.android.support:mediarouter-v7:24.0.0
это версия 24.0.0, поэтому вы должны добавить посредник с той же версией:
com.android.support:mediarouter-v7:25.2.0
И делайте это для каждого примера, который говорит маленькое информационное окно; в вашем случае все библиотеки, которые не имеют версии 25.2.0.
Вы должны синхронизировать gradle после того, как вы исправите указанную библиотеку, чтобы увидеть следующую библиотеку и пакет, который вы должны изменить.
Та же проблема случилась со мной. То, что я только что сделал, добавил эти две строки
compile 'com.android.support:animated-vector-drawable:25.2.0'
compile 'com.android.support:customtabs:25.2.0'
задача решена. Я также удалил мою предыдущую версию папки Gradle.
Можете добавить
compile 'com.android.support:customtabs:25.2.0'
и щелкнув правой кнопкой мыши в зависимости gradle, вы можете добавить конфликтующие зависимости. для меня это было
compile 'com.android.support:cardview-v7:25.2.0'
compile 'com.android.support:animated-vector-drawable:25.2.0'
Добавьте это в самый конец вашего build.gradle (Модуль: приложение):
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '25.3.1'
}
}
}
}
Замените "25.3.1" версией библиотеки поддержки Android, которую вы хотите использовать, версия должна быть выше версии вашей версии compileSdk.
У меня такая же проблема в Android studio 2.3
Затем я пытаюсь:
./gradlew -q dependencies app --configuration compile
+--- project :lib
+--- com.jonathanfinerty.once:once:1.2.2
| \--- com.android.support:support-annotations:25.3.1
+--- com.zhy:base-rvadapter:3.0.3
| \--- com.android.support:recyclerview-v7:23.4.0
| +--- com.android.support:support-annotations:23.4.0 -> 25.3.1
| \--- com.android.support:support-v4:23.4.0 -> 25.3.1
| +--- com.android.support:support-compat:25.3.1
| | \--- com.android.support:support-annotations:25.3.1
| +--- com.android.support:support-media-compat:25.3.1
| | +--- com.android.support:support-annotations:25.3.1
| | \--- com.android.support:support-compat:25.3.1 (*)
| +--- com.android.support:support-core-utils:25.3.1
| | +--- com.android.support:support-annotations:25.3.1
| | \--- com.android.support:support-compat:25.3.1 (*)
| +--- com.android.support:support-core-ui:25.3.1
| | +--- com.android.support:support-annotations:25.3.1
| | \--- com.android.support:support-compat:25.3.1 (*)
| \--- com.android.support:support-fragment:25.3.1
| +--- com.android.support:support-compat:25.3.1 (*)
| +--- com.android.support:support-media-compat:25.3.1 (*)
| +--- com.android.support:support-core-ui:25.3.1 (*)
| \--- com.android.support:support-core-utils:25.3.1 (*)
+--- com.squareup.okhttp3:okhttp:3.6.0
| \--- com.squareup.okio:okio:1.11.0
+--- com.squareup.okhttp3:logging-interceptor:3.6.0
| \--- com.squareup.okhttp3:okhttp:3.6.0 (*)
+--- com.google.code.gson:gson:2.8.0
+--- com.jakewharton:butterknife:8.4.0
| +--- com.jakewharton:butterknife-annotations:8.4.0
| | \--- com.android.support:support-annotations:24.1.0 -> 25.3.1
| \--- com.android.support:support-annotations:24.1.0 -> 25.3.1
+--- com.github.bumptech.glide:glide:3.7.0
+--- org.litepal.android:core:1.5.1
+--- com.orhanobut:logger:1.15
+--- com.android.support:appcompat-v7:25.3.1
| +--- com.android.support:support-annotations:25.3.1
| +--- com.android.support:support-v4:25.3.1 (*)
| +--- com.android.support:support-vector-drawable:25.3.1
| | +--- com.android.support:support-annotations:25.3.1
| | \--- com.android.support:support-compat:25.3.1 (*)
| \--- com.android.support:animated-vector-drawable:25.3.1
| \--- com.android.support:support-vector-drawable:25.3.1 (*)
библиотека base-rvadapter не включает 25.3.1:
com.zhy:base-rvadapter:3.0.3
| \--- com.android.support:recyclerview-v7:23.4.0
Наконец, я добавляю строку:
compile 'com.android.support:design:25.3.1'
дизайн включает appcompat-v7 и ссылку base-rvadapter 25.3.1.
+--- project :lib
+--- com.jonathanfinerty.once:once:1.2.2
| \--- com.android.support:support-annotations:25.3.1
+--- com.zhy:base-rvadapter:3.0.3
| \--- com.android.support:recyclerview-v7:23.4.0 -> 25.3.1
| +--- com.android.support:support-annotations:25.3.1
| +--- com.android.support:support-compat:25.3.1
| | \--- com.android.support:support-annotations:25.3.1
| \--- com.android.support:support-core-ui:25.3.1
| +--- com.android.support:support-annotations:25.3.1
| \--- com.android.support:support-compat:25.3.1 (*)
+--- com.squareup.okhttp3:okhttp:3.6.0
| \--- com.squareup.okio:okio:1.11.0
+--- com.squareup.okhttp3:logging-interceptor:3.6.0
| \--- com.squareup.okhttp3:okhttp:3.6.0 (*)
+--- com.google.code.gson:gson:2.8.0
+--- com.jakewharton:butterknife:8.4.0
| +--- com.jakewharton:butterknife-annotations:8.4.0
| | \--- com.android.support:support-annotations:24.1.0 -> 25.3.1
| \--- com.android.support:support-annotations:24.1.0 -> 25.3.1
+--- com.github.bumptech.glide:glide:3.7.0
+--- org.litepal.android:core:1.5.1
+--- com.orhanobut:logger:1.15
+--- com.android.support:appcompat-v7:25.3.1
| +--- com.android.support:support-annotations:25.3.1
| +--- com.android.support:support-v4:25.3.1
| | +--- com.android.support:support-compat:25.3.1 (*)
| | +--- com.android.support:support-media-compat:25.3.1
| | | +--- com.android.support:support-annotations:25.3.1
| | | \--- com.android.support:support-compat:25.3.1 (*)
| | +--- com.android.support:support-core-utils:25.3.1
| | | +--- com.android.support:support-annotations:25.3.1
| | | \--- com.android.support:support-compat:25.3.1 (*)
| | +--- com.android.support:support-core-ui:25.3.1 (*)
| | \--- com.android.support:support-fragment:25.3.1
| | +--- com.android.support:support-compat:25.3.1 (*)
| | +--- com.android.support:support-media-compat:25.3.1 (*)
| | +--- com.android.support:support-core-ui:25.3.1 (*)
| | \--- com.android.support:support-core-utils:25.3.1 (*)
| +--- com.android.support:support-vector-drawable:25.3.1
| | +--- com.android.support:support-annotations:25.3.1
| | \--- com.android.support:support-compat:25.3.1 (*)
| \--- com.android.support:animated-vector-drawable:25.3.1
| \--- com.android.support:support-vector-drawable:25.3.1 (*)
\--- com.android.support:design:25.3.1
+--- com.android.support:support-v4:25.3.1 (*)
+--- com.android.support:appcompat-v7:25.3.1 (*)
+--- com.android.support:recyclerview-v7:25.3.1 (*)
\--- com.android.support:transition:25.3.1
+--- com.android.support:support-annotations:25.3.1
\--- com.android.support:support-v4:25.3.1 (*)
Здесь указывается, что добавление этой строки устранит ошибку.
compile 'com.android.support:customtabs:25.2.0'
Похоже, Android Studio 2.3 требует явного объявления внешних зависимостей. Это зависимости customtabs и palette-v7.
Вам необходимо явно добавить следующие две внешние зависимости / пакеты в build.gradle
compile 'com.android.support:customtabs:25.2.0'
compile 'com.android.support:palette-v7:25.2.0'
Я думаю, что это решит проблему.
Удалить или обновить следующую зависимость
compile 'com.google.android.gms:play-services:9.6.1'
или только добавить выборочные услуги, как это
compile 'com.google.android.gms:play-services-fitness:10.2.4'
compile 'com.google.android.gms:play-services-wearable:10.2.4'
Попробуйте заменить compile 'com.google.android.gms:play-services:+'
с конкретными пакетами, которые вы используете (см. этот ответ: /questions/14636180/vse-biblioteki-comandroidsupport-dolzhnyi-ispolzovat-odnu-i-tu-zhe-spetsifikatsiyu-versii/14636201#14636201)
Сделайте все зависимости одной и той же или последней версии в вашем случае замените версии библиотеки поддержки на 25.2.0 .
Используйте конкретные версии вместо +
, Например, "com.google.android.gms:play-services:10.2.0"
И используйте специальные SDK, которые вы используете, вместо добавления всего пакета Play-SDK. Например:
'com.google.android.gms:play-services-gcm:10.2.0'
'com.google.android.gms:play-services-maps:10.2.0'
'com.google.android.gms:play-services-location:10.2.0'
Это помогло мне решить проблему.