簡體   English   中英

如何使用Gradle的依賴樹來解決android支持庫版本不匹配?

[英]How to use Gradle's dependency tree to resolve android support library version mismatch?

催化劑

我將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)

問題

  1. 依賴樹語法'lib version - >不同的lib版'是什么意思? 具體來說,當樹說“com.android.support:support-v4:23.3.0 - > 24.0.0”時,它是什么意思?

  2. 如果我的其他一些依賴項中有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拋出錯誤?

  3. 如何確保所有依賴項與compileSdkVersion 23兼容?

具體來說,當樹說“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進行編譯 這意味着今天你應該使用compileSdkVersion 25。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM