草庐IT

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

coder 2023-12-02 原文

催化剂

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

最初的问题

将 Gradle 插件更新到 3.3 后,我收到错误消息“错误:SDK 构建工具版本 (23.0.3) 对于项目‘:mymodulename’来说太低。最低要求是 25.0.0”

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

第一个依赖错误

将 compileSdkVersion 降低到 23 后,我尝试重建,并看到几个类似于“错误:(3) 错误检索项目的父项:找不到与给定名称匹配的资源 'android:TextAppearance.Material.Widget.Button .Borderless.Colored'”。我意识到我忘记更改我的 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)

问题

  1. 依赖树语法“lib version -> different lib version”是什么意思?具体来说,当树显示“com.android.support:support-v4:23.3.0 -> 24.0.0”时,这是什么意思?

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

  3. 如何确保我的所有依赖项都与 compileSdkVersion 23 兼容?

最佳答案

Specifically, when the tree says "com.android.support:support-v4:23.3.0 -> 24.0.0", what does it mean?

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

why didn't this build.gradle throw errors prior to the Android Studio, Gradle plugin, and buildToolsVersion update mentioned earlier?

因为你已经将 Gradle 插件更新到 3.3 有这种检查。

How can I make sure all my dependencies are compatible with compileSdkVersion 23?

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

compileSdkVersion 25
targetSdkVersion  23

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

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

关于android - 如何使用Gradle的依赖树解决android支持库版本不匹配的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42684907/

有关android - 如何使用Gradle的依赖树解决android支持库版本不匹配的问题?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  4. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  5. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  6. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  7. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  8. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  9. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  10. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

随机推荐