lunes, 28 de julio de 2014

Intellij IDEA: Mirando más allá del Eclipse y el Emulador clásico

Vamos a enumerar las ventajas de la versión OpenSource, llamada ComunityEdition, y que trae soporte para Android.
Alla por el 2004, cuando empezaba a trabajar como desarrollador de Java en mi primer equipo, la mayor parte de mis compañeros utilizaban Eclipse, excepto el lead del equipo. Ahí fue dónde oí hablar de IntelliJ por primera vez y mi curiosidad se despertó. Tenía que probar las maravillas que hablaba de él.
Así que me puse manos a la obra y no sin algún que otro problemita (no sólo técnico), conseguí que todo funcionara a la perfección para mi 1er Aplicacion Java EE.
Pasaron los años, y me fui migrando de tecnologia, arranco con Android Mobile. Al principio, utilizaba Eclipse con el ADT Plugin. Pero, como muchas veces se dice, "volvì al primer amor": IntelljIdea.
Y esta vez fue para siempre. Tanto, que ahora no quiero utilizar ningún otro editor. IntelliJ me resulta mucho más rápido que Eclipse, es mucho más cómodo para usar shortcuts (y se aprenden muy fácilmente gracias a un plugin)
lo cuál hace que mi trabajo sea mucho más rápido y eficiente, es genial para refactorizar (te hace todo el trabajo sucio sin que tengas que gastar una gota de sudor), tiene un maravilloso autocomplete que
te lee la mente y por último, y no menos importante, tiene millones de plugin que se ajustan a cualquier cosa que se te ocurra que puedes necesitar.

La única contra, es que es una IDE de pago (la versión Ultimate) pero tiene una versión gratuita Community, que funciona bastante bien aunque soporta menos lenguajes. Como nosotros nos vamos a enfoncar en Android, no tendremos problema en utilizar la version Community.
Si tienen curiosidad, puedes probar la versión Ultimate durante 30 días sin costo alguno (pero no lo hagan, porque la terminarán pagando a esa licencia!).
Para los màs avanzandos en el desarrollo de Android, la otra contra, es que no incluye el MAT o Memory Analizer que sí incluye Eclipse. Por lo que si te quieres divertir buscando posibles leaks,tendrás que descargarte la versión standalone.

Ahora, les cuento que en Junio del 2013 se tomò la decisión desde Google de empezar a utilizar IntelliJ como el editor preferido para Android, y asì nace el "Android Studio", que es una versión de IntelliJ (la 13) ya estable desde la web oficial de IntelliJ sin ningún problema.
Y como yo en su día, seguramente habrá algún desarrollador al que le haya picado la curiosidad y esté comenzando a migrar de Eclipse a IntelliJ.
A continuación les brindarè una serie de consejos que a mi me sirvieron en su día y que tras tanto golpearme la cabeza contra muros hicieron que todo funcionara a la perfección.

1. Dónde están los proyectos? Y mi workspace?

En IntelliJ, se utiliza otra estructura para lo que conocemos como proyecto y workspace en Eclipse. Una vez iniciado el editor, la primera pantalla que nos va a mostrar es la de elección de proyecto. Si hacemos una analogía con Eclipse, se puede decir, que este será nuestro workspace. En una ventana de IntelliJ, sólo podremos tener un proyecto abierto al mismo tiempo.

Una vez abierto el proyecto, este estará compuesto por módulos (que podrían entenderse como los proyectos en Eclipse). Un módulo puede ser nuestra aplicación, como los fuentes de librerías que incluyamos. O si estamos desarrollando la app aplicando dependency injection, pues sería cada uno de los módulos utilizados por ella, que funcionan de forma independiente.

También podemos crear un módulo con los Unit Tests (no veremos ahora la configuración de las librerías de mock y instrumentación).

Si importas un proyecto desde Eclipse, verás que tendrás que crear un proyecto (será el proyecto principal de tu app) y luego ir importando el resto de dependencias como módulos (por ejemplo, si estás utilizando la API de Facebook, tendrás que incluirla como un módulo).


2. Ya importe todos los módulos, pero al ejecutar mi app no encuentra las dependencias, ¿que pasa ahora?

