Desarrollando con android sin conexión Por: Alfonso Alí <alfonso.ali@gmail.com> http://aalih.cubava.cu/2015/01/12/desarrollando-con-android-sin-conexion/ Para nadie es noticia que los dispositivos con Android se hacen cada vez más presentes en la vida diaria, de ahí que aprender a programar para ellos se hace cada día más importante. Para los cubanos este proceso de aprendizaje se complica ante la imposibilidad de acceder directamente a la "fuente": Lo complicado en sí no consiste precisamente en no poder acceder a la documentación o los ficheros necesarios, cubanos al fin, siempre encontramos una manera o mano amiga que nos permita obtener los recursos necesarios, el problema está dado en la escasa documentación existente sobre como configurar el entorno de desarrollo de manera offline y en la casi obligatoriedad de que el sdk manager acceda a los ficheros xml donde se listan los paquetes disponibles. En este artículo describiremos como instalar los paquetes de desarrollo de android y el ide Android Studio en linux sin necesidad de acceder a internet (salvo para descargar los ficheros). Asumiremos lo siguiente: 1. Se ha instalado el jdk6 o jdk7 (jdk8 no se soportado aún)
2. La instalación se realizará en /usr/local/apps 3. Los ficheros necesarios han sido previamente copiados en la carpeta ~/android_packages Debo aclarar que Google tiene disponible los paquetes de tipo "bundle" que incluyen el ide + el entorno de desarrollo en un solo fichero, lo que facilita su instalación, el inconveniente está dado en que estos paquetes solo incluyen una versión del emulador y plataforma de android (usualmente la última). El método de instalación que detallo aquí nos servirá también en ese caso, para adicionar el soporte a versiones anteriores de android (plataforma + imagen de emulador) y como guía para actualizar el entorno (tools, build tools, extras, ide) a nuevas versiones. Ficheros necesarios Necesitaremos los siguientes ficheros (sólo listo los correspondientes a linux, al final del artículo se incluyen las url completas para todos los sistemas operativos soportados): 1. sdk (incluye el sdk manager, emulador, etc) android-sdk_r24-linux.tgz 2. tools tools_r24.0.2-linux.zip 3. platform-tools (incluye adb, fastboot, etc) platform-tools_r21-linux.zip 4. build-tools build-tools_r21.1.2-linux.zip 5. API correspondiente a cada versión android-2.2_r03-linux.zip android-2.3.1_r02-linux.zip android-2.3.3_r02-linux.zip android-3.0_r02-linux.zip android-19_r04.zip android-21_r02.zip 6. Imágenes del emulador correspondientes a cada versión y tipo de dispositivo sysimg_x86-19_r02.zip sysimg_x86-21_r01.zip 7. Extras: Android support repository android_m2repository_r11.zip 8. Extras: Google repository google_m2repository_r15.zip 9. Documentación (incluye los manuales de referencia, tutoriales, guías de diseño, etc) docs-21_r01.zip 10. Android Studio v1.0.2 android-studio-ide-135.1653844-linux.zip Antes de listar los pasos de instalación quiero hacer algunas precisiones: El sdk incluye los ficheros que vienen en tools, sin embargo dado que al momento de escribir el
artículo existía una actualización de estos ficheros decidí incluirlo. Existe un build-tools para cada una de las versiones del API, dado que es buena práctica definir como API target de la aplicación a desarrollar la versión de android más actualizada disponible solo incluyo aquí el build-tools correspondiente a la 21 Aunque se podría incluir los ficheros de API correspondientes a todas las versiones, teniendo en cuenta el soporte disponible para versiones anteriores de las nuevas funcionalidades (actionbar, fragment, etc) sólo resulta práctico tener en cuenta las API a partir de la versión 2.2. En mi caso particular dado que tengo un dispositivo con android 4.0.2 (API 14) solo instalo las API 8, 9, 10 y 11 para probar las funcionalidades en versiones anteriores y la 19 (4.4, KitKat) y 21 (5, Lollipop) que introdujeron cambios significativos. Los ficheros de la API del 8-11 incluyen las imágenes requeridas por el emulador para esas versiones, a partir de la API 14 esas imágenes están disponibles en archivos separados y en dependencia de la disponibilidad las hay para distintas arquitecturas (arm, x86, mips) y tipo de dispositivo (tv, wear, phone/tablet). Aconsejo, siempre que se pueda, usar las imágenes para x86 pues permiten usar la aceleración por hardware (vía KVM), si tenemos en cuenta que de por sí el emulador es lento cualquier extra viene bien. No confundirse con el calificativo de "Extras" para los ficheros correspondientes a repositorios de Google y soporte de Android, los dos son importantes, sobre todo el segundo que incluye los paquetes necesarios para que funcionalidades recientes puedan ser usadas en dispositivos con versiones anteriores de android. Aunque los menciono en el listado de urls, no incluyo en este artículo la instalación de los paquetes correspondientes a las API de google y el soporte para Google Play. Instalación del entorno de desarrollo Usando un usuario que tenga suficientes permisos para escribir en /usr/local/apps nos movemos hacia ese directorio cd /usr/local/apps Descompactamos el fichero del sdk y nos movemos hacia el directorio creado tar xzvf ~/android_packages/android-sdk_r24-linux.tgz cd android-sdk-linux Actualizamos los tools. Esta operación pedirá confirmación para sobreescribir los ficheros ya existentes, le decimos que sí a todo unzip ~/android_packages/tools_r24.0.2-linux.zip Instalamos el platform-tools
unzip ~/android_packages/platform-tools_r21-linux.zip Instalamos los ficheros de API for x in android-2.2_r03-linux.zip android-2.2_r03-linux.zip android-2.3.3_r02-linux.zip android3.0_r02-linux.zip android-19_r04.zip android-21_r02.zip; do unzip -d platforms/ "~/android_packages/$x"; done Instalamos las imágenes para las versiones 19 y 21 mkdir -p system-images/android-{19,21}/default unzip -d system-images/android-19/default/ ~/android_packages/sysimg_x86-19_r02.zip unzip -d system-images/android-19/default/ ~/android_packages/sysimg_x86-21_r01.zip Instalamos el build-tools asociado a la versión 21 mkdir build-tools unzip -d build-tools ~/android_packages/build-tools_r21.1.2-linux.zip Instalamos los extras mkdir -p extras/{android,google} unzip -d extras/android/ ~/android_packages/android_m2repository_r11.zip unzip -d extras/google/ ~/android_packages/google_m2repository_r15.zip Por último instalamos la documentación unzip ~/android_packages/docs-21_r01.zip Si ejecutamos ahora el comando./tools/android se mostrará el sdk manager, lo que nos permite confirmar que todos los paquetes fueron instalados correctamente
Teniendo en cuenta que los comandos adb, android y otros serán ejecutados con frecuencia, recomiendo adicionar los directorios /usr/local/apps/android-sdk-linux/tools y /usr/local/apps/androidsdk-linux/platform-tools a la variable de entorno PATH. Instalación de Android Studio Nos ubicamos nuevamente en /usr/local/apps cd /usr/local/apps Descompactamos el fichero de android studio unzip ~/android_packages/android-studio-ide-135.1653844-linux.zip El fichero a ejecutar se encuentra en android-studio/bin/studio.sh, crearemos un enlace a el para
facilitar el acceso ln -s /usr/local/apps/android-studio/bin/studio.sh /usr/local/bin/android-studio Iniciamos el ide, el cual nos preguntará si deseamos importar la configuración de alguna versión anterior, en nuestro caso dado que es la primera vez le decimos que no, el programa procederá a mostrar el splash y posteriormente la pantalla del asistente de configuración inicial
Dado que el asistente tratará de descargar ficheros adicionales debemos cancelarlo para pasar directamente al programa, al preguntar le especificamos que no deseamos que se ejecute nuevamente el asistente
Para poder crear un proyecto nuevo debemos especificar la ubicación del sdk de android, para ello seleccionamos Configure -> Project Defaults -> Project Structure y especificamos los valores correspondientes
Creando un proyecto nuevo En la pantalla inicial de Android Studio seleccionamos "Start a new Android Studio project", especificamos el nombre de la aplicación, el dominio (el cual no tiene que existir necesariamente) y en que directorio se creará
Especificamos la versión mínima del SDK en la cual funcionará nuestra aplicación, en el caso de Cuba aún quedan varios dispositivos con Froyo (API 8, 2.2) por lo que a menos que necesitemos de funcionalidades no soportadas para esa versión recomiendo seleccionarla
Elegimos el tipo de proyecto a generar y especificamos los datos correspondientes, en dependencia del tipo de proyecto seleccionado el IDE mostrará el editor visual o no
Creando un emulador Si bien es cierto que siempre debemos probar nuestra aplicación usando un dispositivo físico, tarde o
temprano necesitaremos hacer uso de un emulador, ya sea para probar versiones de android o especificaciones de tamaño de pantalla para las cuales no tenemos dispositivo a la mano, o para realizar una serie de pruebas que podrían tener asociado algún costo monetario (enviar/recibir sms/email, acceder a la red, etc). Podemos crear un emulador desde la consola a través del comando android avd o directamente desde Android Studio. Los pasos a seguir para la segunda opción son los siguientes: Ejecutamos el android virtual device (AVD) manager desde Android Studio
Seleccionamos un perfil predefinido que se ajuste a nuestros requerimientos o creamos uno nuevo. En este ejemplo seleccionaremos un perfil basado en las especificaciones del Nexus One Especificamos la imagen de emulador a usar (sólo se muestran las que están instaladas)
Verificamos las opciones seleccionadas, recomiendo habilitar la opción de guardar un snapshot para acelerar el inicio del emulador cuando lo ejecutamos en otras ocasiones
Para ejecutar nuestra aplicación en el nuevo emulador seleccionamos el botón correspondiente en la barra del IDE En caso de que el emulador no se encuentre entre los dispositivos en ejecución o conectados, lo seleccionamos para que se inicie
Esperamos pacientemente (el tiempo de espera está dado por las capacidades de cpu y ram con que cuente su computadora) hasta que el emulador cargue definitivamente y podamos interactuar con la aplicación que estamos probando. Llegado a este paso, es recomendable revisar la documentación (docs/tools/help/emulator.html) para conocer las combinaciones de teclas asociadas a cada opción (Home, Back, Menu, etc). Finalizando En próximos artículos introduciremos un ejemplo de aplicación que nos permita irnos adentrando paso a paso en las particularidades propias del desarrollo nativo para esta plataforma, espero que esta guía les permita mientras tanto comenzar sus primeros pasos. URL de los ficheros de android Nota: Todos los programas y ficheros listados están disponibles en el FTP de Infomed. Android SDK http://dl.google.com/android/installer_r24.0.2-windows.exe http://dl.google.com/android/android-sdk_r24.0.2-windows.zip http://dl.google.com/android/android-sdk_r24.0.2-macosx.zip http://dl.google.com/android/android-sdk_r24.0.2-linux.tgz
Android Studio https://dl.google.com/dl/android/studio/install/1.0.1/android-studio-bundle-135.1641136.exe https://dl.google.com/dl/android/studio/install/1.0.1/android-studio-ide-135.1641136.exe https://dl.google.com/dl/android/studio/ide-zips/1.0.1/android-studio-ide-135.1641136-windows.zip https://dl.google.com/dl/android/studio/install/1.0.1/android-studio-ide-1641136.dmg https://dl.google.com/dl/android/studio/ide-zips/1.0.1/android-studio-ide-135.1641136-linux.zip Android Packages https://dl-ssl.google.com/android/repository/android-1.1_r1-windows.zip https://dl-ssl.google.com/android/repository/android-1.1_r1-macosx.zip https://dl-ssl.google.com/android/repository/android-1.1_r1-linux.zip https://dl-ssl.google.com/android/repository/android-1.5_r04-windows.zip https://dl-ssl.google.com/android/repository/android-1.5_r04-macosx.zip https://dl-ssl.google.com/android/repository/android-1.5_r04-linux.zip https://dl-ssl.google.com/android/repository/android-1.6_r03-linux.zip https://dl-ssl.google.com/android/repository/android-1.6_r03-macosx.zip https://dl-ssl.google.com/android/repository/android-1.6_r03-windows.zip https://dl-ssl.google.com/android/repository/android-2.0_r01-linux.zip https://dl-ssl.google.com/android/repository/android-2.0_r01-macosx.zip https://dl-ssl.google.com/android/repository/android-2.0_r01-windows.zip https://dl-ssl.google.com/android/repository/android-2.0.1_r01-linux.zip https://dl-ssl.google.com/android/repository/android-2.0.1_r01-macosx.zip https://dl-ssl.google.com/android/repository/android-2.0.1_r01-windows.zip https://dl-ssl.google.com/android/repository/android-2.1_r03-linux.zip https://dl-ssl.google.com/android/repository/android-2.2_r03-linux.zip https://dl-ssl.google.com/android/repository/android-2.3.1_r02-linux.zip https://dl-ssl.google.com/android/repository/android-2.3.3_r02-linux.zip https://dl-ssl.google.com/android/repository/android-3.0_r02-linux.zip https://dl-ssl.google.com/android/repository/android-3.1_r03-linux.zip https://dl-ssl.google.com/android/repository/android-3.2_r01-linux.zip http://dl-ssl.google.com/android/repository/android-14_r04.zip http://dl-ssl.google.com/android/repository/android-15_r05.zip http://dl-ssl.google.com/android/repository/android-16_r05.zip http://dl-ssl.google.com/android/repository/android-17_r03.zip http://dl-ssl.google.com/android/repository/android-18_r03.zip http://dl-ssl.google.com/android/repository/android-19_r04.zip http://dl-ssl.google.com/android/repository/android-20_r02.zip http://dl-ssl.google.com/android/repository/android-21_r02.zip https://dl-ssl.google.com/android/repository/samples-2.1_r01-linux.zip https://dl-ssl.google.com/android/repository/samples-2.2_r01-linux.zip https://dl-ssl.google.com/android/repository/samples-2.3_r01-linux.zip https://dl-ssl.google.com/android/repository/samples-2.3.3_r01-linux.zip https://dl-ssl.google.com/android/repository/samples-3.0_r01-linux.zip https://dl-ssl.google.com/android/repository/samples-3.1_r01-linux.zip https://dl-ssl.google.com/android/repository/samples-3.2_r01-linux.zip https://dl-ssl.google.com/android/repository/samples-14_r02.zip https://dl-ssl.google.com/android/repository/samples-15_r02.zip https://dl-ssl.google.com/android/repository/samples-16_r01.zip
https://dl-ssl.google.com/android/repository/samples-17_r01.zip https://dl-ssl.google.com/android/repository/samples-18_r01.zip http://dl-ssl.google.com/android/repository/samples-19_r06.zip http://dl-ssl.google.com/android/repository/samples-20_r03.zip http://dl-ssl.google.com/android/repository/samples-21_r04.zip http://dl-ssl.google.com/android/repository/platform-tools_r21-windows.zip http://dl-ssl.google.com/android/repository/platform-tools_r21-linux.zip http://dl-ssl.google.com/android/repository/platform-tools_r21-macosx.zip https://dl-ssl.google.com/android/repository/build-tools_r17-windows.zip https://dl-ssl.google.com/android/repository/build-tools_r17-linux.zip https://dl-ssl.google.com/android/repository/build-tools_r17-macosx.zip https://dl-ssl.google.com/android/repository/build-tools_r18.0.1-windows.zip https://dl-ssl.google.com/android/repository/build-tools_r18.0.1-linux.zip https://dl-ssl.google.com/android/repository/build-tools_r18.0.1-macosx.zip https://dl-ssl.google.com/android/repository/build-tools_r18.1-windows.zip https://dl-ssl.google.com/android/repository/build-tools_r18.1-linux.zip https://dl-ssl.google.com/android/repository/build-tools_r18.1-macosx.zip https://dl-ssl.google.com/android/repository/build-tools_r18.1.1-windows.zip https://dl-ssl.google.com/android/repository/build-tools_r18.1.1-linux.zip https://dl-ssl.google.com/android/repository/build-tools_r18.1.1-macosx.zip https://dl-ssl.google.com/android/repository/build-tools_r19-windows.zip https://dl-ssl.google.com/android/repository/build-tools_r19-linux.zip https://dl-ssl.google.com/android/repository/build-tools_r19-macosx.zip https://dl-ssl.google.com/android/repository/build-tools_r19.0.1-windows.zip https://dl-ssl.google.com/android/repository/build-tools_r19.0.1-linux.zip https://dl-ssl.google.com/android/repository/build-tools_r19.0.1-macosx.zip https://dl-ssl.google.com/android/repository/build-tools_r19.0.2-windows.zip https://dl-ssl.google.com/android/repository/build-tools_r19.0.2-linux.zip https://dl-ssl.google.com/android/repository/build-tools_r19.0.2-macosx.zip https://dl-ssl.google.com/android/repository/build-tools_r19.0.3-windows.zip https://dl-ssl.google.com/android/repository/build-tools_r19.0.3-linux.zip https://dl-ssl.google.com/android/repository/build-tools_r19.0.3-macosx.zip https://dl-ssl.google.com/android/repository/build-tools_r19.1-windows.zip https://dl-ssl.google.com/android/repository/build-tools_r19.1-linux.zip https://dl-ssl.google.com/android/repository/build-tools_r19.1-macosx.zip http://dl-ssl.google.com/android/repository/build-tools_r20-windows.zip http://dl-ssl.google.com/android/repository/build-tools_r20-linux.zip http://dl-ssl.google.com/android/repository/build-tools_r20-macosx.zip http://dl-ssl.google.com/android/repository/build-tools_r21-windows.zip http://dl-ssl.google.com/android/repository/build-tools_r21-linux.zip http://dl-ssl.google.com/android/repository/build-tools_r21-macosx.zip http://dl-ssl.google.com/android/repository/build-tools_r21.0.1-windows.zip http://dl-ssl.google.com/android/repository/build-tools_r21.0.1-linux.zip http://dl-ssl.google.com/android/repository/build-tools_r21.0.1-macosx.zip http://dl-ssl.google.com/android/repository/build-tools_r21.0.2-windows.zip http://dl-ssl.google.com/android/repository/build-tools_r21.0.2-linux.zip http://dl-ssl.google.com/android/repository/build-tools_r21.0.2-macosx.zip http://dl-ssl.google.com/android/repository/build-tools_r21.1-windows.zip http://dl-ssl.google.com/android/repository/build-tools_r21.1-linux.zip
http://dl-ssl.google.com/android/repository/build-tools_r21.1-macosx.zip http://dl-ssl.google.com/android/repository/build-tools_r21.1.1-windows.zip http://dl-ssl.google.com/android/repository/build-tools_r21.1.1-linux.zip http://dl-ssl.google.com/android/repository/build-tools_r21.1.1-macosx.zip http://dl-ssl.google.com/android/repository/build-tools_r21.1.2-windows.zip http://dl-ssl.google.com/android/repository/build-tools_r21.1.2-linux.zip http://dl-ssl.google.com/android/repository/build-tools_r21.1.2-macosx.zip http://dl-ssl.google.com/android/repository/tools_r24.0.2-windows.zip http://dl-ssl.google.com/android/repository/tools_r24.0.2-linux.zip http://dl-ssl.google.com/android/repository/tools_r24.0.2-macosx.zip http://dl-ssl.google.com/android/repository/docs-21_r01.zip https://dl-ssl.google.com/android/repository/sources-14_r01.zip https://dl-ssl.google.com/android/repository/sources-15_r02.zip https://dl-ssl.google.com/android/repository/sources-16_r02.zip https://dl-ssl.google.com/android/repository/sources-17_r01.zip https://dl-ssl.google.com/android/repository/sources-18_r01.zip https://dl-ssl.google.com/android/repository/sources-19_r02.zip http://dl-ssl.google.com/android/repository/sources-20_r01.zip http://dl-ssl.google.com/android/repository/sources-21_r01.zip http://dl-ssl.google.com/android/repository/google_apis-3-r03.zip http://dl-ssl.google.com/android/repository/google_apis-4_r02.zip http://dl-ssl.google.com/android/repository/google_apis-5_r01.zip http://dl-ssl.google.com/android/repository/google_apis-6_r01.zip http://dl-ssl.google.com/android/repository/google_apis-7_r01.zip http://dl-ssl.google.com/android/repository/google_apis-8_r02.zip http://dl-ssl.google.com/android/repository/google_apis-9_r02.zip http://dl-ssl.google.com/android/repository/google_apis-10_r02.zip http://dl-ssl.google.com/android/repository/google_apis-11_r01.zip http://dl-ssl.google.com/android/repository/google_apis-12_r01.zip http://dl-ssl.google.com/android/repository/google_apis-13_r01.zip http://dl-ssl.google.com/android/repository/google_apis-14_r02.zip http://dl-ssl.google.com/android/repository/google_apis-15_r02.zip http://dl-ssl.google.com/android/repository/google_apis-16_r03.zip http://dl-ssl.google.com/android/repository/google_apis-17_r03.zip http://dl-ssl.google.com/android/repository/google_apis-18_r03.zip http://dl-ssl.google.com/android/repository/google_apis-19_r10.zip http://dl-ssl.google.com/android/repository/google_apis-21_r01.zip http://dl-ssl.google.com/android/repository/google_tv-12_r02.zip http://dl-ssl.google.com/android/repository/google_tv-13_r01.zip http://dl-ssl.google.com/android/repository/support_r21.0.3.zip http://dl-ssl.google.com/android/repository/android_m2repository_r11.zip http://dl-ssl.google.com/android/repository/google_m2repository_r15.zip http://dl-ssl.google.com/android/repository/market_licensing-r02.zip http://dl-ssl.google.com/android/repository/market_apk_expansion-r03.zip http://dl-ssl.google.com/android/repository/google_play_services_3265130_r12.zip http://dl-ssl.google.com/android/repository/google_play_services_6587000_r22.zip http://dl-ssl.google.com/android/repository/usb_driver_r11-windows.zip http://dl-ssl.google.com/android/repository/play_billing_r05.zip https://dl-ssl.google.com/googleadmobadssdk/googleadmobadssdkandroid-6.4.1.zip
https://dl.google.com/gaformobileapps/googleanalyticsandroid_2.0beta5.zip http://dl-ssl.google.com/android/repository/webdriver_r02.zip http://dl-ssl.google.com/android/repository/gcm_r03.zip http://dl-ssl.google.com/android/repository/simulator_r01.zip http://dl-ssl.google.com/android/repository/support_r19.1.zip https://dl.google.com/glass/xe22/google-gdk.zip http://dl-ssl.google.com/android/repository/extras/intel/haxm-windows_r05.2.zip http://dl-ssl.google.com/android/repository/extras/intel/haxm-macosx_r05.2.zip http://dl-ssl.google.com/android/repository/sys-img/android/sysimg_armv7a-14_r02.zip http://dl-ssl.google.com/android/repository/sys-img/android/sysimg_armv7a-15_r02.zip http://dl-ssl.google.com/android/repository/sys-img/android/sysimg_armv7a-16_r03.zip http://dl-ssl.google.com/android/repository/sys-img/android/sysimg_armv7a-17_r02.zip http://dl-ssl.google.com/android/repository/sys-img/android/sysimg_armv7a-18_r02.zip http://dl-ssl.google.com/android/repository/sys-img/android/sysimg_armv7a-19_r02.zip http://dl-ssl.google.com/android/repository/sys-img/android/sysimg_arm-21_r01.zip https://dl-ssl.google.com/android/repository/sys-img/android/sysimg_x86-10_r02.zip https://dl-ssl.google.com/android/repository/sys-img/android/sysimg_x86-15_r01.zip https://dl-ssl.google.com/android/repository/sys-img/android/sysimg_x86-16_r01.zip https://dl-ssl.google.com/android/repository/sys-img/android/sysimg_x86-17_r01.zip https://dl-ssl.google.com/android/repository/sys-img/android/sysimg_x86-18_r01.zip http://dl-ssl.google.com/android/repository/sys-img/android/sysimg_x86-19_r02.zip http://dl-ssl.google.com/android/repository/sys-img/android/sysimg_x86-21_r01.zip http://dl-ssl.google.com/android/repository/sys-img/android/sysimg_