热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用Gradle的依赖树来解决android支持库版本不匹配?

如何解决《如何使用Gradle的依赖树来解决android支持库版本不匹配?》经验,为你挑选了1个好方法。

催化剂

我将Android Studio升级到2.3,将Gradle插件升级到3.3

最初的问题

将Gradle插件更新为3.3后,我收到错误"错误:SDK Build Tools修订版(23.0.3)对于项目来说太低了':mymodulename'.最低要求是25.0.0"

我尝试将buildToolsVersion调整为25.0.2并将compileSdkVersion调整为25,以及所有com.android.support依赖项(因为它们的主要版本需要匹配compileSdkVersion).这个调整清除了这个问题,但后来我意识到我的应用程序还不支持Nougat所以我将compileSdkVersion减少到了我的targetSdkVersion 23.关于构建工具太低的错误信息仍然没有了,所以我觉得我很清楚.

第一个依赖错误

将compileSdkVersion击倒到23之后,我试图重建,并看到几个类似于"错误的错误:(3)错误检索项目的父项:找不到与给定名称匹配的资源'android:TextAppearance.Material.Widget.Button.Borderless.有色'".我意识到我忘记改变我的com.android.support依赖项,使得它们的主要版本再次与较低的compileSdkVersion匹配,所以我将它们降低到23.3.0

第二个依赖错误

在解决了第一个依赖性错误后,我能够再次编译并运行我的应用程序.但是,在我的第一个com.android.support依赖项下面仍然存在红色波形,错误说明"所有com.android.support库必须使用完全相同的版本规范(混合版本可能导致运行时崩溃).发现版本24.0 .0,23.3.0.例子包括com.android.support:support-v4:24.0.0和com.android.support:animated-vector-drawable:23.3.0"

我的build.gradle中没有任何内容专门引用24.0.0,看哪:

apply plugin: 'com.android.application'


