Desarrollo de programas para Android

El desarrollo de programas para Androidse hace habitualmente con ellenguaje de programaciónKotlin​ oJava​ y el conjunto de herramientas de desarrollo SDK ( SDK,SoftwareDevelopment Kit), pero hay otras opciones disponibles. En julio de 2013 existían más de 1 000 000 de aplicaciones contabilizadas para Android, con aproximadamente 25 mil millones de descargas.​​​ La plataforma Android ha crecido hasta ser una de las preferidas por los desarrolladores para plataformas móviles. Un estudio de junio de 2011 indica que el 67% de los desarrolladores para móviles utilizaban la plataforma en el
momento de su publicación.​ En el segundo trimestre de 2012, se habían vendido alrededor de 105 millones de  teléfonos Android, un 68% de las ventas de teléfonos inteligentes hasta esa fecha.​
El SDK (Software Development Kit) de Android incluye un conjunto de herramientas de desarrollo.​ Comprende undepuradorde código, una biblioteca, unsimuladorde teléfono basado enQEMU, documentación, ejemplos de código y tutoriales. Las plataformas de desarrollo soportadas incluyenGNU/Linux,Mac OS X10.5.8 o posterior, yWindows XPo posterior. También puede utilizarse el propio sistema Android para desarrollos utilizando las aplicacionesAIDE - Android IDE - Java, C++(app) [AIDE - Android IDE - Java, C++] y eleditor de Java. La plataforma integral de desarrollo (IDE, Integrated
Development Environment) soportada oficialmente esAndroid Studiojunto con el complemento ADT (Android Development Tools plugin). Además, los programadores pueden usar uneditor de textopara escribir ficheros Java y XML, y utilizar comandos en un terminal (se necesitan los paquetes JDK,Java Development KityApache 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/appdelsistema operativoAndroid (este directorio necesita permisos de superusuario, root, por razones de seguridad). Un paquete APK incluye ficheros .dex​ (ejecutables Dalvik, un código intermedio compilado), recursos, etc.
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 funciones tanto de cliente como de servidor, que se comunican entre ellos. El uso normal del ADB se realiza desde lalínea de comandos,​ aunque existen numerosasinterfaces gráficaspara 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 es unprotocolode diagnóstico incluido en el SDK cuya función principal consiste en modificar elsistema de ficherosflashmediante una conexión USB desde un ordenador. Para ello el dispositivo ha de arrancarse en modoboot loader(carga de inicio) o modoSecond Program Loader(segundo cargador de programa) donde sólo se realiza una inicialización dehardwarebá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ónUSButilizando la línea de comandos. Algunos de los comandos más usados son:
El NDK permite instalar bibliotecas escritas enC,C++y otros lenguajes, una vez compiladas paraARM,MIPSocódigo nativox86. Los programas Java corriendo en la máquina virtualDalvik(Dalvik VM) pueden llamar a clases nativas por medio de la funciónSystem.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 unshellroot en el simulador de Android que permite cargar y ejecutar código nativo ARM, MIPS o x86. Este código puede compilarse conGCC, 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, llamadaBionic). La biblioteca gráfica que utiliza Android para controlar el acceso a este dispositivo se llamaSkia Graphics Library(SGL), disponible con licencia de código abierto.​ Skia tiene implementaciones en Win32 yUnix, permitiendo el desarrollo multiplataforma de aplicaciones, y es el motor de gráficos que soporta al navegador webGoogle Chrome.​
NDK está basado en la línea de comandos, y, al contrario que el desarrollo conEclipse, 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.​
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 enumera 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 los dispositivos Android compatibles con este modo.​
Android APIMiner es una plataforma que complementa automáticamente la documentaciónJavadoccon ejemplos de uso, extraídos de aplicaciones Android de código abierto.​ Para mejorar la calidad de los ejemplos, APIMiner utiliza un algoritmo derebanamiento estáticodentro de los procedimientos.
AndroWish es un intérprete deTcl/Tken el dispositivo, que proporciona una interfaz gráfica (GUI) multiventana, y acceso aBluetooth, USB, network sockets, text-to-speech, speech recognition, sensores, localización (GPS o información de la red), gestor de actividad ("activity manager"),SQLitey sonido. La capa GUI está basada en SDL2. AndroWish se incluye con 337 paquetes Tcl.​
El 12 de julio de 2010 Google anunció la disponibilidad de App Inventor para Android, un entorno de desarrollo visual, basado en Web, para programadores principiantes, basado en la librería Java Open Blocks del MIT y proporcionando acceso, en los dispositivos Android, al GPS, datos de orientación y acelerómetro, funciones del teléfono, mensajes de texto, conversión voz a texto, datos de contacto, almacenamiento permanente y servicios Web, incluyendo inicialmente Amazon y Twitter.​ [[Hal
Abelson]], director de proyecto en el MIT, dijo: "Sólo hemos podido hacerlo porque la arquitectura Android es tan abierta".​ Después de un año de desarrollo,​ la herramienta de edición de bloques se ha utilizado para enseñanza a principiantes en ciencias de computación en Harvard, MIT, Wellesley, Trinity College (Hartford) y en la Universidad de San Francisco, donde
el profesor David Wolber, desarrolló un curso de introducción a la
ciencia de los ordenadores y un libro de enseñanza para estudiantes
que no estudian computación, basado en App Inventor para Android.​​
En la segunda mitad de 2011, Google liberó el código fuente, terminó su servicio Web, 
y proporcionó fondos para la creación en el MIT del "Center for Mobile Learning" ( Centro 
de Aprendizaje para Móviles ) dirigido por el creador de App Inventor Hal Abelson y 
los compañeros y profesores del MIT Eric Klopfer y Mitchel Resnick.​​ La última versión 
creada como resultado de la colaboración entre el MIT y Google fue liberada en febrero del 
2012,​ y la primera versión exclusiva del MIT en marzo del mismo año actualizada en 
App Inventor 2 en diciembre del 2013.​ Actualmente (2014) el MIT se ocupa de 
su mantenimiento.
Basic4androides un producto comercial similar a Simple.​ Está inspirado 
enMicrosoft Visual Basic 6y MicrosoftVisual Studio. Hace la programación 
Android mucho más sencilla para programadores habituales de Visual Basic que 
encuentran dificultades en el uso de Java. Basic4android cuenta con una fuerte 
y activa comunidad en línea de desarrolladores.
HyperNext Android Creator (HAC) es un sistema de desarrollo de
programas dirigido a programadores que empiezan, permitiéndoles crear
sus propias aplicaciones sin necesitar conocimientos de Java y del SDK
de Android. Está basado enHyperCard, que gestiona el software como
una pila de tarjetas en la que sólo una de ellas es visible en un
momento dado y por tanto encaja bien en aplicaciones para teléfonos
móviles, con una sola ventana disponible a la vez. El lenguaje
principal de desarrollo se llama simplementeHyperNexty está
relacionado con el lenguaje de HyperCardsHyperTalk. HyperNext es un
intérprete de un lenguaje similar al Inglés y tiene muchas funciones
para crear aplicaciones Android. Soporta un subconjunto creciente del
SDK de Android incluyendo sus propias versiones de controles gráficos
de interfaz de usuario (GUIs) y ejecuta automáticamente su propio
servicio, de forma que las aplicaciones pueden continuar ejecutándose
y procesando información, sin estar en el frontal del usuario.
Kivyes una libreríaPythonde código abierto, para desarrollarprogramasmultitáctilcon unainterfaz natural de usuario(NUI, natural user interface) para una amplia gama de dispositivos.
Kivy da la posibilidad de mantener una sola aplicación para numerosos 
sistemas operativos ("programar una vez, ejecutar en todas partes"). Kivy 
tiene una herramienta incorporada para distribuir aplicaciones móviles llamada 
Buildozer, sólo disponible en Linux. Buildozer está todavía en fase alpha, 
pero es mucho más sencilla que los sistemas de instalación anteriores de Kivy. Las 
aplicaciones programadas con Kivy pueden enviarse a la plataforma de distribución 
de aplicaciones móviles de Android.
El entornoProcessing, que también utiliza el lenguaje Java, ha soportado 
un modo Android desde la versión 1,5. Puede integrarse con la cámara y los 
sensores del dispositivo utilizando la libreríaKetai.
Qt para Android permite a las aplicaciones Qt 5 funcionar en dispositivos 
Android V2.3.3 ( nivel de API 10) o posteriores.​  Qt es una infraestructura multiplataforma para aplicaciones que puede abarcar a Android, Linux, iOS, Sailfish OS y Windows. 
El desarrollo de aplicaciones Qt se hace enC++standard y JavaScript. El desarrollo 
de aplicaciones en Qt necesita de Android NDK y JDK.​Qt Creatores el entorno de 
desarrollo integrado proporcionado por Qt para desarrollo de aplicaciones multiplataforma.
RFO Basic ( un dialecto del Basic Dartmouth) es un intérprete libre en el dispositivo, 
que proporciona acceso a hardware, sensores, sonido, gráficos, multitactil, sistema 
de ficheros, SQLite, network sockets, FTP, HTTP, Bluetooth, HTML ÇGUI, encryption, SMS, 
teléfono, correo, texto a voz, reconocimiento de voz, GPS, funciones matemáticas, 
funciones de cadenas de caracteres, listas y otras utilidades esenciales. Es un proyecto 
de código abierto que produce ficheros apk de Android independientes.​  El desarrollo 
de RFO Basic está activo y tiene una fuerte comunidad en línea de desarrolladores.
RubyMotiones una herramienta para desarrollar aplicaciones móviles en Ruby. En la versión 
3.0, soporta Android. Las aplicaciones RubyMotion pueden interactuar con el juego 
completo de Java Android APIs de Ruby, utilizar librerías Java de terceros y 
están compiladas estáticamente en el código máquina.​
Saphires una rama del intérprete de código abiertoRebol 3(R3).​ Toda la 
funcionalidad de R3, incluyendo la interfaz gráfica, gráficos, acceso a red, 
acceso a ficheros, análisis sintáctico, y otras funciones principales son 
portables entre Android, Windows, Mac y Linux, sin cambios en el código fuente. 
Saphir utiliza plantillas de "concise dialect" (DSL) para construir interfaces 
gráficas de usuario y realizar operaciones comunes, usando una sintaxis breve y 
legible. El pequeño tamaño del intérprete ( 0,5 - 1,5 megabytes ) complementa el 
diseño utilitario de Saphir.
La libreríaSDLofrece también una opción de desarrollo, al lado de Java, 
permitiendo desarrollar en C y portar de una forma sencilla aplicaciones nativas 
existentes SDL y C. Mediante la inyección de una pequeña librería Java (shim) y deJNI,​ 
puede utilizarse código SDL nativo, permitiendo portabilidad a Android como 
por ejemplo el videojuegoJagged Alliance 2.​
El objetivo de Simple es ser un lenguaje fácil de aprender para la
plataforma Android.​ Simple es un dialecto deBASICpara Android. Sirve
tanto para programadores profesionales como aficionados permitiendo
escribir rápidamente aplicaciones que utilizan los componentes de ejecución de Android.
Parecido a Visual Basic 6 de Microsoft, los programas Simple consisten
en definiciones de formularios ( que contienen componentes ) y código
( con la lógica del programa ). La interacción entre ellos se hace por
medio de eventos lanzados por los componentes. La lógica del programa
consiste en gestores de eventos, que ejecutan código dependiendo del
evento.
El proyecto Simple no tiene mucha actividad.​ La última actualización
de código se realizó en agosto de 2009.
WinDev Mobilees un entorno de desarrollo propietario, creado porPC SOFTy utilizado para crear interfaces gráficas de usuario en
aplicaciones para teléfonos inteligentes y tabletas ( incluyendo Android ). 
UtilizaWLanguagecomo lenguaje de programación, disponible en inglés, 
francés y chino.
El Concurso de Desarrollo Android (ADC Android Developer Challenge )
fue una competición a la aplicación más innovadora para
Android. Google ofreció premios por valor de 10 millones de dólares,
distribuidos en dos fases ADC 1 y ADC 2. ADC 1 aceptaba subscripciones
entre el 2 de enero y el 14 de abril de 2008. Las 50 aplicaciones más
prometedoras, seleccionadas el 12 de mayo del 2008, recibieron 25 000
dólares para soporte a su desarrollo. A principios de septiembre diez
equipos recibieron 275 000 dólares, y otros diez, 100 000 dólares.
ADC II empezó el 27 de mayo de 2009. La primera ronda concluyó el 6 de
octubre. Los ganadores, 200 aplicaciones, se publicaron el 5 de
noviembre. La votación de la segunda ronda empezó ese mismo día y
acabó el 25 de noviembre. Google publicó los ganadores el 30, con
SweetDreams, What the Doodle!? y WaveSecure como los ganadores totales
del concurso.
Hay una comunidad de apoyo al código abierto que construye y comparte
firmware basado en Android con modificaciones y funciones adicionales,
por ejemplo, soporte para audio FLAC y la capacidad de guardar
aplicaciones en la tarjeta microSD. Normalmente, esto implica acceso
como superusuario al dispositivo ("rooting"). "Rooting" permite al
superusuario acceder al sistema operativo con un control completo del
teléfono. "Rooting" también tiene el inconvenientes, al aumentar 
el peligro de intrusiones de software maligno, pérdida de garantía del dispositivo,
altas posibilidades de inutilizarlo, peligro de virus, etc.
Sin embargo hacer "Rooting" permite instalar firmwares adaptados, aunque 
hay que desbloquear también el cargador de arranque (bootloader) del dispositivo.
Sistemas modificados permiten a los usuarios de teléfonos antiguos utilizar 
aplicaciones sólo disponibles en versiones nuevas.
Los paquetes de firmware se actualizan con frecuencia, incorporan
funciones a Android que no se distribuyen oficialmente dentro del
firmware autorizado por un operador, y suelen tener menos
limitaciones. Como ejemplo están CyanogenMod y OMFGB.
El 24 de septiembre de 2009, Google envió una carta solicitando el
cese de estas actividades a Cyanogen, mencionando problemas con la
redistribución de aplicaciones Google con código cerrado en el
firmware modificado. Aunque la mayor parte del S.O. Android es código
abierto, los teléfonos incorporan código propietario de Google para
aplicaciones como Android Market y navegación GPS. Google ha declarado
que estas aplicaciones sólo pueden distribuirse a través de canales de
distribución aprobados con su correspondiente licencia. Cyanogen ha
cumplido los deseos de Google y continúa distribuyendo sus
modificaciones sin código propietario, proporcionando un método para
copiar las aplicaciones con licencia Google durante la instalación y
recuperarlas al finalizar la misma.
Android no utiliza los estándares establecidos de Java, i.e. Java SE y ME, lo cual es un problema para el desarrollo. Esto impide la compatibilidad entre aplicaciones Java escritas para otras plataformas. Android sólo utiliza la sintaxis y la semántica de Java, pero no incorpora en su totalidad las bibliotecas de clases de Java y APIs ( Application Programming Interface ) que acompañan a Java SE o ME. Sin embargo, hay diversas herramientas en el mercado de empresas como Myriad Group y UpOnTek que dan un servicio de conversión entre J2ME y Android.
La Open Handset Alliance, liderada por Google, es la creadora de Android. Los primeros
informes de desarrollo de aplicaciones para la plataforma Android era
confusa. Entre los temas expuestos se incluían errores, falta de
documentación, infraestructura de control de calidad inadecuada,
inexistencia de un sistema de seguimiento de problemas. ( Google
anunció un sistema de seguimiento de incidencias el 18 de enero de
2008 ). En diciembre del 2007, Adam MacBeth, fundador de MergeLab
mobile, expresó "No hay funcionalidad, está mal documentada o no
funciona... desde luego no está lista para el lanzamiento". A pesar de
todo, las aplicaciones dirigidas a Android empezaron aparecer a la
semana siguiente de su aparición. La primera aplicación publicada fue
el juego de la serpiente. El Teléfono de Desarrollo Android es un
dispositivo con el SIM y el hardware desbloqueados, orientado a
desarrolladores avanzados. Así como pueden usarse dispositivos de
consumo normales para probar y utilizar aplicaciones, algunos
programadores prefieren dispositivos desbloqueados y sin contrato.
El 12 de noviembre de 2007 se lanzó una versión de prueba de Android
SDK. El 15 de julio de 2008, El equipo del Concurso de Desarrollo
Android envió accidentalmente un correo electrónico a todos los
participantes anunciando una nueva versión de SDK en el área
restringida de descargas. El correo debía dirigirse únicamente a los
ganadores de la primera ronda. El hecho de que Google proporcionara
una nueva versión de SDK a unos desarrolladores y no a otros, mediante
una acuerdo privado, originó un gran descontento en la comunidad de
desarrolladores de Android.
El 19 de agosto apareció la versión Beta de Android 0.9
SDK. Proporcionaba una API mejorada extendida, mejoras en la
herramientas y un diseño actualizado de la pantalla principal. Hay
instrucciones detalladas de actualización para aquellos que todavía
utilicen versiones anteriores. Android 1.0 SDK ( versión 1) aparece el
23 de septiembre de 2008. Según las notas de la versión, incluía
fundamentalmente correcciones de errores, aunque incorporaba pequeñas
novedades. Incluso incluía varios cambios en el API sobre la versión
0.9. Desde esa fecha, se han distribuido múltiples versiones.