Студия Android склонна использовать неверную версию библиотеки поддержки Android, - PullRequest
0 голосов
/ 15 октября 2018

Одной из сторонних библиотек, используемых в моем проекте, необходим пакет recyclerview из библиотеки поддержки Android.Так как мой build.gradle настроен на compileSdVersion 28, необходимо использовать версию библиотеки 28.0.0.

Единственный способ построить проект без ошибок, я могу видеть, что пока перечисляются все зависимыепакеты в build.gradle:

dependencies {
    ....
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support:asynclayoutinflater:28.0.0'
    implementation 'com.android.support:animated-vector-drawable:28.0.0'
    implementation 'com.android.support:support-vector-drawable:28.0.0'
    implementation 'com.android.support:support-core-utils:28.0.0'
    implementation 'com.android.support:support-compat:28.0.0'
    implementation 'com.android.support:support-core-ui:28.0.0'
    implementation 'com.android.support:support-fragment:28.0.0'
    implementation 'com.android.support:support-annotations:28.0.0'
    implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.android.support:customtabs:28.0.0'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:cardview-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'
}

Если я опущу хотя бы одну из вышеперечисленных строк, я получу предупреждение gradle: All com.android.support libraries must use exactly same version specification (...). Found versions 28.0.0, 26.1.0.Затем конструктор выдает ошибку из-за конфликта версий.

Глядя на кэширование gradle (~/.gradle/modules-2/files-2.1/com.android.support), я действительно вижу версии 28.0.0 и 26.1.0.Попытался удалить v 26.1.0 из кэша и перекомпилировать с комментариями к com.android.support строкам реализации, кроме первой.Gradle повторно скачивает v 26.1.0, и я все еще получаю ошибку!

Есть ли способ избавиться от этой неприятности?

1 Ответ

0 голосов
/ 15 октября 2018

Благодаря Мохсену (я бы пометил его комментарий как ответ, если смогу) я нашел виновника.

Версия 26.1.0 библиотеки поддержки Android используется рекламными объявлениями Google Play Services.

После обновления с 16.0.0 до 17.0.0 v26.1.0 библиотеки поддержки все еще выбирается, как вы можете видеть для этого фрагмента gradlew app:dependencies:

    +--- com.google.android.gms:play-services-ads:17.0.0
    |    +--- com.android.support:customtabs:26.1.0 -> 28.0.0
    |    |    +--- com.android.support:support-compat:28.0.0
    |    |    |    +--- com.android.support:support-annotations:28.0.0
    |    |    |    +--- com.android.support:collections:28.0.0
    |    |    |    |    \--- com.android.support:support-annotations:28.0.0
    |    |    |    +--- android.arch.lifecycle:runtime:1.1.1
    |    |    |    |    +--- android.arch.lifecycle:common:1.1.1
    |    |    |    |    |    \--- com.android.support:support-annotations:26.1.0 -> 28.0.0
    |    |    |    |    +--- android.arch.core:common:1.1.1
    |    |    |    |    |    \--- com.android.support:support-annotations:26.1.0 -> 28.0.0
    |    |    |    |    \--- com.android.support:support-annotations:26.1.0 -> 28.0.0
    |    |    |    \--- com.android.support:versionedparcelable:28.0.0
    |    |    |         +--- com.android.support:support-annotations:28.0.0
    |    |    |         \--- com.android.support:collections:28.0.0 (*)
    |    |    +--- com.android.support:support-annotations:28.0.0
    |    . . .
    |    +--- com.google.android.gms:play-services-ads-base:[17.0.0] -> 17.0.0
    |    +--- com.google.android.gms:play-services-ads-identifier:16.0.0
    |    |    \--- com.google.android.gms:play-services-basement:16.0.1
    |    |         \--- com.android.support:support-v4:26.1.0 -> 28.0.0
         . . .
    +--- com.google.android.ads.consent:consent-library:1.0.6
    |    +--- com.google.code.gson:gson:2.8.4
    |    \--- com.android.support:appcompat-v7:26.1.0 -> 28.0.0
         . . .

BTWНасколько я понимаю, com.android.support:support-annotations:26.1.0 относится от некоторых support-...:28.0.0 пакетов.Удивительно, не правда ли?

Теперь я сократил список до пяти строк, и он все еще строится без ошибок:

implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.android.support:customtabs:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:support-annotations:28.0.0'

Придется ждать нового релиза Admob Ads, если кто-то неимеет лучшую идею:)

...