Cómo incluir manualmente el paquete externo de aar con el nuevo sistema de comstackción Gradle de Android

He estado experimentando con el nuevo sistema de comstackción de Android y me he encontrado con un pequeño problema. He comstackdo mi propio paquete aar de ActionBarSherlock al que he llamado ‘actionbarsherlock.aar’. Lo que estoy tratando de hacer es usar este aar para construir mi APK final. Si incluyo toda la biblioteca ActionBarSherlock como un módulo de biblioteca android en mi proyecto principal utilizando el proyecto de comstackción (‘: actionbarsherlock’), puedo comstackr sin problemas.

Pero mi problema es que quiero proporcionar esa dependencia como un paquete de archivo aar. MANUALMENTE, solo si quisiera un JAR, entonces no puedo encontrar la forma de incluirlo correctamente en mi proyecto. Intenté usar la configuración de comstackción, pero parece que no funciona. Sigo recibiendo no puedo encontrar el símbolo durante la comstackción, lo que me dice que el paquete classes.jar del paquete aar no se incluye en el classpath.

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

build.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: Entonces la respuesta es que actualmente no es compatible, este es el problema si quieres rastrearlo.

EDITAR: en la actualidad, dado que aún no se admite directamente, la mejor solución parece ser la solución propuesta por @RanWakshlak

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

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

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

luego, en la aplicación build.gradle especifique lo siguiente y haga clic en el proyecto de sincronización con los archivos de Gradle. Abra Project level build.gradle y agregue 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ás que la entrada a la biblioteca se hace en comstackción -> exploded-aar

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

  1. Haga clic derecho en su proyecto y seleccione “Abrir configuración del módulo” .

Abrir la configuración del módulo

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

Agregar nuevo módulo

  1. Seleccione “Importar .JAR o .AAR paquete” 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”.

Encuentra el 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 Dependencias

  1. Use el botón “+” de la pantalla de dependencias y seleccione “Módulo de dependencia” .

Agregar dependencia de módulo

  1. Seleccione el módulo y haga clic en “Aceptar” .

Elegir módulo

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

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

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

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

Puede consultar la publicación de blog de Min’an para obtener 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 de la aplicación (por ejemplo: //libs/myaar.aar )

  • Agregue lo siguiente a build.gradle de su carpeta del módulo “aplicación” (no a su proyecto root build.gradle). Tenga en cuenta el nombre en la línea de comstackción, es myaar @ aar not 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 no se admite hacer referencia a un archivo local .aar (como confirmó Xavier Ducrochet)

Lo que puede hacer en su lugar es configurar un repository Maven local (mucho más simple de lo que parece) y hacer referencia al .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

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

Agregar repository flatDir local:

 repositories { flatDir { dirs 'libs' } } 

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

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

¡Acabo de tener éxito!

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

  2. Agregue estas líneas a la parte inferior de build.gradle (debe ser una aplicación, no un proyecto):

     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 en busca de dependencias, a menos que el modo fuera de línea esté habilitado.

Asegúrese de haber habilitado el trabajo sin conexión a través de la checkbox en Project Structures / Gradle

– O –

Configure los ajustes del proxy para acceder a la red.

Para configurar los parámetros del proxy, debe modificar el archivo gradle.properties del proyecto y configurar http y https por separado de la siguiente manera:

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

Espero que esto funcione.

Desafortunadamente ninguna de las soluciones aquí funcionó para mí (obtengo dependencias no resueltas). Lo que finalmente funcionó y es la manera más fácil en mi humilde opinión: Resalte el nombre del proyecto de Android Studio y luego Archivo -> Nuevo módulo -> Importar JAR o paquete AAR. El crédito va a la solución en esta publicación

antes (predeterminado)

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

solo agrega '*.aar' en include array.

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

funciona bien en Android Studio 3.x.

También he tenido este problema. Este informe de problema: 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 el momento es definir la biblioteca actionbarsherlock como una biblioteca Gradle en el directorio principal de su proyecto y hacer referencia en consecuencia.

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

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

Entonces, 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í que:

 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 library 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 ... } 

Intenté todas las soluciones aquí pero ninguna funciona, 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 carpeta 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 esto ayude a aquellos que tienen el mismo problema que el mío:

enter image description here

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

Haga clic en Archivo> Nuevo> Nuevo módulo. Haga clic en Importar .JAR / .AR Paquete y luego haga clic en Siguiente. Ingrese la ubicación del archivo comstackdo AAR o JAR y luego haga clic en Finalizar.

Por favor, consulte el enlace de arriba para los próximos pasos.

Hay 2 formas:

  • Primera forma

1: abra su Android Studio y vaya a la ventana “Crear nuevo módulo” por Archivo-> Nuevo-> Nuevo módulo …

enter image description here

2: Seleccione el elemento “Importar .JAR / .AAR Package” 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') } 

que todos.

  • segunda manera

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

2 Pon tu aar lib en la carpeta aars.

3 Agregue el fragmento de código

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

en su archivo build.gradle pertenecen al módulo de la 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 puedes leer chino, puedes consultar el blog 是 是 AAR 文件 以及 开发 开发 开发 开发 Android 开发 中 使用

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 es una solución) es aislar sus 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-transit-dependence-for-local-artifacts-jars-and-aar

Solo para simplificar la respuesta

Si el archivo .aar está presente localmente, incluya
compile project(':project_directory') en dependencias de build.gradle de su proyecto.

Si el archivo .aar está presente en el control remoto, incluya compile 'com.*********.sdk:project_directory:0.0.1@aar' en las dependencias de build.gradle de su proyecto.

En mi caso solo trabajo cuando agrego “proyecto” para comstackr:

 repositories { mavenCentral() flatDir { dirs 'libs' } } dependencies { compile project('com.xx:x:1.0.0') }