Cómo incluir manualmente el paquete aar externo usando el nuevo sistema de generación de Android de Gradle

He estado experimentando con el nuevo sistema de compilación android y me he encontrado con un pequeño problema. He compilado mi propio paquete aar de ActionBarSherlock que he llamado 'actionbarsherlock.aar'. Lo que estoy tratando de hacer es realmente utilizar este aar para construir mi APK final. Si incluyo toda la biblioteca de ActionBarSherlock como un módulo de android-library a mi proyecto principal usando el proyecto de compilación (': actionbarsherlock') puedo construir con éxito sin ningún problema.

Pero mi problema es que quiero proporcionar esa dependencia como un paquete de archivos aar MANUALMENTE sólo si me gustaría un JAR, entonces no puedo encontrar la manera de incluirlo correctamente en mi proyecto. He intentado utilizar la configuración de la compilación pero esto no parece trabajar. Sigo recibiendo no puede encontrar el símbolo durante la compilación que me dice que el paquete classes.jar de aar no se está incluido en el classpath.

¿Alguien sabe de la sintaxis para incluir manualmente un paquete aar como un archivo?

Construir un gradiente

buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android' repositories { mavenCentral() } dependencies { compile files('libs/actionbarsherlock.aar') } android { compileSdkVersion 15 buildToolsVersion "17.0" } 

EDIT: Así que la respuesta es que no está soportado, aquí está el problema si desea realizar un seguimiento.

EDIT: Actualmente, ya que todavía no se apoya directamente la mejor alternativa parece ser la solución propuesta de @RanWakshlak

EDIT: También más simple mediante el uso de la sintaxis propuesta por @VipulShah

12 Solutions collect form web for “Cómo incluir manualmente el paquete aar externo usando el nuevo sistema de generación de Android de Gradle”

Siga los siguientes pasos para que funcione (lo he probado hasta Android Studio 2.2)

Digamos que ha guardado un archivo aar en la carpeta libs. (Suponga que el nombre del archivo es cards.aar )

Entonces en app build.gradle especifique el siguiente y haga clic en proyecto de sincronización con archivos Gradle. Abra el nivel de proyecto build.gradle y añada flatDir{dirs 'libs'} como lo hizo a continuación

 allprojects { repositories { jcenter() flatDir { dirs 'libs' } } } 

Y ahora abra el archivo build.grdle del nivel de la aplicación y agregue el archivo .aar

  dependencies { compile(name:'cards', ext:'aar') } 

Si todo va bien verá que la entrada de la biblioteca se hace en build -> exploded-aar

También tenga en cuenta que si está importando un archivo .aar de otro proyecto que tenga dependencias, tendrá que incluirlos también en su build.gradle.

  1. Haga clic con el botón derecho del ratón en su proyecto y seleccione "Abrir configuración de módulo".

Abrir los ajustes del módulo

  1. Haga clic en el botón "+" en la parte superior izquierda para agregar un nuevo módulo.

Añadir nuevo módulo

  1. Seleccione "Importar .JAR o .AAR Package" y haga clic en el botón "Siguiente".

Importar AAR

  1. Busque el archivo AAR utilizando el botón de puntos suspensivos ("…") junto al campo "Nombre de archivo".

Buscar archivo AAR

  1. Mantenga el módulo de la aplicación seleccionado y haga clic en el panel Dependencias para agregar el nuevo módulo como una dependencia.

Panel de dependencias

  1. Utilice el botón "+" de la pantalla de dependencias y elija "Dependencia de módulo".

Añadir dependencia del módulo

  1. Elija el módulo y haga clic en "Aceptar".

Elija el módulo

Puede hacer referencia a un archivo aar desde un repositorio. Maven es una opción, pero hay una solución más simple: poner el archivo aar en su directorio de librerías y agregar un repositorio de directorios.

 repositories { mavenCentral() flatDir { dirs 'libs' } } 

