如何解决“所有com.android.support库都必须使用完全相同的版本规范”的问题?

时间:2019-06-10 05:22:06

标签: android gradle anko

具体来说,如果有问题的插件已经是最新的,该如何解决该问题?

我是Android编程的新手,并且绝对是Gradle概念的新手。在我按照互联网上的一些教程指示向主应用程序中添加新依赖项之后,就会出现此问题。

  

所有com.android.support库必须使用完全相同的版本   规范(混合版本可能导致运行时崩溃)。找到了   版本28.0.0、27.1.1。例子包括   com.android.support:animated-vector-drawable:28.0.0和   com.android.support:support-media-compat:27.1.1

但是我没有说“ support-media-compat:27.1.1”。所以我认为这一定是我使用的插件之一。问题是,我应该如何知道哪个插件导致了这个问题?

漫长的谷歌搜索和大量的红色鲱鱼之后,我发现您可以使用控制台中的gradle命令直接扩展依赖项树:

./gradlew app:dependencies

然后带领我找到这个:

+--- org.jetbrains.anko:anko:0.10.8
....
|    +--- org.jetbrains.anko:anko-appcompat-v7:0.10.8
|    |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.0 -> 1.3.21 (*)
|    |    +--- com.android.support:appcompat-v7:27.1.1 -> 28.0.0 (*)
|    |    +--- org.jetbrains.anko:anko-support-v4:0.10.8
|    |    |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.0 -> 1.3.21 (*)
|    |    |    +--- com.android.support:support-v4:27.1.1
|    |    |    |    +--- com.android.support:support-compat:27.1.1 -> 28.0.0 (*)
|    |    |    |    +--- com.android.support:support-media-compat:27.1.1    <-----
|    |    |    |    |    +--- com.android.support:support-annotations:27.1.1 -> 28.0.0
|    |    |    |    |    \--- com.android.support:support-compat:27.1.1 -> 28.0.0 (*)
|    |    |    |    +--- com.android.support:support-core-utils:27.1.1 -> 28.0.0 (*)
|    |    |    |    +--- com.android.support:support-core-ui:27.1.1 -> 28.0.0 (*)
|    |    |    |    \--- com.android.support:support-fragment:27.1.1 -> 28.0.0 (*)
....

现在我知道这是因为anko:0.10.8。我确实记得在添加anko插件后开始出现此问题。根据我先前阅读的答案,通常的解决方案是使用最新版本的插件。但是当我看到the plugin version时,最新的已经是0.10.8。所以我对下一步做什么感到困惑。

这是我的依赖项:

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.test"
        minSdkVersion 23
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
    implementation 'com.github.StevenDXC:DxLoadingButton:2.2'

    implementation 'com.thoughtbot:expandablerecyclerview:1.3'

    implementation "com.squareup.retrofit2:retrofit:2.3.0"
    implementation "com.squareup.retrofit2:adapter-rxjava2:2.3.0"
    implementation "com.squareup.retrofit2:converter-gson:2.3.0"

    implementation "io.reactivex.rxjava2:rxandroid:2.0.1"

    implementation "org.jetbrains.anko:anko:$anko_version"

    implementation 'com.google.firebase:firebase-core:16.0.9'
}

apply plugin: 'com.google.gms.google-services'

我还尝试了将appcompat降级为27.1.1的解决方案,这要求我也将android compileSdkVersion降级为27。但是即使更改了所有这些内容,这也会导致更多的变化。版本与其他插件不兼容。

如何解决此问题,并且仍然使用anko插件?

3 个答案:

答案 0 :(得分:1)

由于您使用过的 org.jetbrains.anko:anko 引发了此问题。它包含完整的捆绑软件设置。相反,您需要避免使用捆绑版本的SDK。而是仅使用所需的功能。

如果您只想将anko用于SQLite管理,则仅使用以下依赖项。

// Anko SQLite
implementation "org.jetbrains.anko:anko-sqlite:$anko_version"

因此,请不要使用仅捆绑了以下功能的sdk,而不要使用完整捆绑的sdk。

dependencies {
    // Anko Commons
    implementation "org.jetbrains.anko:anko-commons:$anko_version"

    // Anko Layouts (These are the dependencies which causing the issue.)
    implementation "org.jetbrains.anko:anko-sdk25:$anko_version" // sdk15, sdk19, sdk21, sdk23 are also available
    implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"

    // Coroutine listeners for Anko Layouts
    implementation "org.jetbrains.anko:anko-sdk25-coroutines:$anko_version"
    implementation "org.jetbrains.anko:anko-appcompat-v7-coroutines:$anko_version"

    // Anko SQLite
    implementation "org.jetbrains.anko:anko-sqlite:$anko_version"
}

请参阅完整文档here

答案 1 :(得分:0)

我遇到了同样的问题,您应该添加错误文本中告诉您的依赖项, 例如,为您的案例添加:

实现'com.android.support:animated-vector-drawable:28.0.0'

AND

实现'com.android.support:support-media-compat:27.1.1'

并同步您的gradle

答案 2 :(得分:0)

您需要在app/build.gradle中添加冲突的依赖关系和最新版本。

因此,如果它告诉您某个库正在使用com.android.support:support-media-compat:27.1.1,则需要在您的app/build.gradle中添加您正在使用的最新版本的依赖性,例如{ {1}}

继续执行此操作,直到应用程序中的所有依赖项都使用最新版本为止。