studio librerias library importar generar create crear agregar android maven gradle android-studio aar

librerias - importar jar en android studio



Agregar archivos.aar locales a mi compilaciĆ³n gradle (5)

Con la versión más nueva de Gradle, ahora hay una forma ligeramente actualizada de hacer lo que Stan sugirió (ver maving publishing )

apply plugin: ''maven-publish'' publishing { publications { aar(MavenPublication) { groupId ''org.your-group-id'' artifactId ''your-artifact-id'' version ''x.x.x'' // Tell maven to prepare the generated "*.aar" file for publishing artifact("$buildDir/outputs/aar/${project.getName()}-release.aar") } } repositories { maven { url("file:" + System.getenv("HOME") + "/.m2/repository") } } }

Así que he creado una biblioteca de Android y la compilé con éxito en un archivo .aar que llamé a este archivo aar: "projectx-sdk-1.0.0.aar" ahora quiero que mi nuevo proyecto dependa de este aar así que lo que hice es seguir esta publicación: http://life.nimbco.us/referencing-local-aar-files-with-android-studios-new-gradle-based-build-system/

Pero la publicación me confunde ya que no obtengo el resultado deseado:

El nombre del paquete del aar es: com.projectx.photosdk y el módulo dentro se llama sdk

aquí está mi estructura de proyecto actual:

|-SuperAwesomeApp |--.idea |--gradle |--App |---aars |----projectx-sdk-1.0.0.aar |---build |---jars |---src |---build.gradle

Y él es mi archivo de compilación gradle:

apply plugin: ''android'' buildscript { repositories { mavenCentral() flatDir { dirs ''aars'' } } } android { compileSdkVersion 19 buildToolsVersion "19.0.1" defaultConfig { minSdkVersion 11 targetSdkVersion 19 versionCode 1 versionName "1.0" } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt'' } } } dependencies { compile ''com.android.support:gridlayout-v7:19.0.1'' compile ''com.android.support:support-v4:19.0.1'' compile ''com.android.support:appcompat-v7:19.0.1'' compile ''com.projectx.photosdk:sdk:1.0.0@aar'' // compile files( ''aars/sdk-1.0.0.aar'' ) // Does not work either }

// EDITAR

Los errores que obtengo:

Failed to refresh Gradle project ''SuperAwesomeApp'' Could not find com.projectx.photosdk:sdk:1.0.0. Required by: SuperAwesomeApp:App:unspecified


Con las versiones recientes de Android Studio, probado con 1.3, para usar el archivo .AAR local y no uno extraído del repositorio de maven / jcenter, solo vaya a Archivo> Nuevo> Nuevo módulo y elija Importar .JAR / .AAR Paquete .

Lo que acabará siendo es un nuevo módulo en su proyecto que contiene un archivo build.gradle muy simple que se parece más o menos a esto:

configurations.create("default") artifacts.add("default", file(''this-is-yours-package-in-aar-format.aar''))

Por supuesto, otros proyectos tienen que hacer referencia a este nuevo módulo con la directiva de compilación de proyectos . Entonces, en un proyecto que usa este nuevo módulo que es simple, un archivo .aar local tiene esto en su build.gradle

[...] dependencies { compile fileTree(dir: ''libs'', include: [''*.jar'']) testCompile ''junit:junit:4.12'' ompile ''com.android.support:appcompat-v7:23.1.0'' compile ''com.android.support:design:23.1.0'' [...] compile project('':name-of-module-created-via-new-module-option-described-above'') } [...]


Estos días (más de 1 año después de esta pregunta) con Android Studio> 1.0, la dependencia local funciona correctamente:

  • El SDK de Android busca dependencias en un repositorio local predeterminado de: $ANDROID_HOME/extras/android/m2repository/
  • En un proyecto de biblioteca local puede publicar el aar en este directorio. Aquí hay un fragmento que se puede agregar al archivo build.gradle su módulo (por ejemplo: sdk / build.gradle)

    apply plugin: ''maven'' uploadArchives { repositories { mavenDeployer { repository(url: "file://localhost" + System.getenv("ANDROID_HOME") + "/extras/android/m2repository/") pom.version = ''1.0-SNAPSHOT'' pom.groupId = ''your.package'' pom.artifactId = ''sdk-name'' } } }

  • En su proyecto de biblioteca, ejecute ./gradlew uploadArchives para publicar el aar en ese directorio
  • En el proyecto de aplicación en el que desea utilizar la biblioteca, agregue la dependencia a su proyecto / aplicación / build.gradle. compile ''your.package:sdk-name:1.0-SNAPSHOT''

Para la dependencia local, la próxima compilación de gradle debería encontrar el archivo desplegado anteriormente ¡y eso es todo!

En mi caso, uso lo anterior para el desarrollador local, pero también tengo un servidor de integración continuo de Bamboo para la Biblioteca que publica cada compilación en un repositorio de artefactos Nexus compartido. El código de biblioteca completo para implementar el artefacto se convierte en:

uploadArchives { repositories { mavenDeployer { if (System.getenv("BAMBOO_BUILDNUMBER") != null) { // Deploy to shared repository repository(url: "http://internal-nexus.url/path/") { authentication(userName: "user", password: "****") } pom.version = System.getenv("BAMBOO_BUILDNUMBER") } else { // Deploy to local Android sdk m2repository repository(url: "file://localhost" + System.getenv("ANDROID_HOME") + "/extras/android/m2repository/") pom.version = ''1.0-SNAPSHOT'' } pom.groupId = ''your.package'' pom.artifactId = ''sdk-name'' } } }

Con el fin de decirle a las aplicaciones que descarguen de mi repositorio interno de Nexus, agregué el repositorio Nexus maven interno justo encima de jcenter () en ambos bloques de "repositorios" en el proyecto / build.gradle

repositories { maven { url "http://internal-nexus.url/path/" } jcenter() }

Y la dependencia de la aplicación parece compile ''your.package:sdk-name:45'' Cuando actualizo la versión 45 a 46 es cuando mi proyecto tomará el nuevo artefacto del servidor Nexus.


Parece agregar archivos .aar, ya que la dependencia local aún no es compatible (está planificada para ser admitida en 0.5.0 Beta)

https://code.google.com/p/android/issues/detail?id=55863

Pero la forma en que usa su biblioteca en dependencia solo funcionará si su biblioteca está en el repositorio maven central o en el repositorio Maven local.

Remítalo a Cómo usar el repositorio maven local para usar .aar en dependencias de módulos.

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


flatDir tu bloque flatDir en el bloque de repostories incorrecto. El bloque de repositories dentro de buildscript le dice a Gradle dónde encontrar el complemento Android-Gradle, pero no el resto de las dependencias. Necesita tener otro bloque de repositories nivel superior como este:

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

Probé esto y funciona bien en mi configuración.