A continuación, haga referencia a la biblioteca en la sección de dependencias:

 dependencies { compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' } 

Puedes ver la entrada de Min'an en el blog para más información.

El siguiente enfoque funciona con el último estudio de Android (> v0.8.x):

  • Guarde el archivo aar en la carpeta libs del módulo app (por ejemplo: <project>/<app>/libs/myaar.aar )

  • Agregue lo siguiente para build.gradle de su carpeta de módulo "app" (no su raíz de proyecto build.gradle). Tenga en cuenta el nombre en línea de compilación, es myaar @ aar no myaar.aar.

     dependencies { compile 'package.name.of.your.aar:myaar@aar' } repositories{ flatDir{ dirs 'libs' } } 
  • Haga clic en Tools -> Android -> Sync Project with Gradle Files

Actualmente la referencia a un archivo .aar local no es compatible (como lo confirma Xavier Ducrochet)

Lo que puede hacer en su lugar es configurar un repositorio local de Maven (mucho más simple de lo que suena) y hacer referencia a la .aar desde allí.

He escrito un blog que detalla cómo hacerlo funcionar aquí:

http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds

¡Acabo de tener éxito!

  1. Copia archivo mylib-0.1.aar bajo libs / carpeta

  2. Agregue estas líneas al fondo de build.gradle [debería ser app, no project]

     repositories { flatDir { dirs 'libs' } } dependencies { compile 'com.example.lib:mylib:0.1@aar' } 
  3. Hasta aquí todo bien. Aquí viene el punto más importante:

Gradle necesita acceder a la red para las dependencias a menos que el modo fuera de línea esté habilitado.

Así que tienes que estar seguro de que has habilitado la casilla de verificación Trabajo sin conexión en Estructuras de proyecto / Gradle

– OR –

Configuración de proxy configurada para acceder a la red.

Para configurar los ajustes de proxy, debe modificar el archivo gradle.properties del proyecto http y https por separado como se muestra a continuación:

 systemProp.http.proxyHost=proxy.example.com systemProp.http.proxyPort=8080 systemProp.http.proxyUser=user systemProp.http.proxyPassword=pass systemProp.http.nonProxyHosts=localhost systemProp.http.auth.ntlm.domain=example <for NT auth> systemProp.https.proxyHost=proxy.example.com systemProp.https.proxyPort=8080 systemProp.https.proxyUser=user systemProp.https.proxyPassword=pass systemProp.https.nonProxyHosts=localhost systemProp.https.auth.ntlm.domain=example <for NT auth> 

Espero que esto funcione.

Desafortunadamente ninguna de las soluciones aquí trabajó para mí (consigo dependencias no resueltas). Lo que finalmente funcionó y es la manera más fácil de IMHO es: Resalte el nombre del proyecto de Android Studio, luego Archivo -> Nuevo Módulo -> Import JAR o AAR Package. Crédito va a la solución en este post

Puede agregar varias dependencias aar con sólo unas pocas líneas de código.

Agregue un repositorio local de flatDir :

 repositories { flatDir { dirs 'libs' } } 

Agregue cada aar en el directorio libs para compile la configuración de dependencias:

 fileTree(dir: 'libs', include: '**/*.aar') .each { File file -> dependencies.add("compile", [name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name }, ext: 'aar']) } 

También he tenido este problema. Este informe de incidencia: https://code.google.com/p/android/issues/detail?id=55863 parece sugerir que la referencia directa al archivo .AAR no es compatible.

Tal vez la alternativa por ahora es definir la biblioteca actionbarsherlock como una biblioteca Gradle bajo el directorio padre de su proyecto y hacer referencia en consecuencia.

La sintaxis se define aquí http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library

En mi caso tengo algunas depencias en mi biblioteca y cuando creo un aar de ella fallé, debido a depencias perdidas, así que mi solución es agregar todas las depencias de mi lib con un archivo arr .

Así que mi nivel de proyecto build.gradle ve así:

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:2.1.2' } } allprojects { repositories { mavenCentral() //add it to be able to add depency to aar-files from libs folder in build.gradle(yoursAppModule) flatDir { dirs 'libs' } } } task clean(type: Delete) { delete rootProject.buildDir } 

build.gradle(modile app) así:

 apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId "com.example.sampleapp" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { //your project depencies ... //add lib via aar-depency compile(name: 'aarLibFileNameHere', ext: 'aar') //add all its internal depencies, as arr don't have it ... } 

Y la biblioteca build.gradle :

 apply plugin: 'com.android.library' android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') //here goes library projects dependencies, which you must include //in yours build.gradle(modile app) too ... } 

He encontrado esta solución en el rastreador de incidencias de Android: https://code.google.com/p/android/issues/detail?id=55863#c21

El truco (no una solución) es aislar los archivos .aar en un subproyecto y agregar sus libs como artefactos:

 configurations.create("default") artifacts.add("default", file('somelib.jar')) artifacts.add("default", file('someaar.aar')) 

Más información: Handling-transitive-dependencies-for-local-artefactos-jars-and-aar

He intentado toda la solución aquí, pero ninguno está funcionando, entonces me doy cuenta de que cometí un error, puse el .aar en la carpeta incorrecta, como se puede ver a continuación, pensé que debería poner en la carpeta raíz, así que creé una libs allí 1 en la imagen), pero dentro de la carpeta de la aplicación, ya hay una libs , debe poner en segundo libs , espero que esta ayuda a los que tiene el mismo problema que el mío:

Introduzca aquí la descripción de la imagen

  • Android Studio - Añadir dependencia a todos los módulos
  • Cómo eliminar correctamente una dependencia transitiva de un repo de maven con gradle
  • Android nuevo sistema de construcción (gradle) y aspectoj
  • ¿Hay una manera de personalizar los ámbitos para android studio usando gradle?
  • No se puede generar APK firmado con proguard habilitado cuando se usa Joda Time
  • Cordova Build Gradle Error al abrir / extraer archivo zip
  • Crouton depende de las bibliotecas, pero no es una biblioteca en sí
  • Android studio dice "Empty Test Suite" para AndroidTestCase
  • ¿Hay alguna manera de ejecutar un conjunto específico de pruebas en un proyecto de Android Gradle?
  • UnsupportedMethodException Android Studio 0.8.9
  • Android Studio gradle y las bibliotecas de importación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.