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'' } } }
- algunos documentos de gradle 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 / 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.