with the supports plugin only new higher and java android gradle build.gradle crashlytics

java - the - install fabric



¿Qué hace exactamente transitive=true en Gradle(wrt crashlytics)? (7)

En una nota más general: establecer transitive = false en la biblioteca crashlytics hace que gradle ignore todas las bibliotecas requeridas por crashlytics (= "bibliotecas transitorias") y no las descargue y vincule.

Tendría que agregar manualmente las bibliotecas requeridas a su proyecto o confiar en otras bibliotecas transitorias agregadas por otras dependencias.

El valor predeterminado para gradle es transitive = true .

Ejemplos y explicación completa aquí: http://www.devsbedevin.com/android-understanding-gradle-dependencies-and-resolving-conflicts/

¿Qué hace exactamente Gradle transitive = true ? No está claro en la documentación de Gradle . Esto está en el contexto de compile dentro de build.gradle . En mi caso, estoy dependiendo de los crashlytics de Android.

compile(''com.crashlytics.sdk.android:crashlytics:2.2.2@aar'') { transitive = true; }

Varios documentos de Gradle ( here y here ) implican que el valor predeterminado "transitivo" es verdadero. Sin embargo, eliminar transitive = true da como resultado que no se KitGroup dependencias transitivas (en particular KitGroup ).

class file for io.fabric.sdk.android.KitGroup not found

Los documentos dicen que el valor predeterminado es verdadero, pero el comportamiento real parece ser lo contrario.

Estoy ejecutando Gradle 2.2.1. ¿Quizás el comportamiento cambió entre 2.2 y 2.4?

Editar : dependencias transitivas relacionadas no resueltas para la biblioteca aar usando gradle


Estás utilizando la notación @aar .
Significa que desea descargar solo el artefacto aar y no dependencias.
Puede consultar esta parte de la documentación :
Verifique el 1.4.1.2. Artifact only notation Sección de 1.4.1.2. Artifact only notation :

Una notación de solo artefacto crea una dependencia de módulo que descarga solo el archivo de artefacto con la extensión especificada. Los descriptores de módulos existentes se ignoran .

Usando la notación @aar si desea descargar las dependencias, debe agregar transitive=true .

Esperaría que omitir @aar debería funcionar sin agregar el atributo transitivo.


Establece si esta dependencia debe resolverse incluyendo o excluyendo sus dependencias transitivas. Los artefactos que pertenecen a esta dependencia podrían tener dependencias de otros artefactos. Estas últimas se denominan dependencias transitivas.


Gradle sigue las dependencias transitivas por defecto. Si desea desactivar eso para una biblioteca en particular, use la bandera transitiva.

Cambiar el valor del indicador transitivo a falso evita la descarga de dependencias transitivas, por lo que deberá agregar lo que sea necesario. Si solo desea un módulo jar, sin dependencias adicionales, también puede especificarlo.


Por defecto, Gradle dependencias de Gradle son transitive ( transitivas = verdaderas ). Las dependencias transitivas se describen más en los repositorios de Maven. Un módulo puede depender de otros módulos, y Gradle puede descubrir esas dependencias de dependencias cuando resuelve la dependencia declarada en un repositorio. Esto casi siempre ahorra mucho tiempo, pero a veces puede crear problemas.

Si depende de la versión 1 del módulo A y la versión 2 del módulo B, y el módulo A depende transitivamente de la versión 3 del módulo B, es posible que no desee que Gradle resuelva esa dependencia final. La versión incorrecta de un archivo JAR podría aparecer en su ruta de compilación o en tiempo de ejecución, y la mayoría de los desarrolladores de Java saben lo frustrante que puede ser esa experiencia.

Afortunadamente, puede alterar la resolución de dependencia transitiva deshabilitándola:

transitive = false

La fuente esta here


Supongo que el artefacto de Crashlytics al que te refieres manualmente especifica dependencias como no transitivas ( transitive=false ) para que no estés obligado a incorporar esas dependencias por defecto. Es por eso que estás viendo el comportamiento opuesto. Por ejemplo, algunos desarrolladores pueden no querer incorporar todos los Servicios de Google Play o cualquier otra cosa que Crashlytics pueda usar si está presente.

Entonces, al eliminar eso, Gradle ya no atrae la dependencia y no se puede construir. Puede especificar esa dependencia manualmente si es necesario.

Dicho esto , creo que el problema más importante en este momento es que no debería hacer referencia al artefacto de Crashlytics directamente, sino que debería usar Fabric y, como resultado, utilizar Crashlytics: https://dev.twitter.com/fabric/android/integrating


transitive controla la transitividad. Gradle normalmente tiene el valor predeterminado de transitivo, excepto cuando no lo hace. Hay un error con transitividad y clasificadores, consulte https://issues.gradle.org/browse/GRADLE-3188 .