¿Cómo construir una biblioteca de Android con Android Studio y Gradle?
Estoy intentando migrar un proyecto desde Eclipse pero nada de lo que he intentado está funcionando. En Eclipse tengo 3 proyectos (2 proyectos de aplicaciones de Android y 1 proyecto de biblioteca de Android). Los 2 proyectos de aplicaciones dependen del proyecto de la biblioteca. Cuando hago la exportación de Gradle obtengo 3 proyectos que no funcionan. Estoy abierto a la reestructuración del proyecto, pero no he encontrado ninguna documentación sobre cómo se debe hacer esto.
¿Hay alguna manera de hacer que los 3 proyectos que exporta Eclipse trabajen juntos? ¿Es mejor reestructurar las cosas y, de ser así, la documentación sobre cómo se debe hacer?
Actualizar
He subido todo el proyecto a GitHubhttps://github.com/respectTheCode/android-studio-library-example
Actualización 1
Basándome en las sugerencias de Padma Kumar, esto es lo que he intentado.
Crear un nuevo proyecto llamadoMyApp
Hacer clicFile > New Module
, escogerAndroid Library
y nombrarloMyLib
Hacer clicBuild > Make Project
La compilación falla con este error
Module "MyLib" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 1 error and 0 warnings in 19 sec
1 error
0 warnings
/.../MyApp/MyLib/build/bundles/debug/AndroidManifest.xml
Gradle: <manifest> does not have package attribute.
Luego agregué unpackage
atribuir al manifiesto haciéndolo
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >
Después de la construcción me sale este error
Module "MyApp" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 2 errors and 0 warnings in 13 sec
2 errors
0 warnings
/.../MyApp/MyLib/src/main/java/com/example/mylib/MainActivity.java
Gradle: package R does not exist
Gradle: package R does not exist
Añadir dependencia no parece tener ningún impacto en el error. Continuando desde arriba
Hacer clicFile > Project Structure > Modules > MyApp-MyApp
Cambiar aDependencies
LengüetaHacer clic+ > Module Dependency
y recogerMyLib
Hacer clicApply
yOK
Hacer clicBuild > Make Project
Actualización 2
Basándonos en las sugerencias de Ethan, aquí es donde obtenemos
El subproyecto 2build.gradle
Parece que tienen todas las partes correctas y la única diferencia es que la línea de plugins a continuación es laMyApp/build.gradle
.
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile files('libs/android-support-v4.jar')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
El proyecto raízbuild.gradle
Estaba vacío, así que agregué los dos proyectos como este
dependencies {
compile project(":MyLib")
compile project(":MyApp")
}
Ahora me sale este error al construir
Gradle:
FAILURE: Build failed with an exception.
* Where:
Build file '/Users/kevin/GitHub/AppPress/MyApp/build.gradle' line: 2
* What went wrong:
A problem occurred evaluating root project 'MyApp'.
> Could not find method compile() for arguments [project ':MyLib'] on root project 'MyApp'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Actualización 3
Muchas gracias Ethan por resolver esto.
Añadircompile project(':SubProjects:MyLib')
alMyLib/build.gradle
retirarcompile files('libs/android-support-v4.jar')
desde elMyLib/build.gradle
Cerrar proyecto e importar el proyecto raíz desde gradleActualización 4
A partir de 0.1.2 ahora puede incluircompile "com.android.support:support-v4:13.0.0"
en lugar decompile files('libs/android-support-v4.jar')
. Como viene de mavin ahora puede incluir esto en múltiples proyectos sin problemas.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4.2'
}
}
apply plugin: 'android'
dependencies {
compile "com.android.support:support-v4:13.0.0"
compile project(':SubProjects:MyLib')
}
Actualización 5
A partir de 0.1.3 ahora hay un botón "Proyecto de sincronización" en la barra de herramientas. Puede hacer clic en eso en lugar de reimportar su proyecto después de realizar cambios en.gradle
archivos.