# Android SDK

El SDK (Software Development Kit) de Android, incluye un conjunto de herramientas de desarrollo. Comprende un depurador de código, biblioteca, un simulador de teléfono basado en QEMU, documentación, ejemplos de código y tutoriales. Las plataformas de desarrollo soportadas incluyen GNU/Linux, Mac OS X 10.5.8 o posterior, y Windows XP o posterior. El entorno de desarrollo integrado (IDE, Integrated Development Environment) soportado oficialmente es Android Studio junto con el complemento ADT (plugin Android Development Tools). Además, los programadores pueden usar un editor de texto para escribir ficheros Java y XML y utilizar comandos en un terminal (se necesitan los paquetes JDK (Java Development Kit y Apache Ant) para crear y depurar aplicaciones, así como controlar dispositivos Android que estén conectados (es decir, reiniciarlos, instalar aplicaciones en remoto, etc.).
Las Actualizaciones del SDK están coordinadas con el desarrollo general de Android. El SDK soporta también versiones antiguas de Android, por si los programadores necesitan instalar aplicaciones en dispositivos ya obsoletos o más antiguos. Las herramientas de desarrollo son componentes descargables, de modo que una vez instalada la última versión, pueden instalarse versiones anteriores y hacer pruebas de compatibilidad.
Una aplicación Android está compuesta por un conjunto de ficheros empaquetados en formato .apk y guardada en el directorio /data/app del sistema operativo Android (este directorio necesita permisos de superusuario, root, por razones de seguridad). Un paquete APK incluye .dex (ejecutables Dalvik, un código intermedio compilado), recursos, etc.

## Android Debug Bridge - Conector de Depuración de Android

Android Debug Bridge (Conector o puente para depuración de Android ), o ADB, es un juego de herramientas incluido en el paquete SDK de Android. Consiste en programas con función tanto de cliente, como de servidor, que se comunican entre ellos. El uso normal del ADB se realiza desde la línea de comandos, aunque existen numerosas interfaces gráficas para controlarlo.
La forma de enviar comandos por medio del ADB es normalmente
En un problema de seguridad, publicado en marzo del 2011, ADB fue utilizado como un vector para tratar de instalar programas como superusuario (root) en teléfonos conectados, por medio de un ataque de saturación de recursos ('resource exhaustion attack').

## Fastboot - Arranque rápido

Fastboot es un protocolo de diagnóstico incluido en el SDK cuya función principal consiste en modificar el sistema de ficheros flash mediante una conexión USB desde un ordenador. Para ello el dispositivo ha de arrancarse en modo boot loader (carga de inicio) o modo Second Program Loader (segundo cargador de programa) donde sólo se realiza una inicialización de hardware básica. Después de habilitar el protocolo en el dispositivo, este acepta un juego específico de instrucciones que recibe por medio de la conexión USB utilizando la línea de comandos. Algunos de los comandos más usados son:
* flash – reescribe una partición con una imagen binaria almacenada en el ordenador.
* erase – borra una partición específica.
* reboot – reinicia el dispositivo con el sistema principal, la partición de recuperación del sistema o de vuelta al bootloader.
* devices – muestra una lista de dispositivos ( con su número de serie) conectados al ordenador.
* format – formatea una partición específica. El sistema de ficheros de la partición tiene que ser compatible con el dispositivo.

## Native development kit - Sistema de desarrollo nativo

El NDK permite instalar bibliotecas escritas en C, C++ y otros lenguajes, una vez compiladas para ARM, MIPS o código nativo x86. Los programas Java en ejecución en la máquina virtual Dalvik (Dalvik VM) pueden llamar a clases nativas por medio de la función System.loadLibrary, que forma parte de las clases estándares Java en Android.
Se pueden compilar e instalar aplicaciones completas utilizando las herramientas de desarrollo tradicionales. Sin embargo, según la documentación de Android, NDK no debe utilizarse para desarrollo, simplemente porque el programador prefiera programar en C/C++, ya que la utilización del NDK aumenta la complejidad sin que la mayor parte de las aplicaciones obtengan ningún beneficio por ello.
El depurador ADB proporciona un shell root en el Simulador de Android que permite cargar y ejecutar código nativo ARM, MIPS o x86. Este código puede compilarse con GCC, o el compilador C++ de Intel en un ordenador personal normal. La ejecución de código nativo es difícil porque Android utiliza una biblioteca de C propia (libc, llamada Bionic). La biblioteca gráfica que utiliza Android para controlar el acceso a este dispositivo se llama Skia Graphics Library (SGL), disponible con licencia de código abierto. Skia tiene implementaciones en win32 y Unix, permitiendo el desarrollo de aplicaciones multiplataforma, y es el motor de gráficos que soporta al navegador web Google Chrome.
NDK está basado en la línea de comandos, y al contrario que el desarrollo con Eclipse, requiere la invocación manual de comandos para construir, cargar y depurar las aplicaciones. Hay herramientas de terceros que integran el NDK con Eclipse y Visual Studio.

## Android Open Accessory Development Kit

La plataforma Android 3.1 (también actualizada en la plataforma Android 2.3.4) introduce soporte para Android Open Accessory, que permite que equipos USB externos (y Android USB Accesory) puedan interactuar con dispositivos Android en un modo especial llamado "accessory" (accesorio). Cuando un dispositivo Android está en modo "accessory", el accesorio conectado actúa como un centro (host) USB (proporciona potencia al bus y ennumera los dispositivos ) mientras que el dispositivo Android funciona como un dispositivo USB. Los accesorios Android USB están diseñados específicamente para unirse a dispositivos Android mediante un protocolo sencillo (protocolo "Android accessory") que les permite detectar a los dispositivos Android compatibles con este modo.