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


He estado experimentando con el nuevo sistema de compilación de 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 utilizar este aar para construir mi APK final. Si incluyo toda la biblioteca ActionBarSherlock como un módulo android-library a mi proyecto principal usando compile project ( ': actionbarsherlock') soy capaz de construir con éxito sin ningún problema.

Pero mi problema es que Quiero proporcionar esa dependencia como un paquete de archivos aar MANUALMENTE solo si quisiera un JAR, entonces parece que no puedo averiguar cómo incluirlo correctamente en mi proyecto. He intentado usar la configuración de compilación, pero esto no parece funcionar. Sigo consiguiendo no puede encontrar el símbolo durante compilar que me dice que las clases.jar del paquete aar no se incluye en el classpath.

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

Construir.gradle

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"
}

EDITAR: Así que la respuesta es que actualmente no está soportado, aquí está el problema si quieres rastrearlo.

EDITAR: Actualmente, como esto todavía no está soportado directamente, la mejor alternativa parece ser la solución propuesta de @RanWakshlak

EDITAR: También más simple usando la sintaxis propuesta por @VipulShah

Author: Miguel Lavigne, 2013-05-22

17 answers

Siga los pasos a continuación para que funcione ( lo he probado hasta Android Studio 2.2)

Digamos que ha mantenido el archivo aar en la carpeta libs. (supongamos que el nombre del archivo es cards.aar)

Luego, en app build.gradle especifique lo siguiente y haga clic en sincronizar proyecto con archivos de Gradle. Construir a nivel de proyecto abierto.gradle y agregue flatDir{dirs 'libs'} como lo hizo a continuación

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

Y ahora abre app level build.grdle file and add .aar file

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

Si todo va bien, verá que la entrada de la biblioteca es hecho en build- > exploded-aar

También tenga en cuenta que si está importando un.archivo aar de otro proyecto que tenga dependencias que necesitarás incluir en tu compilación.gradle, también.

 569
Author: Vipul Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-07 11:25:57
  1. Haga clic derecho en su proyecto y seleccione "Abrir configuración del módulo".

Configuración del módulo abierto

  1. Haga clic en "+" botón en la esquina superior izquierda de la ventana para agregar un nuevo módulo.

Añadir nuevo módulo

  1. Seleccione " Importar.JAR or .Paquete AAR " y haga clic en el botón "Next".

Importar AAR

  1. Encuentre el archivo AAR usando el botón de puntos suspensivos "..." junto al " Nombre del archivo" campo.

Buscar archivo AAR

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

Panel de dependencias

  1. Utilice el "+" botón de la pantalla dependencias y seleccione "Module dependency".

Añadir dependencia de módulo

  1. Seleccione el módulo y haga clic en "OK".

Elegir módulo

 188
Author: Oliver Kranz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-15 09:39:41

Puede hacer referencia a un archivo aar desde un repositorio. Maven es una opción, pero hay una solución más simple: coloque el archivo aar en su directorio libs y agregue un repositorio de directorio.

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

Luego haga referencia a la biblioteca en la sección de dependencias:

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

Usted puede comprobar hacia fuera Min'an blog post para más información.

 96
Author: Ran Wakshlak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-23 04:11:45

El siguiente enfoque funciona con la última versión de Android Studio (> v0.8.x):

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

  • Agregue lo siguiente para construir.gradle de la carpeta del módulo " app " (no de la compilación raíz de tu proyecto.gradle). Tenga en cuenta el nombre en la 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 Tools -> Android -> Sync Project with Gradle Files

 41
Author: ashoke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-09 19:58:11

Actualmente haciendo referencia a un local .el archivo aar no es compatible (según lo confirmado por Xavier Ducrochet)

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

He escrito un blogpost detallando cómo hacerlo funcionar aquí:

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

 20
Author: Artiom Chilaru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-27 12:34:08

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

Añadir local flatDir repositorio:

repositories {
    flatDir {
        dirs 'libs'
    }
} 

Agregue cada aar en el directorio libs a compile 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'])
}
 16
Author: mixel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-27 19:52:38

¡Acabo de tener éxito!

  1. Copie el mylib-0.1.aar archivo en la carpeta libs/

  2. Agregue estas líneas al final de build.gradle (debe ser app, no project):

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

Gradle necesita acceder a la red para las dependencias a menos que el modo sin conexión esté habilitado.

