Android: De Eclipse a Android Studio

studio_splashCuando salió Android Studio pensé que por fin Google se había puesto las pilas para hacer un entorno de desarrollo a la altura del de iOS, pero no, solo era un desarrollo basado en el Intellij Idea, que es más amigable que el Eclipse, pero sigue sin estar a la altura del xCode.

He empezado a pasar todas las apps de Android del Eclipse al Android Studio, para ver si por fin me libro de ese lento mastodonte llamado Eclipse. La verdad es que la importación es bastante sencilla, al importar Android Studio recrea la estructura de directorios, las dependencias, etc… También crea todos los ficheros nuevos que suponen el cambio de compilador, de Maven a Gradle.

Pero como siempre, existen muchos detalles a tener en cuenta para que todo funcione. Casi todo tiene que ver con el fichero “build.gradle”. Hay dos ficheros de ese tipo, sería el que está dentro de la aplicación. Al ir pasando los proyectos, me encontré con esto: (estoy usando el Android Studio 0.8.4)

Proyectos que usan librerías externas

Android Studio admite las librerías como ficheros JAR, como librerías AAR, o como proyectos librería sin compilar. En el “build.gradle” aparecen en el apartado “dependencies”. Al importar, las librerías mas conocidas te las pasa como AAR externa; por ejemplo si estas usando la Actionbar Sherlock como librería local, te convierte la dependencia en una AAR externa:

'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'

El resto de librerías te las copia a la carpeta del proyecto ya con su adaptación a Gradle. Si solo tienes instalado un SDK, a estas librerías tendrás que cambiarles su propio build.gradle y ponerles el “compileSdkVersion” que tengas instalado.
¿Que pasa si no quieres que esas librerías se copien a la carpeta del proyecto?, quieres mantenerlas en sus carpetas originales para que sean usadas por varias aplicaciones. Hacer esto es sencillo, lo primero, la librería tiene que tener adaptación a Gradle, un truco es copiar los ficheros de la librería que el importador te ha metido en la carpeta del proyecto a la carpeta original de la librería, ya que es exactamente lo mismo pero con la adaptación a Gradle, que ya podrás usar en otros proyectos con Gradle. Y a continuación, modificar el fichero settings.gradle, donde figuran las librerías externas que usa el proyecto, pero no sus rutas originales. Hay que poner, por ejemplo:

include ':zBarScannerLibrary'
project(':zBarScannerLibrary').projectDir = new File(settingsDir, '../../Android resources/ZBarScannerLibrary/library')
include ':com_ribbonmenu'
project(':com_ribbonmenu').projectDir = new File(settingsDir, '../../Android resources/RibbonMenu-master/com_ribbonmenu')

Una de las características de Gradle es el uso del “Manifest Merger Tool”, que crea un solo fichero Manifest con todos los proyectos participantes en la app, el principal y las librerías sin compilar. Este proceso puede dar errores de elementos repetidos, sobre todo iconos, estilos y demás. Para solventarlo, en el Manifest del proyecto principal, se ha de poner, en el tag “Manifest”:

xmlns:tools="http://schemas.android.com/tools"

y en el tag “application”

tools:replace="android:icon,android:theme"

donde se mencionarán los elementos repetidos que den error.

Proyectos que usan los mapas de Google antiguos v1

Aquí hay que cambiar manualmente el “compileSdkVersion”, ya que el importador no lo hace correctamente. Del numero (por ejemplo 19) a

'Google Inc.:Google APIs:19'

Proyectos que usan la librería de soporte de Android

Suele dar un error si no se especifica la revisión. Por ejemplo:
Hay que poner

‘com.android.support:support-v4:20.+’

en vez de

'com.android.support:support-v4:+'

Proyectos de Phonegap

Los anteriores a la versión 3 de Phonegap se importan sin problemas.

Para los de la versión 3, si se quiere mantener la estructura de directorios original generada por Node.js, hay que hacer un proceso un poco distinto que se explica aquí. El único problema es que no se puede usar Gradle, por lo que se pierden las ventajas que ofrece. Además algunas librerías como la Google Play Services no se vinculan correctamente, hay que hacerlo manualmente.


El cambio de Eclipse a Android Studio merece la pena, no es un cambio radical, pero el entorno de desarrollo es mas amigable, menos pesado, y con varias características interesantes, muchas gracias al Gradle, como los “product flavors”, que se asemejan a los products del xCode; permiten dentro del mismo proyecto hacer diferentes apks con distintos iconos, assets, trozos de código, app ID, resources, etc.
Eso si, los simuladores de distintos dispositivos son los mismos que el Eclipse, o sea, malos y lentos.

2 comentarios
  • Juan Carlo
    31-08-2014 21:53
    En Phonegap 3, si la app tiene anuncios Admob, no hay manera de compilarla con Android Studio
  • lemo
    01-09-2014 13:19
    A mi me pasa lo mismo del comentario anterior. ¿qué puede ser?
Deja un comentario
He leido y acepto la Política de Privacidad

Los comentarios enviados por cada usuario serán siempre visibles en el post correspondiente, y no serán utilizados para ningún otro fin. El usuario tiene derecho a acceder, rectificar y suprimir dichos comentarios, tal como se refleja en nuestra Política de Privacidad