Bueno, esta es una de las pocas cosas que podrías extrañar de Eclipse. Una vez que tenemos un proyecto o una librería en el mismo path que nuestro proyecto, no hay que hacer nada (excepto importarlo en código) para que entienda que tiene que utilizarlos para construir nuestra app. Sin embargo, en IntelliJ, tendrás que configurar las dependencias que haya entre los diferentes módulos.

Para esto, puedes modificar la estructura de proyecto o Project Structure. Selecciona Module a la izquierda y podrás configurar el orden en que quieres que se compile tu app y podrás agregar las dependencias necesarias.

Dependencias en IntelliJ

Es importante que cuando agreguemos un nuevo módulo, abramos su ventana de configuración (Facet Android en el caso de apps de Android) y seleccionemos “Library module” (en el caso de que sea una dependencia de nuestro módulo principal).  

3. El orden de los factores sí que altera el producto

Cuando configures las dependencias de tu proyecto, ten en cuenta que el orden importa, por lo que ordena las dependencias de la manera que quieras que se compilen. Por ejemplo, cuando configures junit4 para realizar unit tests, tenes que poner primero la librería de tests antes que la libería de Android, ya que Android utiliza junit3 y se configuraría este primero y te daría errores si estás utilizando nuevos métodos o clases no incluidos en esta versión.

4. Mantengan las librerías ordenadas

En la pantalla de estructura de proyecto, vemos que hay una opción llamada Libraries. Aca pueden crear un gran paquete que incluya todas las librerías que quieres utilizar (y luego desde la ventana de dependencias sólo tienes que llamar a dicha librería, por que te facilita bastante la vida) o crear pequeños paquetitos de librerías según su objetivo (lo cuál hace que tu proyecto quede mejor ordenado y es más fácil reutilizar estos paquetitos si los necesitas para otro módulo).
5. Shortcuts!!
Es fantástico trabajar utilizando sólo el teclado, creo que ir a agarrar el mouse te consume unos preciados segundos que podrías aprovechar codificando o rascandote la cabeza con cara de preocupación. En IntelliJ todo gira entorno a los comandos de teclado.

Mi consejo es que te descargues uno de estos maravillosos wallpapers con todos los comandos de teclado de IntelliJ IDEA, que te servirá a modo de reminder cuando lo necesites.
Mi segundo consejo es que instales este plugin, que te va repitiendo los shortcuts de cada acción que realices en IntelliJ.
Y el último consejo, pero el más importante de todos es que no te olvides nunca de este comando:  ctrl + shift + A (Windows y Linux). Te salvará la vida cuando lo necesites, ya que abre un buscador de comandos/funciones del editor.
6. Por qué todo el mundo me mira mal y he sufrido par de intentos de asesinato?
Como early adopter, muchas veces vas a ver que no todo el mundo estará de acuerdo en utilizar el mismo editor. Esto puede traer ciertos problemas: se pasarán el día diciendo que su Eclipse es mejor y destacaran cada error a que utilizas un editor distinto. No pasa nada, vos ya sabes que estás utilizando la mejor opción posible así que no les hagas caso.

Un problema más importante es el formatter utilizado para formatear el código. IntelliJ formatea el código de una manera bastante diferente a Eclipse. Lo que cuando trabajas solo no importa, pero cuando estás trabajando en un proyecto en equipo, utilizando algún sistema de repositorio, puede terminar en lo que se conoce como “merge hells”.

Para eso, existe en IntelliJ un plugin que nos permite utilizar el formatter de Eclipse, y lo puedes descargar desde internet. Para todo lo demás, paciencia ;)

Funciona bastante bien pero tiene un pequeño problema: no formatea los resources XML de Android. Pero bueno, al menos te ahorrará más de un disgusto!

Android Studio

Que es? Qué ventajas tiene? cómo lo vamos a usar?
Llevo años programando bajo distintos lenguajes y utilizando el Eclipse, es màs, durante mucho tiempo fui defendiendolo frente a todos las demás IDES.
Al comenzar allá por el 2004 yo usaba NetBeans y me gustaba mucho, pero raiz de empezar con Android a mediados del 2010, me pase incondicionalmente a Eclipse.
Desde Junio del 2013 que salió a la luz Android Studio, me he estado planteando si habría alguna razón que yo lo estuviese usando, y si sería más una cosa para los nuevos, o también lo estarían adoptando los que ya trabajan con Eclipse. En cualquier caso no le encontraba mayores beneficios y sí algún inconveniente, como por ejemplo:
a) Cambiar siempre genera conflictos
b) No es eclipse, y muchisimos ejemplos y cursos estàn basados en Eclipse.