Asegúrese de que ha habilitado El trabajo sin conexión a través del Casilla de verificación en Estructuras de proyecto / Gradle

OR O {

Configure la configuración del proxy para acceder a la red.

Para configurar la configuración del proxy tienes que modificar el gradle del proyecto.properties archivo, configurando 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.

 16
Author: Orhun D.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-22 22:40:44

Desafortunadamente ninguna de las soluciones aquí funcionó para mí (tengo dependencias sin resolver). Lo que finalmente funcionó y es la forma más fácil en Mi humilde opinión es: Resaltar el nombre del proyecto desde Android Studio y luego Archivo - > Nuevo módulo - > Importar paquete JAR o AAR. El crédito va a la solución en este post

 13
Author: Nonos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-08 15:44:57

Antes(por defecto)

implementation fileTree(include: ['*.jar'], dir: 'libs')

Simplemente agregue '*.aar' en include array.

implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')

Funciona bien en Android Studio 3.x.

 9
Author: susemi99,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-05 09:00:33

También he tenido este problema. This issue report: https://code.google.com/p/android/issues/detail?id=55863 parece sugerir que haciendo referencia directa a la .El archivo AAR no es compatible.

Quizás la alternativa por ahora es definir la biblioteca actionbarsherlock como una biblioteca de Gradle bajo el directorio padre de tu proyecto y referenciar en consecuencia.

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

 6
Author: manyobject,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-29 23:07:34

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

Así que mi nivel de proyecto build.gradle se 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) entonces:

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 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
    ...
}
 3
Author: mohax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-26 18:12:10

Probé todas las soluciones aquí pero ninguna funciona, luego 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 carpeta libs allí (1 en la imagen), pero dentro de la carpeta de la aplicación, ya hay un libs, debe poner en segundo libs, espero que esto ayude a aquellos que tienen el mismo problema que el mío:

introduzca la descripción de la imagen aquí

 3
Author: GMsoF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-01 02:59:49

La forma estándar de importar un archivo AAR en una aplicación se da en https://developer.android.com/studio/projects/android-library.html#AddDependency

Haga clic en Archivo > Nuevo > Nuevo Módulo. Haz clic en Importar .FRASCO/.AAR Paquete a continuación, haga clic en Siguiente. Introduzca la ubicación del archivo AAR o JAR compilado y haga clic en Finalizar.

Por favor, consulte el enlace anterior para los siguientes pasos.

 3
Author: garnet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-29 14:49:10

Hay 2 maneras:

  • Primera vía

1:Abre tu Android Studio y navega a la ventana "Crear Nuevo módulo"por Archivo->Nuevo->Nuevo módulo ...

introduzca la descripción de la imagen aquí

2: Seleccione la opción " Importar.FRASCO/.AAR Paquete " elemento y haga clic en el botón siguiente

3:Agregue dependencia en el archivo build.gradle que pertenece a su app Modlue.

dependencies {
    ...

    implementation project(path: ':your aar lib name')

}

Eso es todo.

  • segunda vía

1 Crear una carpeta en el directorio libs ,como aars.

2 Pon tu aar lib en la carpeta aars.

3 Añade el fragmento de código

repositories { flatDir { dirs 'libs/aars' } }

En su archivo build.gradle pertenecen al módulo de aplicación.

4 Agregue dependencia en el archivo build.gradle que pertenece a su app Modlue.

dependencies { ... compile(name:'your aar lib name', ext:'aar') }

Que todos

Si usted puede leer Chino, usted puede verificar el blog 什么是AAR文件以及如何在Android开发中使用

 3
Author: shusheng007,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-27 01:50:54

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

El truco (no una solución) es aislar su .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-artifacts-jars-and-aar

 2
Author: jiparis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-14 15:26:02

Solo para simplificar la respuesta

Si .el archivo aar está presente localmente y luego incluye
compile project(':project_directory') en dependencias de build.gradle de tu proyecto.

Si .aar archivo presente en el control remoto a continuación, incluir compile 'com.*********.sdk:project_directory:0.0.1@aar' en dependencias de compilación.gradle de tu proyecto.

 2
Author: anupam_kamble,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-09 08:53:29

En mi caso solo trabajo cuando agrego "proyecto" a compilar:

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


dependencies {
   compile project('com.x.x:x:1.0.0')
}
 0
Author: josedlujan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-20 20:21:19