PDA

Ver la Versión Completa : Migrando a Android Studio


mocelet
12/02/15, 12:50:15
Resumo mi primer intento de migrar de Eclipse a Android Studio: dos horas perdidas, la impresión de que es muy potente y que la integración con gradle está algo verde.

Instalo el Android Studio sin SDK en Windows 8.1 64 bits, me dice que necesita el JDK 7 64 bits, instalo, detecta el Android SDK y actualiza algunas cosas, perfecto.

Importo uno de los proyectos del workspace de Eclipse y parece que el importador es muy listo y donde usaba .jar detecta las dependencias y crea los ficheros gradle. Sorprendido.

Primer problema, mi app tiene un minSdk 4 pero incluye bibliotecas con minSdk 7 (play services, p.ej.). En Eclipse no pasa nada porque el minSdk del manifest lo pones a mano normalmente, y ya me preocupo en mi código de no usar cosas del API 7 si estoy en dispositivos antiguos. Android Studio sin embargo tiene un auto-merger por defecto que automáticamente combina los manifest de las bibliotecas en el de la app. Y se quejaba amargamente de que mi app tenía un minSdk menor que el de la biblioteca y eso no podía ser.

Pensé que habría que andar haciendo "flavors" de la app (versiones que cambian solo algunos ficheros del código, muy útil para hacer compilaciones para el entorno de pruebas o de producción fácilmente). Pero no, la solución era más fácil, hay un atributo que se llama tools:overrideLibrary (http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-tools:overrideLibrary-marker) que permite a gradle ignorar las versiones de sdk que indique cierta biblioteca.

<uses-sdk
android:minSdkVersion="4"
android:targetSdkVersion="19"
tools:overrideLibrary="com.google.android.gms"/>

Bien, guardo el fichero y... ¡sorpresa! El fichero no se guarda, y en su lugar obtengo un "Error: exception during working with external system:" (excepción que no se muestra por cierto). Luego indica que falló la sincronización de Gradle y que la edición y la depuración no funcionarán correctamente (doy fe).

Y así llevo hora y media xD Huelga decir que mi disco funciona perfectamente y le ocurre a mucha gente, pero no me vale ninguna solución. Ni poner el JAVA_HOME o el PATH al JDK de 64 bits, ni ejecutar como administrador, ni desactivar el firewall, ni invalidar la caché, ni borrar el directorio .gradle, ni jugar con los parámetros de VM de gradle, nada.

Mmmh, ¡ya está! Creando un proyecto nuevo estoy viendo que el importador no era tan listo y en el build.gradle autogenerado no pone los atributos "versionCode" y "versionName". Parece que si no están, falla todo, no me preguntéis por qué. Da un poco de miedo tocar algo de los ficheros build y que casque todo sin decirte la razón.


defaultConfig {
applicationId "com.mocelet.christmas.lights"
minSdkVersion 4
targetSdkVersion 19
versionCode 9
versionName "1.2"
}

Bien, ya compila y lo lanza en el emulador :D Habrá que darle la oportunidad, hay cosas que las facilita muchísimo, aunque la configuración del proyecto al principio sea más engorrosa. El IDE con que no hagas cosas raras con los XML como me pasaba con Eclipse me conformo, de temas de autocompletado, resaltado de sintaxis y demás parecen similares.

Espero que os valga la experiencia para algo, era publicarlo aquí o escribirlo en evernote para acordarme en un futuro jaja

kriogeN
12/02/15, 16:23:41
Pues yo estaba pensando en instalar Android Studio y migrar todos mis proyectos y me acabas de acojonar vivo, creo que voy a seguir con Eclipse hasta que ya no saquen mas ADTs y me tenga que joder y dar el salto.

dilux
12/02/15, 16:50:06
Yo la verdad que no he probado a migrarlos, pero he empezado proyectos nuevos con Android Studio y la verdad es que es una autentica maravilla, yo lo recomiendo 100%

mocelet
12/02/15, 16:56:42
El importador quitando esos dos temas lo ha hecho bien, ha importado también un proyecto biblioteca que tenía.

