¿Cómo gradle maneja multi módulos con diferentes versiones de la biblioteca de soporte v4?

Tengo un proyecto de Android que depende de diferentes módulos y cada módulo depende de la revisión diferente de la androide soporte-v4 biblioteca

1) Mi aplicación también depende de la última versión de Android support-v4 biblioteca (revisión 21) por lo que en esta build.gralde poner una línea como esa:

dependencies { compile 'com.android.support:support-v4:21.0.0' } 

2) SDK de Facebook (v.3.15) módulo que también depende de la biblioteca de soporte de Android v4, pero la revisión 13 y su archivo build.gradle dice:

 dependencies { compile 'com.android.support:support-v4:13.0.+' compile files('../libs/bolts.jar') } 

3) y un módulo más que, podemos llamar a Module3 en ese caso, también depende del soporte-v4 pero con una revisión diferente que los otros módulos, como eso:

 dependencies { compile 'com.android.support:support-v4:19.0.+' compile files('../libs/bolts.jar') } 

Preguntas:

1) ¿Cómo maneja el gradle diferentes revisiones de la biblioteca de soporte-v4?

2) ¿Qué hace exactamente?

3) ¿Qué significa en términos de tamaño apk?

En este caso Gradle fallará la compilación (probado en mi piel y no encontré otras soluciones) "Desafortunadamente" tienes que usar la misma versión de soporte en cualquier módulo.

De docs.gradle.com :

Gradle ofrece las siguientes estrategias de resolución de conflictos:

  • Más nuevo : Se utiliza la versión más reciente de la dependencia. Esta es la estrategia por defecto de Gradle, ya menudo es una opción apropiada, siempre y cuando las versiones sean compatibles hacia atrás.

  • Fail : Un conflicto de versión resulta en un error de generación. Esta estrategia requiere que todos los conflictos de versiones se resuelvan explícitamente en el script de compilación. Consulte ResolutionStrategy para obtener detalles sobre cómo elegir explícitamente una versión en particular.

Aunque las estrategias presentadas anteriormente suelen ser suficientes para resolver la mayoría de los conflictos, Gradle proporciona mecanismos más finos para resolver conflictos de versiones:

  • Configurar una dependencia de primer nivel como forzada . Este enfoque es útil si la dependencia en conflicto ya es una dependencia de primer nivel. Vea ejemplos en DependencyHandler .

  • Configurar cualquier dependencia (transitiva o no) como forzada . Este enfoque es útil si la dependencia en conflicto es una dependencia transitiva. También se puede utilizar para forzar versiones de dependencias de primer nivel. Ver ejemplos en ResolutionStrategy

  • Las reglas de resolución de dependencia son una característica de incubación introducida en Gradle 1.4 que le da un control detallado sobre la versión seleccionada para una dependencia particular.

  • JniLibs no se extienden en gradle
  • Cómo cambiar el nombre de apk usando gradle como este formato?
  • Android 5.x ClassNotFoundException funciona bien en 6.0+
  • Cambiar el directorio de compilación gradle en android studio?
  • Robolectric filenotFound en archivos de activos
  • El proyecto gradle de Android se desarrolla muy lentamente
  • Error: no se pudo encontrar el destino con la cadena de hash 'android-21'
  • Diferencia entre "default gradle wrapper" y "local gradle distribution" en el proyecto de estudio android
  • ¿Cuál es la mejor práctica para compartir clases entre una aplicación de Wear y Android?
  • No se encontró com.android.support:support-v13:19.0.0
  • Excluir recursos predefinidos en el archivo apk
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.