android {
    compileSdkVersion 23
    buildToolsVersion '25.0.2'


    defaultConfig {
        applicationId ...
        minSdkVersion 16
        targetSdkVersion 23
        versionCode ...
        versionName ...
    }
    buildTypes {
        debug{
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions{

        //check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
    dexOptions{
        jumboMode true
    }

}

repositories {
    // You can also use jcenter if you prefer
    mavenCentral()
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    //android support libs etc.
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:support-v13:23.3.0'
    compile 'com.android.support:mediarouter-v7:23.3.0'
    compile 'com.android.support:recyclerview-v7:23.3.0'
    //snackbar support
    compile 'com.android.support:design:23.3.0'

    //Facebook Android SDK
    compile 'com.facebook.android:facebook-android-sdk:4.7.0'
    //Facebook Audience Network SDK. Only versions 4.6.0 and above are available
    compile 'com.facebook.android:audience-network-sdk:4.7.0'

    //gplay services dependencies
    compile 'com.google.android.gms:play-services-plus:10.0.1'
    compile 'com.google.android.gms:play-services-analytics:10.0.1'
    compile 'com.google.android.gms:play-services-location:10.0.1'

    //provides Firebase Analytics
    compile 'com.google.firebase:firebase-core:10.0.1'

    //provides Google Mobile Ads SDK, a.k.a the AdMob service.
    compile 'com.google.firebase:firebase-ads:10.0.1'

    //dependencies required by the InMobi ads SDK
    compile 'com.squareup.picasso:picasso:2.5.2'

}

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

依赖树

为了弄清楚24.0.0依赖的来源,我使用'./gradlew -q dependencies mymodulename:dependencies --configuration compile'创建了一个依赖树.输出是:

    compile - Classpath for compiling the main sources.
+--- com.android.support:appcompat-v7:23.3.0
|    +--- com.android.support:support-vector-drawable:23.3.0
|    |    \--- com.android.support:support-v4:23.3.0 -> 24.0.0
|    |         \--- com.android.support:support-annotations:24.0.0
|    +--- com.android.support:animated-vector-drawable:23.3.0
|    |    \--- com.android.support:support-vector-drawable:23.3.0 (*)
|    \--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
+--- com.android.support:support-v13:23.3.0
|    \--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
+--- com.android.support:mediarouter-v7:23.3.0
|    +--- com.android.support:appcompat-v7:23.3.0 (*)
|    \--- com.android.support:palette-v7:23.3.0
|         \--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
+--- com.android.support:design:23.3.0
|    +--- com.android.support:appcompat-v7:23.3.0 (*)
|    +--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
|    \--- com.android.support:recyclerview-v7:23.3.0
|         +--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
|         \--- com.android.support:support-annotations:23.3.0 -> 24.0.0
+--- com.facebook.android:facebook-android-sdk:4.7.0
|    +--- com.parse.bolts:bolts-android:1.2.0
|    \--- com.android.support:support-v4:[22,23) -> 24.0.0 (*)
+--- com.facebook.android:audience-network-sdk:4.7.0
|    \--- com.google.android.gms:play-services-ads:7.8.0 -> 10.0.1
|         +--- com.google.android.gms:play-services-ads-lite:10.0.1
|         |    \--- com.google.android.gms:play-services-basement:10.0.1
|         |         \--- com.android.support:support-v4:24.0.0 (*)
|         +--- com.google.android.gms:play-services-base:10.0.1
|         |    +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|         |    \--- com.google.android.gms:play-services-tasks:10.0.1
|         |         \--- com.google.android.gms:play-services-basement:10.0.1 (*)
|         +--- com.google.android.gms:play-services-clearcut:10.0.1
|         |    +--- com.google.android.gms:play-services-base:10.0.1 (*)
|         |    \--- com.google.android.gms:play-services-basement:10.0.1 (*)
|         +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|         \--- com.google.android.gms:play-services-gass:10.0.1
|              \--- com.google.android.gms:play-services-basement:10.0.1 (*)
+--- com.google.android.gms:play-services-plus:10.0.1
|    +--- com.google.android.gms:play-services-base:10.0.1 (*)
|    \--- com.google.android.gms:play-services-basement:10.0.1 (*)
+--- com.google.android.gms:play-services-analytics:10.0.1
|    +--- com.google.android.gms:play-services-analytics-impl:10.0.1
|    |    +--- com.google.android.gms:play-services-base:10.0.1 (*)
|    |    \--- com.google.android.gms:play-services-basement:10.0.1 (*)
|    +--- com.google.android.gms:play-services-base:10.0.1 (*)
|    +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|    \--- com.google.android.gms:play-services-tagmanager-v4-impl:10.0.1
|         +--- com.google.android.gms:play-services-analytics-impl:10.0.1 (*)
|         +--- com.google.android.gms:play-services-base:10.0.1 (*)
|         \--- com.google.android.gms:play-services-basement:10.0.1 (*)
+--- com.google.android.gms:play-services-location:10.0.1
|    +--- com.google.android.gms:play-services-base:10.0.1 (*)
|    +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|    \--- com.google.android.gms:play-services-tasks:10.0.1 (*)
+--- com.google.firebase:firebase-core:10.0.1
|    \--- com.google.firebase:firebase-analytics:10.0.1
|         +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|         +--- com.google.firebase:firebase-common:10.0.1
|         |    +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|         |    \--- com.google.android.gms:play-services-tasks:10.0.1 (*)
|         \--- com.google.firebase:firebase-analytics-impl:10.0.1
|              +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|              +--- com.google.firebase:firebase-iid:10.0.1
|              |    +--- com.google.android.gms:play-services-basement:10.0.1 (*)
|              |    \--- com.google.firebase:firebase-common:10.0.1 (*)
|              \--- com.google.firebase:firebase-common:10.0.1 (*)
+--- com.google.firebase:firebase-ads:10.0.1
|    +--- com.google.android.gms:play-services-ads:10.0.1 (*)
|    \--- com.google.firebase:firebase-analytics:10.0.1 (*)
+--- com.squareup.picasso:picasso:2.5.2
\--- com.android.support:recyclerview-v7:23.3.0 (*)

(*) - dependencies omitted (listed previously)

问题

    依赖树语法'lib version - >不同的lib版'是什么意思?具体来说,当树说"com.android.support:support-v4:23.3.0 - > 24.0.0"时,它是什么意思?

    如果我的其他一些依赖项中有com.android.support版本24.xx库的隐式要求(请参阅com.google.android.gms:play-services-basement:10.0.1,具体取决于com.android.support:support -v4:24.0.0),为什么在之前提到的Android Studio,Gradle插件和buildToolsVersion更新之前没有这个build.gradle抛出错误?

    如何确保所有依赖项与compileSdkVersion 23兼容?

Gabriele Mar.. 6

具体来说,当树说"com.android.support:support-v4:23.3.0 - > 24.0.0"时,它是什么意思?

这意味着库具有com.android.support:support-v4:23.3.0嵌套的相关性,但在这种情况下,您只是使用相同依赖项的另一个更高版本com.android.support:support-v4:24.0.0.
换句话说项目中使用com.android.support:support-v4:24.0.0

为什么在之前提到的Android Studio,Gradle插件和buildToolsVersion更新之前没有这个build.gradle抛出错误?

因为您已将Gradle插件更新为具有此类检查的3.3.

如何确保所有依赖项与compileSdkVersion 23兼容?

这很难.
唯一的方法是检查所有依赖项,但我建议您使用:

compileSdkVersion 25
targetSdkVersion  23

通常,buildToolsVersion在任何情况下都使用最新版本是一个好主意,独立于所使用的支持库的版本.

此外.强烈建议您始终使用最新的SDK进行编译.这意味着今天你应该使用compileSdkVersion25.



1> Gabriele Mar..:

具体来说,当树说"com.android.support:support-v4:23.3.0 - > 24.0.0"时,它是什么意思?

这意味着库具有com.android.support:support-v4:23.3.0嵌套的相关性,但在这种情况下,您只是使用相同依赖项的另一个更高版本com.android.support:support-v4:24.0.0.
换句话说项目中使用com.android.support:support-v4:24.0.0

为什么在之前提到的Android Studio,Gradle插件和buildToolsVersion更新之前没有这个build.gradle抛出错误?

因为您已将Gradle插件更新为具有此类检查的3.3.

如何确保所有依赖项与compileSdkVersion 23兼容?

这很难.
唯一的方法是检查所有依赖项,但我建议您使用:

compileSdkVersion 25
targetSdkVersion  23

通常,buildToolsVersion在任何情况下都使用最新版本是一个好主意,独立于所使用的支持库的版本.

此外.强烈建议您始终使用最新的SDK进行编译.这意味着今天你应该使用compileSdkVersion25.


推荐阅读
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
  • 本文介绍了解决mysql 5.1启动问题的方法,通过修改my.ini文件中的相关配置,包括innodb_data_home_dir和skip-innodb等,可以解决启动问题。同时还介绍了如何调整内存池来存储metadata信息。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • HSRP热备份路由器协议的应用及配置
    本文介绍了HSRP热备份路由器协议的应用及配置方法,包括设计目标、工作原理、配置命令等。通过HSRP协议,可以实现在主动路由器故障时自动切换到备份路由器,保证网络连通性。此外,还介绍了R1和R2路由器的配置方法以及Sw1和Sw2交换机的配置方法,最后还介绍了测试连通性和路由追踪的方法。 ... [详细]
  • 使用这个技巧要达到的目标:一般来说,模型和控制器你都不会有相同的类名字。让我先创建一个取名为post的model。classPostextendsModel{}现在 ... [详细]
  • Word2vec,Fasttext,Glove,Elmo,Bert,Flairpre-trainWordEmbedding源码数据Github网址:词向量预训练实现Githubf ... [详细]
  • 前端简史之纵横:Node东出
    引💡Ajax的出现,带来了jQuery时代,而jQuery时代也伴随着Node风暴淡淡退出了历史舞台。如果说Ajax给前端带来了从网页静 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了在使用vue和webpack进行异步组件按需加载时可能出现的报错问题,并提供了解决方法。同时还解答了关于局部注册组件和v-if指令的相关问题。 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 3年半巨亏242亿!商汤高估了深度学习,下错了棋?
    转自:新智元三年半研发开支近70亿,累计亏损242亿。AI这门生意好像越来越不好做了。近日,商汤科技已向港交所递交IPO申请。招股书显示& ... [详细]
author-avatar
Mr_维力_811
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有