El editor como tal no creo que esté verde después de un año. Y el único problema de gradle es que si la configuración automática no funciona es un pequeño galimatías arreglarlo a mano.

Supongo que lo usaré unos días a ver si me aclaro, hay atributos que están escritos en varios sitios a la vez y no entiendo por qué xD. Eso sí, el control de dependencias, importar las bibliotecas de google sin andar con jars, y lo de distintas versiones de la app a golpe de click me han ganado.

Eclipse tampoco puedo decir que no me haya hecho perder tiempo, aunque la culpa era del plugin de android, las cosas como son.

mocelet
18/02/15, 16:31:17
Bueno, el IDE sigue sin gustarme demasiado... falta de costumbre supongo. Eclipse compila automáticamente según vas escribiendo y te señala en rojo rápidamente todas las clases con errores. Android Studio no.

Con Eclipse te enteras de dónde están los ficheros, con Android Studio no porque te los presenta en una vista lógica. Tenía un jar que no me valía para nada ya en el directorio libs, pero si no me voy al explorador de ficheros no me entero porque en la vista normal del proyecto no sale. Lo mismo con el fichero de proguard, no sale pero está ahí. (EDIT: en efecto (http://stackoverflow.com/questions/23149417/proguard-project-txt-not-found-in-android-studio), desconocimiento del IDE... hay una vista que es Android, donde el fichero proguard no sale, y otra que es Project, donde sí... y que se parece más a un explorador de ficheros convencional)

Gradle tiene una gran ventaja a la hora de trabajar con las bibliotecas de Google Play (amén de no andar con jars), y es la compilación selectiva: puedes cargar solo una parte de la funcionalidad. No tiene sentido que el APK ocupe dos megas más por incluir las APIs de Google Maps, Android Wear, Fit, etc. etc. si solo te interesa la parte de anuncios p.ej.

P.D: Y para cambiar el nombre de un módulo (que a veces por defecto al importar es "app"), aunque hay un Rename module no basta con eso... ver solución (http://stackoverflow.com/questions/26936812/renaming-modules-in-android-studio)

P.D: El mensaje "Cannot resolve symbol getDefaultProguardFile" que sale al editar el build.gradle, aunque intimidatorio es un error "estético" que no afecta a la funcionalidad (https://code.google.com/p/android/issues/detail?id=73674). Me quedo más tranquilo jeje

Dexafree
19/02/15, 16:47:52
Por si os sirve de consuelo, yo llevo más de un año con AS (si, desde las primeras alphas, asi de loco estoy xD ) y estoy encantadísimo con el cambio.

Eclipse compila automáticamente según vas escribiendo y te señala en rojo rápidamente todas las clases con errores. Android Studio no.

En mi caso sí señala las clases con errores, aparecen subrayadas en rojo

http://i.imgur.com/jxGAQ9W.jpg


Con Eclipse te enteras de dónde están los ficheros, con Android Studio no porque te los presenta en una vista lógica.

Aunque veo que has descubierto la solución, esa vista una vez te acostumbras es bastante cómoda, ya que te separa totalmente cada módulo y te enseña lo importante, sin .iml, .gradles.. cada cosa en su apartado correspondiente

P.D: Y para cambiar el nombre de un módulo (que a veces por defecto al importar es "app"), aunque hay un Rename module no basta con eso...

La verdad es que eso si que es una tocada de narices a veces. Pero con Refactor -> Rename module y Refactor -> Rename después, no suele haber ningún problema :ok:


P.D: El mensaje "Cannot resolve symbol getDefaultProguardFile" que sale al editar el build.gradle, aunque intimidatorio es un error "estético" que no afecta a la funcionalidad. Me quedo más tranquilo jeje

Eso es cosa del plugin de Groovy de la versión de IntelliJ en la que se basa AS.

Esperemos que Google adopte nuevas versiones del plugin de Groovy en proximas releases de AS!


En mi opinión, AS tiene una mejor gestión de proyectos.

Eclipse trabaja con un workspace con todos tus proyectos. Android Studio trabaja con proyectos, formados por modulos. Cuando trabajas en un proyecto, ves sus modulos, pero nada de otros trabajos que hayas hecho (solo te centras en lo importante).

Cada proyecto tiene su build.gradle y su settings.gradle. Lo que pongas en el build.gradle de proyecto se aplicará a todos los build.gradle de cada módulo.

Y dentor del build.gradle de cada módulo puedes definir sus dependencias


compile 'groupid:libreria:version'



compile project(':modulo_local')


Para mi gusto, mucho más cómodo, sin duda.

Migrar un proyecto de Eclipse a AS puede ser un dolor de cabeza, pero la forma más facil, en mi opinión, es crear un nuevo proyecto en AS, observar su estructura (proyecto -> modulo), y tratar de adaptarla en el proyecto ya existente (si necesitáis un cable, preguntad :ok: )

mocelet
19/02/15, 18:41:20
Gracias por los aportes :)

Sobre los errores en rojo, me los muestra pero solo en la clase que esté editando. Si toco algo en esa clase que afecte a otras, las otras no se marcan y solo descubro el error al compilar y verlo en la ventanita de mensajes.

Ya me quedaré en Android Studio, me falta importar solo un proyecto ya y el gradle es muy flexible (y muy tiquismiquis también...)

gonza28
19/02/15, 19:23:53
mocelet
Yo soy novato en java y siempre que hice mis cosas las hice en eclipse. Pero tuve varios intentos de pasarme a android studio y siempre mi problema fue con las librerias. siempre que quise importar algo, era problema. Lo abandoné unas 5 o 6 veces y lo tenia instalado en mi pc.

Luego un dia lo agarre y descubrí como se importaban realmente las cosas. Listo! desde ahí no lo solté nunca mas.
Hoy tengo un proyecto con 134 clases y fragmentos y me llevo de lujo con el. No vuelvo mas a eclipse salvo que derepente android studio se vuelva loco:cry:
Acostumbrate y verás.
Agradezco a un tio que en otro post me dijo algo como esto y me animó a volver a intentarlo.


Los errores tambien te los marca en rojo

Dexafree
19/02/15, 22:06:23
Ya me quedaré en Android Studio, me falta importar solo un proyecto ya y el gradle es muy flexible (y muy tiquismiquis también...)

Gradle en realidad es muy flexible y potente. Puedes hasta ejecutar tareas en tiempo de compilacion (hay incluso tareas para subir una compilacion a Maven Central directamente desde el IDE, solo tocando el build.gradle. Es bestial!)

Una vez le coges el truco pasas a amarlo xD

Bienvenido al club :ok:

murtrum
23/02/15, 19:54:33
Hola a todos,

he instalado el Android Studio, última versión para linux, instalé el Java SDK 8

pero cuando creo un nuevo proyecto me pone en rojo que no puede resolver a una variable las R

como en esta línea:

setContentView(R.layout.activity_main);

aclaro que lo hace con los proyectos nuevos, voy a NEW android proyect sigo el asistente y el código inicial lo crea solo el Android Studio y ya dice que tiene errores sin que yo toque nada.

Dexafree
24/02/15, 08:53:18
Eso suele ser porque la compilación no termina.

Al compilar, en la consola de gradle debería aparecer algún mensaje de error (indicarte si hay algún problema en algún XML, por ejemplo)

Te recomiendo que abras un hilo nuevo con algo más de información para intentar tratarlo de forma separada :ok:

mocelet
24/02/15, 09:37:26
Gradle en realidad es muy flexible y potente. Puedes hasta ejecutar tareas en tiempo de compilacion (hay incluso tareas para subir una compilacion a Maven Central directamente desde el IDE, solo tocando el build.gradle. Es bestial!)

Una vez le coges el truco pasas a amarlo xD

Bienvenido al club :ok:

Ya nos vamos llevando mejor AS y yo xD Los flavors son un buen invento, ahora tengo un flavor que apunta al servidor de producción y otro flavour que apunta al servidor local, antes tenía que andar comentando y descomentando líneas de código.

El editor en general lo veo más robusto, y me encantan los detallitos como que al tratar con imágenes te ponga la miniatura al lado de la línea de código que la usa.

Errores de esos raros de ahora me quedo tonto no me ha vuelto a dar, tal vez lo habrán corregido en alguna actualización.