¿Cómo usar el árbol de dependencia de Gradle para resolver la incompatibilidad de la versión de la biblioteca de soporte para Android?

el catalizador

He actualizado Android Studio a 2,3, y Gradle plugin a 3,3

El problema inicial

Después de actualizar el complemento de Gradle a 3.3, recibí el error "Error: La revisión de herramientas de compilación de SDK (23.0.3) es demasiado baja para el proyecto 'mymodulename' El mínimo requerido es 25.0.0"

Intenté ajustar tanto buildToolsVersion a 25.0.2 como compileSdkVersion a 25, junto con todas las dependencias de com.android.support (ya que su versión principal necesita coincidir con compileSdkVersion). Ese ajuste eliminó este problema, pero luego me di cuenta de que mi aplicación no es compatible con Nougat, así que reduje la compileSdkVersion a mi targetSdkVersion de 23. El mensaje de error acerca de las herramientas de construcción era demasiado bajo, así que pensé que estaba en claro .

El primer error de dependencia

Después de llamar a compileSdkVersion hasta 23 intenté reconstruir y vi varios errores similares a "Error: (3) Error al recuperar el padre del elemento: No se encontró ningún recurso que coincida con el nombre dado 'android: TextAppearance.Material.Widget.Button.Borderless. De colores'". Me di cuenta de que me había olvidado de cambiar mis dependencias de com.android.support de tal manera que su versión principal coincidía con la menor compileSdkVersion de nuevo, por lo que los golpeó hasta 23.3.0

El segundo error de dependencia

Después de resolver el primer error de dependencia, pude compilar y ejecutar mi aplicación de nuevo. Sin embargo, seguía habiendo un squiggle rojo debajo de mi primera dependencia de com.android.support, con la nota de error "todas las bibliotecas de com.android.support deben usarw la misma especificación exacta de la versión (las versiones de mezcla pueden conducir a los choques del funcionamiento). .0, 23.3.0 Ejemplos incluyen com.android.support:support-v4:24.0.0 y com.android.support:animated-vector-drawable:23.3.0 "

Nada en mi build.gradle se refiere específicamente a 24.0.0, he aquí:

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, aka 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' 

El árbol de dependencias

Para averiguar de dónde venía la dependencia 24.0.0, creé un árbol de dependencias usando './gradlew -q dependencias mymodulename: dependencies –configuration compile'. La salida es:

  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) 

las preguntas

  1. ¿Qué significa la sintaxis del árbol de dependencias 'lib version -> lib version diferente'? Específicamente, cuando el árbol dice "com.android.support:support-v4:23.3.0 -> 24.0.0", ¿qué significa?

  2. Si hay requisitos implícitos para las bibliotecas de la versión 24.xx de com.android.support en algunas de mis otras dependencias (consulte com.google.android.gms: play-services-basement: 10.0.1 dependiendo de com.android.support:support -v4: 24.0.0), ¿por qué este build.gradle no lanzó errores antes del complemento de Android Studio, Gradle plugin y buildToolsVersion mencionado anteriormente?

  3. ¿Cómo puedo asegurarme de que todas mis dependencias sean compatibles con compileSdkVersion 23?

One Solution collect form web for “¿Cómo usar el árbol de dependencia de Gradle para resolver la incompatibilidad de la versión de la biblioteca de soporte para Android?”

Específicamente, cuando el árbol dice "com.android.support:support-v4:23.3.0 -> 24.0.0", ¿qué significa?

Esto significa que una biblioteca tiene com.android.support:support-v4:23.3.0 como dipendency anidado, pero sólo está utilizando otra versión y una versión superior de las mismas dependencias, en este caso com.android.support:support-v4:24.0.0 .
En otras palabras, su proyecto utiliza el com.android.support:support-v4:24.0.0

¿Por qué este build.gradle no lanzó errores antes del complemento de Android Studio, Gradle plugin y buildToolsVersion mencionado anteriormente?

Porque has actualizado el complemento de Gradle a 3.3 que tiene este tipo de verificación.

¿Cómo puedo asegurarme de que todas mis dependencias sean compatibles con compileSdkVersion 23?

Es bastante difícil de tener.
La única manera es comprobar todas las dependencias, pero te sugiero que uses:

 compileSdkVersion 25 targetSdkVersion 23 

En general es una buena idea usar la última versión de buildToolsVersion en cualquier caso, independientemente de la versión de las bibliotecas de soporte utilizadas.

Además. Se recomienda encarecidamente que compile siempre con el SDK más reciente . Esto significa que hoy deberías usar compileSdkVersion 25.

  • Android studio no puede resolver import org.json.JSONObject
  • La red es inaccesible: connect
  • Cobertura androide jacoco vacía con gradle
  • Javadoc no se muestra cuando se usa un reporte local de Maven
  • Android Studio - Gradle: La ejecución falló para la tarea ': Foo: dexDebug' - pero ¿por qué?
  • El número de referencias de método en un archivo .dex no puede exceder 64k API 17
  • ¿Por qué Android Studio no encuentra mis recursos?
  • SDK ubicación no encontrada. ANDROID_HOME - construcción de un proyecto gradle en eclipse en un MAC
  • Cómo cambiar / cambiar testInstrumentationRunner dinámicamente con gradle
  • Error: Error de ejecución de la tarea ': app: dexDebug'. Com.android.ide.common.process.ProcessException
  • Incluya archivos .java como archivos de origen java en Android Studio para eliminar el círculo rojo con "J" en ellos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.