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
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