Gradle aar library dependecy en el módulo: no se pudo resolver
Soy un novato con gradle y estoy teniendo un problema dependecy. Tengo la siguiente estructura del proyecto:
-MyApp -MyAppLibrary -MyAppPro -MyAppFree -ThirdPartyLibraryWrapper --libs\ThirdPartyLibrary.aar
MyAppPro
y MyAppFree
dependen de MyAppLibrary
, que depende de ThirdPartyLibraryWrapper
. Como su nombre indica, ThirdPartyLibraryWrapper
es un contenedor en una biblioteca externa, a saber, ThirdPartyLibrary.aar
.
- Dagger 2, Gradle Plugins y Jack - Se requiere orientación
- Gradle: ¿Cómo puedo incluir un jar local de un proyecto de java dependiente en una compilación de Android?
- Gradle Build ejecutándose en Android Studio durante demasiado tiempo
- Retrolambda: Lint se bloquea al usar expresiones lambda con retrolambda
- ¿Por qué Android Studio no puede hacer referencia a una biblioteca si se incluye sólo en build.gradle?
Esta es mi configuración:
Build.gradle MyAppPro
apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.example" minSdkVersion 8 targetSdkVersion 22 } buildTypes { release { minifyEnabled true proguardFiles 'proguard.cfg' } } } dependencies { compile project(':MyAppLibrary') }
Build.gradle MyAppLibrary
apply plugin: 'com.android.library' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { minSdkVersion 8 targetSdkVersion 22 compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } } buildTypes { release { minifyEnabled true proguardFiles 'proguard.cfg' } } } dependencies { compile project(':ThirdPartyLibraryWrapper') compile 'com.squareup.picasso:picasso:2.5.2' }
Build.gradle ThirdPartyLibraryWrapper
apply plugin: 'com.android.library' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { minSdkVersion 8 targetSdkVersion 22 } buildTypes { release { minifyEnabled true proguardFiles 'proguard.cfg' } } } repositories { flatDir { dirs 'libs' } } dependencies { compile(name: 'ThirdPartyLibrary-0.1.0', ext: 'aar') compile "com.android.support:support-v4:22.0.0" compile fileTree(dir: 'libs', include: 'volley.jar') compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3' }
Cuando la sincronización gradle se completa, tengo este error:
MyApp/MyAppFre/ build.gradle: failed to resolve ThirdPartyLibrary-0.1.0 MyApp/MyAppLibrary/ build.gradle: failed to resolve ThirdPartyLibrary-0.1.0 MyApp/MyAppPro/ build.gradle: failed to resolve ThirdPartyLibrary-0.1.0
¿Puede alguien ayudarme a averiguar dónde está el problema?
- ¿Por qué necesitamos más de un manifiesto para el proyecto android?
- El elemento uses-sdk no puede tener un atributo "tools: node"
- ¿Cómo heredamos las clases de prueba en los módulos de la biblioteca de Android?
- Android: Cómo usar menor minSdkVersion que declarado en la biblioteca (uiautomator-v18)
- App-debug-unaligned.apk especificado para la propiedad 'inputFile' no existe
- ¿Por qué obtengo este error cuando agrego la biblioteca de clientes de Google Translate a mi proyecto de Android?
- Se produjo un error de tarea Gradle en el proyecto de estudio android
- Configuración adecuada para "sonar.libraries" en un moderno proyecto Gradle Android
Los otros proyectos están viendo que el proyecto :ThirdPartyLibraryWrapper
depende de un artefacto llamado ThirdPartyLibrary-0.1.0:aar
. Las bibliotecas Java (y Android) no agrupan sus propias dependencias juntas, sino que simplemente publican una lista de sus dependencias. El proyecto consumidor es entonces responsable de cargar no sólo la biblioteca de la que depende directamente, sino todas las bibliotecas de las que depende la biblioteca .
El efecto neto de esto es que :MyAppFree
está cargando en :ThirdPartyLibraryWrapper
, luego viendo que :ThirdPartyLibraryWrapper
depende de ThirdPartyLibrary-0.1.0:aar
y así intentando cargar eso también. Sin embargo, :MyAppFree
no sabe dónde está ThirdPartyLibrary-0.1.0:aar
vive .. y así falla.
La solución será colocar bloques de repositories
similares en todos sus otros proyectos. Prueba esto:
repositories { flatDir { dirs project(':ThirdPartyLibraryWrapper').file('libs') } }
El uso del método de project(...).file(...)
le liberará de las rutas de los hardcode y usará el Gradle DSL para resolver la ruta del sistema de archivos buscando el proyecto y haciendo que haga la resolución dinámicamente.
- ¿Cómo generar HMAC-SHA1 Signature en android?
- Android – ¿Cómo mostrar imágenes de los recursos dibujable?