Estoy tratando de migrar un proyecto desde Eclipse, pero nada de lo que he intentado funciona. En Eclipse tengo 3 proyectos (2 proyectos de aplicaciones de Android y 1 proyecto de biblioteca de Android). Los 2 proyectos de la aplicación dependen del proyecto de la biblioteca. Cuando hago la exportación de Gradle obtengo 3 proyectos que no funcionan. Estoy abierto a reestructurar el proyecto, pero no he encontrado ninguna documentación sobre cómo debería hacerse.
¿Hay alguna manera de hacer que los 3 proyectos que Eclipse exporta trabajen juntos? ¿Estoy mejor reestructurando las cosas y, si es así, hay documentación sobre cómo debería hacerse?
Actualizar
He subido todo el proyecto a GitHub https://github.com/respectTheCode/android-studio-library-example
Actualización 1
Basado en las sugerencias de Padma Kumar, esto es lo que he intentado.
- Crea un nuevo proyecto llamado
MyApp
- Haga clic
File > New Module
, elijaAndroid Library
y nómbreloMyLib
- Hacer clic
Build > 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é un package
atributo al manifiesto haciéndolo
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >
Después de construir 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
Agregar dependencia no parece tener ningún impacto en el error. Continuando desde arriba
- Hacer clic
File > Project Structure > Modules > MyApp-MyApp
- Cambiar a
Dependencies
pestaña - Haga clic
+ > Module Dependency
y escojaMyLib
- Haga clic
Apply
yOK
- Hacer clic
Build > Make Project
Actualización 2
Basado en las sugerencias de Ethan, aquí es donde obtenemos
El subproyecto 2 build.gradle
parece tener todas las partes correctas y la única diferencia es que la línea de complemento que se encuentra debajo es MyApp/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íz build.gradle
estaba vacío, así que agregué dos proyectos como este
dependencies {
compile project(":MyLib")
compile project(":MyApp")
}
Ahora recibo 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ñadir
compile project(':SubProjects:MyLib')
a laMyLib/build.gradle
- Eliminar
compile files('libs/android-support-v4.jar')
de laMyLib/build.gradle
- Cierre el proyecto e importe el proyecto raíz desde gradle
Actualización 4
A partir de 0.1.2 ahora puede incluir en compile "com.android.support:support-v4:13.0.0"
lugar de compile files('libs/android-support-v4.jar')
. Dado que ahora proviene de mavin, 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 la 0.1.3 ahora hay un botón "Sincronizar proyecto" en la barra de herramientas. Puede hacer clic en eso en lugar de volver a importar su proyecto después de realizar cambios en los .gradle
archivos.
fuente
compile 'com.google.android:support-v4:r6'
a cada uno de sus proyectos y al complemento Maven (como en el ejemplo build.gradle a continuación) en lugar de lacompile files('libs/android-support-v4.jar')
gradle, se dará cuenta de que ambos proyectos incluyen lo mismo y solo lo incluirán una vez.Respuestas:
Nota : Esta respuesta es una respuesta pura de Gradle, la uso en IntelliJ regularmente, pero no sé cómo es la integración con Android Studio. Creo en saber lo que me está sucediendo, así que así es como uso Gradle y Android.
TL; DR Ejemplo completo: https://github.com/ethankhall/driving-time-tracker/
Descargo de responsabilidad : Este es un proyecto en el que estoy / estaba trabajando.
Gradle tiene una estructura definida (que puedes cambiar, el enlace en la parte inferior te dice cómo) que es muy similar a Maven si alguna vez la has usado.
Si solo tiene un proyecto, el archivo settings.gradle no es necesario. Sin embargo, si desea agregar más proyectos, lo necesitamos.
Ahora echemos un vistazo a ese archivo build.gradle. Vas a necesitar esto en él (para agregar las herramientas de Android)
build.gradle
Ahora tenemos que decirle a Gradle sobre algunas de las partes de Android. Es muy simple Una básica (que funciona en la mayoría de mis casos) se parece a la siguiente. Tengo un comentario en este bloque, me permitirá especificar el nombre y el código de la versión al generar el APK.
build.gradle
Algo que vamos a querer agregar, para ayudar a cualquiera que aún no haya visto la luz de Gradle, una forma de que puedan usar el proyecto sin instalarlo.
build.gradle
Así que ahora tenemos un proyecto para construir. Ahora vamos a agregar los otros. Los puse en un directorio, tal vez lo llamo deps, o subproyectos. Realmente no importa, pero necesitará saber dónde lo coloca. Para decirle a Gradle dónde están los proyectos, deberá agregarlos a settings.gradle.
Estructura de directorios:
settings.gradle:
Lo último que debe asegurarse es el subProjects / reallyCoolProject1 / build.gradle tiene en
apply plugin: "android-library"
lugar deapply plugin: "android"
.Al igual que todos los proyectos de Gradle (y Maven), ahora debemos informar al proyecto raíz sobre su dependencia. Esto también puede incluir las dependencias normales de Java que desee.
build.gradle
Sé que esto parece muchos pasos, pero son bastante fáciles una vez que lo haces una o dos veces. De esta manera también le permitirá construir en un servidor CI suponiendo que tenga el SDK de Android instalado allí.
Nota al margen de NDK: si va a utilizar el NDK, necesitará algo como lo que se indica a continuación. El archivo build.gradle de ejemplo se puede encontrar aquí: https://gist.github.com/khernyo/4226923
build.gradle
Fuentes:
fuente
Acabo de tener problemas muy similares con las construcciones de gradle / agregando la biblioteca .jar. Lo hice funcionar mediante una combinación de:
compile fileTree(dir: 'libs', include: '*.jar')}
PERO lo que es más importante y molesto, solo unas horas después de que lo puse a funcionar, Android Studio acaba de lanzar 0.3.7, que afirma haber resuelto muchos problemas básicos como agregar bibliotecas .jar
http://tools.android.com/recent
Espero que esto ayude a la gente!
fuente
Aquí está mi solución para usuarios de Mac. Creo que también funciona para Windows:
Primero ve a la barra de herramientas de Android Studio
Build> Make Project (mientras están conectados, dejen que descarguen los archivos) y luego
Build> Compile Module "aquí se muestra el nombre de su aplicación" (todavía en línea, deje que los archivos se
descarguen y finalicen) y luego
Ejecute su aplicación que está hecha, iniciará su emulador y configúrelo, luego ejecútelo.
¡¡¡Eso es!!! Feliz codificación chicos !!!!!!!
fuente
Gradle Build Tools 2.2.0+ - Todo simplemente funciona
Esta es la forma correcta de hacerlo.
Al tratar de evitar la experimentación y, francamente, harto del NDK y todos sus hackers, estoy feliz de que salió 2.2.x de Gradle Build Tools y ahora simplemente funciona. La clave es la
externalNativeBuild
y señalandondkBuild
argumento de ruta a unaAndroid.mk
o cambiondkBuild
acmake
y punto el argumento de ruta a unCMakeLists.txt
script de construcción.Para obtener más detalles, consulte la página de Google sobre cómo agregar código nativo .
Después de que esto esté configurado correctamente, puede
./gradlew installDebug
y listo. También deberá tener en cuenta que el NDK se está moviendo a clang ya que gcc ahora está en desuso en el NDK de Android.fuente