Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Dependencias transitorias del proyecto de la biblioteca de Android sueltan tipo AAR

Estoy trabajando en un proyecto que incluye dos proyectos de la biblioteca de Android. Cuando subo estas bibliotecas a mi repo Maven (Nexus), el pom generado no incluye un elemento <type>aar</type> en la dependencia.

Aquí está mi árbol de dependencias

 * App1 \ * lib1 |\ | * lib2 * Other libs 

Puedes ver en este diagrama que mi app depende de lib1 , que depende de lib2 . Ambas bibliotecas son proyectos de la biblioteca de Android, así AARs.

Lib1 / build.gradle

 apply plugin: 'com.android.library' apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle' android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion 20 versionCode 1 versionName "1.0" } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) provided project(':lib2') compile 'com.squareup.picasso:picasso:2.3.3' } 

Lib2 / build.gradle

 apply plugin: 'com.android.library' apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle' android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion 19 versionCode 1 versionName '1.0' } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:19.+' compile 'com.squareup.retrofit:retrofit:1.6.1' compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' compile 'com.squareup.okhttp:okhttp:2.0.0' } 

Observe cómo Lib1 incluye Lib2 como Lib2 un project() .

Ahora, cuando implemento este uso de Chris Banes excelente gradle-mvn-push plugin, todo funciona como se esperaba. Sólo hay una rareza que me doy cuenta en el pom.xml generado.

 <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>lib2</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency> ... </dependencies> 

Observe que el complemento mavenDeployer dejó de lado el elemento <type>aar</type> en la dependencia cuando generó el pom.

En mi proyecto de aplicación (que es un proyecto de maven), tengo esta dependencia en la lista:

 <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>lib1</artifactId> <version>0.0.1-SNAPSHOT</version> <type>aar</type> </dependency> ... </dependencies> 

Al intentar construir esto con Maven, consigo el error siguiente.

 Could not resolve dependencies for project com.example:app:apk:1.0.0-SNAPSHOT: The following artifacts could not be resolved: com.example:lib2:jar:0.0.1-SNAPSHOT 

Observe cómo está buscando una versión jar de la biblioteca. Creo que, desde que el plugin mavenDeployer no se genera el <type>aar</type> en la lista de dependencias del pom generado, maven está prefijando buscar un jar.

¿Alguien sabe cómo construir proyectos de la biblioteca de Android que incluyen dependencias transitorias con Gradle?

  • Establecer la versión de la aplicación de Android con Gradle
  • Cómo configurar gradle home mientras importa proyectos existentes en Android studio
  • Proyecto Unity como dependencia en Gradle
  • Android Studio Gradle error "Múltiples archivos dex definir ..."
  • Error: No se encontraron toolchains en la carpeta de cadenas de herramientas NDK para ABI con prefijo: llvm
  • ¿Cómo puedo mostrar los archivos de registro, System.out.println (), en la prueba de Android?
  • Android studio - No se pudo completar la ejecución de gradle - error al abrir el archivo zip
  • ¿Es posible declarar una variable en Gradle utilizable en Java?
  • 2 Solutions collect form web for “Dependencias transitorias del proyecto de la biblioteca de Android sueltan tipo AAR”

    Simplemente agregue el aar al pom con cualquier editor de texto. Después de eso, abra una consola en la raíz del proyecto (donde se encuentra el pom) y ejecute "mvn clean install". El artefacto aar se generará y desplegará en su repo de maven.

    En cualquier caso, es mucho más fácil crear bibliotecas aar con Maven. Simplemente crea un proyecto de Maven usando cualquier arquetipo de la biblioteca de android (los de.akquinet son bastante buenos, pero debes usar una versión de plugin entre 3.8.2 y 3.9, http://mvnrepository.com/artifact/de.akquinet.android. Arquetipos ). Simplemente cree el proyecto, añada las bibliotecas y luego ejecute el comando "mvn clean install" para instalarlos en su directorio local de maven. Después de eso, basta con usarlos como dependencias normales de aar.

    Prueba gradle-fury. Se arregla todo esto … ehm … cosas. Específicamente el inválido y / o inexacto pom que son generados por gradle. Solución de trabajo confirmada para publicar a sonatype oss / maven central. No manual pom ediciones, pgp firma de apoyo y mucho más.

    Sitio: https://github.com/gradle-fury/gradle-fury

    Específicamente, necesitas el script gradle de maven-support que hace todo el trabajo para ti. Todas las cosas que normalmente están en el pom se almacenan en gradle.properties. Apoye las variantes del androide también, archivos de la guerra, (pronto arregla para el distZip), los javadocs y los tarros de la fuente y más.

    Descargo de responsabilidad, yo trabajo en él

    Editar: un tidbit más de información. Aunque la furia inyecte dependencias y corrija el mecanografiar para las bibliotecas de AAR, el plugin gradle-android (las cosas que google hace) no honra la sección de la dependencia y la ignora. Las dependencias básicamente transitivas de los proyectos AAR no son compatibles. Ni idea de por qué

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.