• 解决 Android 中出现依赖多个版本支持库的问题


    在 app 的 build.gradle 中引入依赖时发现如下错误:

    All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 27.1.1, 26.1.0. Examples include com.android.support:animated-vector-drawable:27.1.1 and com.android.support:support-media-compat:26.1.0 less... (⌘F1) 
    There are some combinations of libraries, or tools and libraries, that are incompatible, or can lead to bugs. One such incompatibility is compiling with a version of the Android support libraries that is not the latest version (or in particular, a version lower than your targetSdkVersion).
    

    简单的说就是引入了两种版本的 Android Support Library,这种情形该如何处理呢?

    1. 统一管理支持包的版本号;
    2. 剔除第三方库中包含的支持包,并引入版本一致的支持包。

    具体如下:

    
    ext.versions = [
      play_services: '15.0.1',
      // 统一管理支持包的版本号
      suport_library: '27.1.1',
    ]
    
    dependencies {
      implementation("com.google.android.gms:play-services-gcm:${versions.play_services}") {
        // 剔除 play service 中包含的 v4 支持包
        exclude group: 'com.android.support', module: 'support-v4'
      }
      // 引入版本一致的 v4 支持包
      implementation "com.android.support:support-v4:${versions.suport_library}"
      implementation "com.android.support:appcompat-v7:${versions.suport_library}"
      implementation "com.android.support:recyclerview-v7:${versions.suport_library}"
      implementation "com.android.support:cardview-v7:${versions.suport_library}"
      implementation "com.android.support:support-annotations:${versions.suport_library}"
    }
    

    通常在我们引入了众多依赖的情况下,我们并不知道引入哪个依赖重复引入了支持库,有没有工具可以帮我们分析呢?

    答案是肯定的,gradle 命令中有一条可以做到这点,那就是 gradle dependencies ,它可以将依赖和依赖的依赖罗列出来。也可以通过 Android Studio 右侧工具栏的 Gradle --> help--> dependencies 启动依赖分析。以上面的依赖为例,执行结果如下:

    +--- com.google.android.gms:play-services-gcm:15.0.1
    |    +--- com.google.android.gms:play-services-base:[15.0.1,16.0.0) -> 15.0.1
    |    |    +--- com.google.android.gms:play-services-basement:[15.0.1] -> 15.0.1
    |    |    |    --- com.android.support:support-v4:26.1.0 -> 27.1.1
    |    |    |         +--- com.android.support:support-compat:27.1.1
    |    |    |         |    +--- com.android.support:support-annotations:27.1.1
    |    |    |         |    --- android.arch.lifecycle:runtime:1.1.0
    |    |    |         |         +--- android.arch.lifecycle:common:1.1.0
    |    |    |         |         --- android.arch.core:common:1.1.0
    |    |    |         +--- com.android.support:support-media-compat:27.1.1
    |    |    |         |    +--- com.android.support:support-annotations:27.1.1
    |    |    |         |    --- com.android.support:support-compat:27.1.1 (*)
    |    |    |         +--- com.android.support:support-core-utils:27.1.1
    |    |    |         |    +--- com.android.support:support-annotations:27.1.1
    |    |    |         |    --- com.android.support:support-compat:27.1.1 (*)
    |    |    |         +--- com.android.support:support-core-ui:27.1.1
    |    |    |         |    +--- com.android.support:support-annotations:27.1.1
    |    |    |         |    +--- com.android.support:support-compat:27.1.1 (*)
    |    |    |         |    --- com.android.support:support-core-utils:27.1.1 (*)
    |    |    |         --- com.android.support:support-fragment:27.1.1
    |    |    |              +--- com.android.support:support-compat:27.1.1 (*)
    |    |    |              +--- com.android.support:support-core-ui:27.1.1 (*)
    |    |    |              +--- com.android.support:support-core-utils:27.1.1 (*)
    |    |    |              +--- com.android.support:support-annotations:27.1.1
    |    |    |              +--- android.arch.lifecycle:livedata-core:1.1.0
    |    |    |              |    +--- android.arch.lifecycle:common:1.1.0
    |    |    |              |    +--- android.arch.core:common:1.1.0
    |    |    |              |    --- android.arch.core:runtime:1.1.0
    |    |    |              |         --- android.arch.core:common:1.1.0
    |    |    |              --- android.arch.lifecycle:viewmodel:1.1.0
    |    |    --- com.google.android.gms:play-services-tasks:[15.0.1] -> 15.0.1
    |    |         --- com.google.android.gms:play-services-basement:[15.0.1] -> 15.0.1 (*)
    |    +--- com.google.android.gms:play-services-basement:[15.0.1,16.0.0) -> 15.0.1 (*)
    |    +--- com.google.android.gms:play-services-iid:[15.0.1] -> 15.0.1
    |    |    +--- com.google.android.gms:play-services-base:[15.0.1,16.0.0) -> 15.0.1 (*)
    |    |    +--- com.google.android.gms:play-services-basement:[15.0.1,16.0.0) -> 15.0.1 (*)
    |    |    +--- com.google.android.gms:play-services-stats:[15.0.1,16.0.0) -> 15.0.1
    |    |    |    --- com.google.android.gms:play-services-basement:[15.0.1] -> 15.0.1 (*)
    |    |    --- com.google.android.gms:play-services-tasks:[15.0.1,16.0.0) -> 15.0.1 (*)
    |    --- com.google.android.gms:play-services-stats:[15.0.1,16.0.0) -> 15.0.1 (*)
    +--- com.android.support:support-v4:27.1.1 (*)
    +--- com.android.support:appcompat-v7:27.1.1
    |    +--- com.android.support:support-annotations:27.1.1
    |    +--- com.android.support:support-core-utils:27.1.1 (*)
    |    +--- com.android.support:support-fragment:27.1.1 (*)
    |    +--- com.android.support:support-vector-drawable:27.1.1
    |    |    +--- com.android.support:support-annotations:27.1.1
    |    |    --- com.android.support:support-compat:27.1.1 (*)
    |    --- com.android.support:animated-vector-drawable:27.1.1
    |         +--- com.android.support:support-vector-drawable:27.1.1 (*)
    |         --- com.android.support:support-core-ui:27.1.1 (*)
    +--- com.android.support:recyclerview-v7:27.1.1
    |    +--- com.android.support:support-annotations:27.1.1
    |    +--- com.android.support:support-compat:27.1.1 (*)
    |    --- com.android.support:support-core-ui:27.1.1 (*)
    +--- com.android.support:cardview-v7:27.1.1
    |    --- com.android.support:support-annotations:27
    
    写在后面:

    1. 子曰:「学而不思则罔,思而不学则殆」。
    2. 站点地图
    2. 本作品作者为 Lshare,采用知识共享署名 4.0 国际许可协议进行许可。
  • 相关阅读:
    sql 内连接外链接
    深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue
    mysql关闭以及重启密码
    学习---书籍
    volatile修饰符
    System.out.println和System.err.println的区别
    懒加载和急加载(lazy/eager)
    load与get在hiberate中的区别
    html
    js
  • 原文地址:https://www.cnblogs.com/lshare/p/11333978.html
Copyright © 2020-2023  润新知