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:
- play-services-base versus -basement dependances (AAR) en Android
- Adición de dependencias de Maven a Gradle en Android Studio
- ¿Qué tipo de pitfals existen para la firma de APK para Android?
- ¿Por qué no se ejecuta correctamente mi pom cuando se utiliza Android Studio / IntelliJ?
- Cómo utilizar maven en el estudio android
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
- No se puede crear una aplicación cuando se usa gradle (Android Studio) y local maven repo
- Cómo agregar biblioteca google play servicio en el estudio android con éxito
- Incluir dependencias de maven en eclipse "Ejecutar como -> Aplicación para Android" build
- ADT 22: falta de aapt.exe después de actualizar
- Descascar la aplicación de Android con perfiles de creación de Maven
- El procesamiento de AndroidAnnotations falla en IntelliJ porque R.java no se genera
- Maven desarrolla la aplicación Android - BuildConfig
- Múltiples depósitos de maven en Gradle
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