Pero ahora, unos meses después, debo reconocer que me he pasado al lado oscuro. Mi último proyecto está ya empezado en Android Studio, me estoy entusiasmado, y todo apunta a que será el entorno que use desde ahora.
En breve será lo que más y tal vez lo único que el equipo de Android recomiende, desde el sitio Oficial de Developers
Está basado en IntelliJ IDEA, uno de los IDE para java de primer nivel (entre los mejores, a mi criterio mucho mejor que Eclipse, Netbeans, y Oracle JDeveloper), y es una IDE excelente.
Tiene muchas cosas buenas, como lo es el tema del diseño de las pantallas de la Aplicación:
Y lo que más me gusta es la nueva forma de construir los apk. Más serio, mas versatil, mas potente, mas actual, y mas parecido a un proyecto clásico en java.
Y es que Android estudio utiliza Gradle. Las ventajas son claras:
a) facilita muchísimo reusar código y recursos
b) Facilita configurar, extender y personalizar el proceso.
c) Facilita la distribución del código y por tanto trabajar en equipos
d) Gestiona las dependencias de una forma cómoda y potente (esta basado en Maven)
e) Nos permite compilar desde linea de comandos, lo cual nos puede salvar en una máquina en la que no tenemos todo el entorno montado
f) Y lo más importante: Hace increíblemente fácil crear distintas versiones de la aplicación, por ejemplo para hacer una distribución multi-apk, para distintos dispositivos, o una versión gratuita y otra paga, o una versión de prueba que carga distintos recursos, apunta a unos webservices distintos, usa estadísticas distintas, etc.

En definitiva, estamos ante una herramienta con un potencial mucho mayor especialmente de cara a entornos empresariales.

Si ya tenes tu proyecto en Eclipse, y queres pasarlo a Android Studio, es muy sencillo:
1)Exportar desde eclipse
Actualizar el plugin ADT a la ultima versión (necesitas al menos la 22).
a-En Eclipse, selecciona File > Export.
b-Abrir la parte de Android, veran que aparece una nueva opción,  "Generate Gradle build files". Seleccionen esa.
c-Elige tu proyecto y pulsa Finish

Con esto ya está. como Android Studio trabaja con Gradle, al crear los archivos de gradle, ya tenemos todo lo necesario para importar el proyecto dentro de Android Studio, o incluso para construirlo fuera de cualquier entorno si hiciese falta.

2)Importarlo a Android Studio
a-Cerrar todos los proyectos
b-Click en  Import Project.
c-Busca el proyecto en la ruta normal del workspace de Eclipse
d-Dentro de la carpeta del proyecto, selecciona el archivo  build.gradle y pulsa OK.
e-En el siguiente dialogo, selecciona "Use gradle wrapper" y pulsa OK. (no se preocupen de las demás opciones.)

Despues a ponerse a programar, buscar màs informacion en la web, y en lo personal les recomiendo leerse los consejos básicos que nos da la gente de android developer oficial en la siguiente web: http://developer.android.com/sdk/installing/studio-tips.html.

Algo que puede jugarle en contra a esta IDE es que aùn està en continuo desarrollo, la versión actual es la v0.8

Ahora bien, si están empezando a desarrollar en Android, el modo màs rápido y "menos doloroso" es Eclipse, ya que es mejor y te explico porque, el plugin ADT ya es un producto final y se ha revisado miles de veces por lo que tiene muy pocos bugs, además tienes muchisima más documentación, la mayoría de los tutoriales explican con Eclipse.

Algo que tienes que tener en cuenta, es que agregar una librería en Eclipse es un dolor de cabeza. En cambio con Android Studio es más fácil, pero no te preocupes las librerías por el momento no las vas a usar. Otra de las cosas buenas de AStudio es el editor de layouts, el cual cambia dinámicamente al cambiar algún valor.

No hay comentarios:

Publicar un comentario