Gradle – DependencySubstitution para la aplicación de Android con una biblioteca

Tengo un proyecto de aplicación de Android con módulo de biblioteca independiente de android dentro, que se publica como un binario. Quisiera agregar una capacidad de cambiar el gradle entre construir una biblioteca de fuentes o usar el artefacto publicado. La aplicación de Android depende del artefacto binario de forma predeterminada:

compile "com.example.konstantin.mylibrary:mylibrary:${mylibraryVersion}"

Ahora quiero que mi artefacto binario sea reemplazado por el código fuente, así que agrego el código siguiente en el archivo build.gradle de raíz:

 configurations.all { resolutionStrategy { dependencySubstitution { substitute module("com.example.konstantin.mylibrary:mylibrary:${mylibraryVersion}") with project(':mylibrary') } } 

Sin embargo, cuando estoy tratando de construir gradle sigue teniendo el artefacto binario. ¿Qué está mal aquí?

Aquí está el código fuente completo

También es interesante que si muevo el código de sustitución de dependencia a la sección de todos los proyectos o al módulo de aplicación build.gradle file, que gradle falla al construir con el siguiente mensaje:

 Error:Module version MyApplication:app:unspecified, configuration '_debugCompile' declares a dependency on configuration 'default' which is not declared in the module descriptor for MyApplication:mylibrary:unspecified 

Finalmente he encontrado una solución de trabajo. De alguna manera eso funciona si lo hago al revés. En lugar de sustituir binario con módulo de proyecto

 substitute module("com.example.konstantin.mylibrary:mylibrary:${mylibraryVersion}") with project(':mylibrary') 

Puedo sustituir módulo de proyecto con binario:

 substitute project(':mylibrary') with module("com.example.konstantin.mylibrary:mylibrary:${mylibraryVersion}") 

Y que la magia funciona. El código de trabajo completo está disponible en una sucursal separada de un repo de ejemplo

Sin embargo, eso no es una solución ideal, porque siempre tengo que vincular el módulo de proyecto en settings.gradle y no puedo construir sin comprobarlo.

  • No se pudo resolver com.google.firebase: firebase-core: 10.0.1
  • Error de ADT que exporta con Gradle
  • No se encontró ningún recurso que coincida con el nombre dado: attr 'android: actionModeShareDrawable'
  • Final inesperado de datos de bloque en Gradle sync
  • No se pudo actualizar el proyecto Gradle
  • "ZipAlignExe 'no existe." Error al ejecutar mi proyecto en Android Studio
  • Cómo actualizar las dependencias de Gradle a su última versión
  • ¿Cuál es la diferencia entre compilar, testCompile y proporcionada en dependencia de gradle
  • Android Studio: Android Manifest no existe o tiene una etiqueta raíz incorrecta
  • Cómo excluir un archivo de un archivo de biblioteca Android .AAR con gradle
  • La generación de Gradle falla debido a la entrada duplicada en strings.xml
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.