Agregar archivos .aar locales a mi compilación gradle
Así que he creado una Android-Library y compilado con éxito en un archivo. Aar que llamé aar este archivo: "projectx-sdk-1.0.0.aar"
ahora quiero que mi nuevo proyecto a depender de este aar lo que he hecho Es seguir este post: http://life.nimbco.us/referencing-local-aar-files-with-android-studios-new-gradle-based-build-system/
Pero el post me confunde ya que no obtengo el resultado deseado:
- Osx maven running tests Excepción: java.lang.OutOfMemoryError lanzado desde el UncaughtExceptionHandler en el subproceso "main"
- "Compatibilidad-v4-r4.jar" falta en Maven Repo
- ¿Cómo se integra Robolectric, Maven, ActionBarSherlock (y preferiblemente + IntelliJ) en un proyecto de Android?
- Cómo utilizar artifactoryPublish para publicar artefactos de liberación y depuración
- ¿Cuál es la mejor manera de averiguar la nueva versión está disponible para las bibliotecas externas utilizadas en el proyecto de Android Studio
El nombre del paquete del aar es: com.projectx.photosdk
y el interior del módulo 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 }
// EDIT
Los errores que estoy recibiendo:
Failed to refresh Gradle project 'SuperAwesomeApp' Could not find com.projectx.photosdk:sdk:1.0.0. Required by: SuperAwesomeApp:App:unspecified
- Error de Gradle "Atributo" xxx "ya se ha definido" en Android Studio
- play-services-base versus -basement dependances (AAR) en Android
- El edificio con maven falla
- Gradle publica en el repo específico de la Artifactory
- Cómo incluir un archivo AAR de Android en la compilación de maven
- Creación de apklibs con maven e InteliJ
- Embalaje android facebook sdk como apklib con maven
- Cómo crear una biblioteca de Android desde el código que tienen gradle dependencia?
flatDir
bloque de bloques 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. Debe tener otro bloque de repositories
nivel superior como este:
repositories { mavenCentral() flatDir { dirs 'aars' } }
He probado esto y funciona bien en mi configuración.
Con las versiones recientes de Android Studio, probado con 1.3, para usar el archivo .AAR local y no una extraída del repositorio maven / jcenter, solo vaya a Archivo> Nuevo> Nuevo módulo y elija Importar .JAR / .AAR Package .
Lo que acabará con un nuevo módulo en su proyecto que contiene muy simple archivo build.gradle que se ve más o menos así:
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 proyecto regular de compilación . Así que en un proyecto que utiliza 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') } [...]
En estos días (más de un año después de esta pregunta) con Android Studio> 1.0, la dependencia local funciona correctamente:
- El android sdk busca dependencias en un repo 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
tu 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' } } }
- Algunos documentos de gradación de referencia http://gradle.org/docs/current/userguide/artifact_management.html
- 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 / app / build.gradle.
compile 'your.package:sdk-name:1.0-SNAPSHOT'
Para la dependencia local, la siguiente compilación de gradles debe encontrar el archivo previamente desplegado y eso es todo!
En mi caso, utilizo lo anterior para dev local, pero también tengo un servidor de integración continua de Bamboo para la biblioteca que publica cada compilación en un repositorio compartido de artefactos Nexus. El código de biblioteca completo para desplegar 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 desde mi repositorio interno de Nexus, he añadido el repositorio interno de Nexus maven 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 entonces se parece a 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 como la dependencia local aún no es compatible (Planificado para ser compatible en 0.5.0 Beta)
https://code.google.com/p/android/issues/detail?id=55863
Pero la forma en que está utilizando su biblioteca en dependencia sólo funcionará si su biblioteca está en el repositorio central de maven o en el repositorio local de maven.
Refiérase a la sección Cómo usar el repositorio local de maven para utilizar .aar en las dependencias del módulo.
http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds