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}"
- Android studio + Gradle + Android Anotaciones
- ¿Puedo usar Widgets de la biblioteca de soporte de Android L Preview en la versión actual de Android?
- Cordova 6.4.0 Error de Android al crear una versión de apk
- Error: No se pueden cambiar las dependencias de configuración ': app: _debugAnnotationProcessor' una vez que se ha resuelto
- Error al resolver: com.android.support:appcompat-v7:26.0.0
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
- Cambiar la URL mavenCentral de Gradle a Mi repo
- La generación de Gradle no pudo resolver la dependencia de la biblioteca aar (trnql sdk)
- En iOS tenemos algo como Gradle Build Flavors en Android
- ¿Cómo funciona el nuevo applicationId en build.gradle?
- ¿Cómo Android Studio lanza el Gradle Daemon?
- Android Studio Gradle - establece la variante de construcción del módulo
- Android Studio Gradle Archivo no válido Manifest.xml
- Gradle no se sincronizó con 'No se pudo encontrar una biblioteca opcional'
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.
- Tome la foto de lo que hay dentro de los límites de superposición
- Crear pestañas en SlidingTabLayout no deslizar