domingo, 4 de marzo de 2012

Android vs Java


Diferencias con una máquina virtual Java normal

      
 En primer lugar, la máquina virtual de Dalvik (Android) toma los archivos generados por las clases Java y los combina en uno o más archivos ejecutables Dalvik (. dex), los cuales a su vez son comprimidos en un sólo fichero .apk (Android Package) en el dispositivo. De esta forma, reutiliza la información duplicada por múltiples archivos .class, reduciendo así la necesidad de espacio (sin comprimir) a la mitad de lo que ocuparía un archivo .jar. 

        En segundo lugar, Google ha mejorado la recolección de basura en la máquina virtual de Dalvik, pero ha preferido omitir just-in-time (JIT), en esta versión por lo menos. La empresa justifica esta elección diciendo que muchas de las bibliotecas centrales de Android, incluyendo las bibliotecas de gráficos, están implementadas en C y C++. Del mismo modo, Android proporciona una biblioteca de C optimizada para acceder a la base de datos SQLite, pero esta biblioteca está encapsulada en un nivel superior del API de Java. Dado que la mayoría del código del núcleo se encuentra en C y C++, Google argumentó que el impacto de la compilación JIT no sería significativo.

        Por último, la máquina virtual de Dalvik utiliza un tipo diferente de montaje para la generación del código, en el que se utilizan los registros como las unidades primarias de almacenamiento de datos en lugar de la pila. Hay que señalar que el código ejecutable final de Android, como resultado de la máquina virtual de Dalvik, no se basa en el bytecode de Java, sino que se basa en los archivos .dex. Esto significa que no se puede ejecutar directamente el Bytecode de Java, sino que hay que comenzar con los archivos .class de Java y luego convertirlos en archivos .dex.
 Formato de un fichero .dex
 Tras comenzar a estudiar las características de Android, pueden observarse algunos aspectos que, si bien no siempre resultan una ventaja frente a sus competidores, sí son interesantes y pueden repercutir positivamente en su elección como plataforma. Por ejemplo:

Diferencias de arquitectura y Librerias
   
 A pesar de que Google evita usar el término demasiado, el hecho de utilizar un lenguaje tan popular como Java ayuda a que cualquier programador mínimamente experimentado pueda comenzar a programar sus aplicaciones sin mayor complicación, además de animar a los que ya estén muy familiarizados. Incluye, además, las API más importantes de este lenguaje como java.util, java.io o java.net.
  La licencia Apache permite a todo el mundo poder estudiar, modificar y distribuir el sistema Android, a la vez que da opción al desarrollo privado mediante la publicación comercial de aplicaciones. Cada desarrollador puede decidir cómo quiere distribuir su propio trabajo.

Como ya es sabido, Android divide todas sus aplicaciones en componentes o bloques básicos que, combinados, constituyen el programa final. Así, tenemos bloques visibles para el usuario mediante interfaces (Activity), bloques que se ejecutan en background fuera de su conocimiento (Service), bloques a la escucha de determinados eventos (Broadcast Receiver) y bloques que ofrecen contenidos a otras aplicaciones (Content Providers). Esta filosofía es original y ayuda a modularizar funcionalmente las aplicaciones.

·         La delegación de acciones en otras aplicaciones mediante Intents es otro de los aspectos más innovadores ofrecidos por Android. Mediante un Intent, la aplicación simplemente expresa lo que desea hacer y es el sistema el encargado de buscar la aplicación más adecuada (para llamar, mandar un correo electrónico, abrir una página web, etc.). Así mismo, las aplicaciones pueden anunciar a las demás que están preparadas para poder atender determinados tipos de Intents.

·         La construcción de interfaces de usuario ha sido un aspecto muy cuidado, no sólo por la amplia colección de elementos y diseños incorporados, sino por la posibilidad de ser definidas tanto en el código fuente como mediante documentos XML externos.

·         El acceso a los recursos del dispositivo, como GPS, Wi-Fi, etc., se convierte en una tarea fácil y simple gracias a las API del SDK.

·         La declaración y uso de recursos externos, tales como imágenes, cadenas de texto, valores numéricos, o incluso diferentes modelos de interfaz de usuario y de diseños es cómoda y fácil de realizar.
En cuanto a las librerías estas son algunas diferencias:
·         APIS que controlan el ciclo de vida de la aplicación.
·            ANDROID: Principalmente se usan android.app.Activity y android.app.ListActivity. 
·           JAVA: Principalmente se usa javax.microedition.midlet.MIDLET.

·          APIS que definen la interfaz de usuario de la aplicación. 
  Alto Nivel
·              ANDROID: Principalmente se usan android.widget.ArrayAdapter y android.widget.ListAdapter 
·             JAVA: Esencialmente son javax.microedition.lcdui.Display yjavax.microedition.lcdui.Displayable
  Bajo Nivel
·              ANDROID: Principalmente se usan android.graphics.drawable.Drawable y android.view.View
·             JAVA: Esencialmente son javax.microedition.lcdui.game.GameCanvas y javax.microedition.lcdui.Displayable.Canvas
  
·          APIS media: Bluetooth, Multimedia y sensores.
  Bluetooth
·              ANDROID: Android ofrece la siguiente librería para usar esta interfaz, android.bluetooth.
·             JAVA: CLDC tiene un paquete opcional para usar Bluetooth (JSR 82): “Bluetooth API”.
  Multimedia
·              ANDROID: Ofrece la siguiente librería para reproducción de audio y vídeo, android.media: MediaPlayer.
·             JAVA: CLDC ofrece el paquete opcional “MMAPI” y un soporte básico en la API de MIDP 2.0: Manager, Playery Control en los paquetes javax.microedition.media y javax.microedition.media.control.
   Sensores y acelerómetro
·              ANDROID:Android proporciona la clase  android.hardware.SensorManager, la cual sirve  para  manejar el sensor de orientación, y el acelerómetro.
·              JAVA: CLDC tiene un paquete opcional para gestionar los sensores conectados al móvil (JSR 256): “Mobile Sensor API”.

·         Descriptores. 
·              ANDROID: AndroidManifest.xml
 Los componentes que necesita la aplicación se enumeran en un archivo llamado AndroidManifest.xml, el cual es un fichero XML donde se declaran los componentes y cuáles son sus capacidades y requerimientos. 
·              JAVA: Descriptor JAD
  Permite describir las propiedades de la aplicación y los componentes que forman parte de la misma. De esta manera, el AMS (Application Management System) podrá verificar si es posible instalar la aplicación antes de descargarla. Es un fichero de texto con extensión .jad.

  Arquitectura: Ciclo de vida de la aplicación
·          ANDROID: En Android existen 4 grandes bloques de construcción: Activity, Intent, Service y Content Provider, de los cuales, el bloque Activity es el componente más habitual de las aplicaciones para Android, es decir, un componente Activity refleja una determinada actividad llevada a cabo por una aplicación, y que lleva asociada típicamente una ventana o interfaz de usuario. Los cuatro posibles estados que definen su ciclo de vida son: Activa, pausada, parada y reiniciada. 
·         JAVA: La clase encargada del ciclo de vida de una aplicación, es la clase MIDlet, y los métodos que gestionan el ciclo de vida de una aplicación son tres: activa, pausada y destruida.

 Máquina Virtuales: KVM y CVM (Java ME) vs. Dalvik (Android)
·             ANDROID:La JVM que utiliza Android es la máquina virtual DalvikVM. En ella podemos encontrar una gran diferencia con respecto a la máquina virtual Java (JVM), ya que la máquina virtual de Google no está basada en una pila.
·             JAVA: En el perfil MIDP, la JVM es la máquina virtual KVM, la cual es la máquina virtual más pequeña desarrollada por Sun, y se usa con la configuración CLDC. Se trata de una implementación reducida y especialmente orientada a dispositivos con bajas capacidades computacionales y de memoria. 

 Herencia de interfaz ráfica de Java
·            ANDROID: Android hereda las siguientes librerías de Java: 
·           java.awt.font.* Para definir propiedades del estilo y tamaño de la letra. (Subconjunto de J2SE)
·           java.beans.*: Para definir beans con los métodos get y set.(Subconjunto de J2SE)
·           java.io.*: Conexión genérica.
·           java.lang.*  Clases de la VM. (Subconjunto de J2SE)
·           java.math.* Para operaciones matemáticas.
·           java.nio.*  Para definir buffers.
·           java.security.*  Clases para definir  el modelo de seguridad. (Subconjunto de J2SE)
·           java.sql.* API para usar JDBC y gestión de base de datos con SQL.
·           java.text.* Para definir diferentes formatos de texto.
·           java.util.* Clases para utilidades estándar. (Subconjunto de J2SE)
·           javax.crypto.* Clases para realizar operaciones criptográficas.
·           javax.microedition.khronos.* Clases orientadas a diseño de interfaces 3D.
·           javax.net.* Clases para aplicaciones de Red. (Subconjunto de J2SE)
·           javax.xml.* Para usar lenguaje XML en el Descriptor de la aplicación.

·           JAVA:  El perfil MIDP, hereda las siguientes librerías de Java:
·         java.io.* Clases y paquetes estándar de E/S. (Subconjunto de J2SE)
·         java.lang.* Clases e interfaces de la VM. (Subconjunto de J2SE)
·         java.util.* Clases, interfaces y utilidades estándar. (Subconjunto de J2SE)
  Mensajería instantánea: SIP(Java ME) vs. XMPP(Android)
·             ANDROID: Android ofrece una API para desarrollar protocolos de mensajería instantánea, concretamente                         XMPP (Extensible Messaging and Presence Protocol), protocolo de intercambio de mensajes basado en XML.
·             JAVA: Java ME con el perfil MIDP ofrece un paquete opcional para utilizar protocolos de mensajería instantánea, concretamente SIP (Session Initition Protocol).

Almacenamiento de Datos: RMS(Java ME) vs. SQLite(Android)
·              ANDROID: Android ofrece la superclase android.content.ContentProvider para el manejo y almacenamiento de datos, conocido también como “proveedor de contenido”. Este bloque de construcción, permite compartir datos entre procesos y aplicaciones.
 Además, Android soporta BBDD SQLite y proporciona funciones de control que permiten almacenar datos complejos en forma de objeto.
·             JAVA: MIDP ofrece la librería javax.microedition.rms para memoria persistente, lo cual consiste en una base de datos binaria sencilla (sin usar SQL) orientada a almacenes de registros (RecordStore).

 Navegador (Java ME) vs. WebKit (Android)
·            ANDROID: El SO Android dispone de un navegador integrado basado en el motor del proyecto abierto WebKit.
·            JAVA: CLDC ofrece la posibilidad de desarrollar clientes web con “Web Services APIs”.

 Portabilidad de Aplicaciones
·           ANDROID: En este ámbito, Java ME tiene una enorme ventaja sobre Android, ya que tiene una VM “totalmente Java”, mientras que la VMde Google (Dalvik), a pesar de sus grandes ventajas ya comentadas, hace que la migración de una aplicación open-source de Linux x86 sea realmente dura. Todos los interfaces de usuario y la lógica han de ser reescritos desde cero.
·           JAVA: La existencia de diferentes perfiles en Java ME consiguen garantizar la portabilidad de las aplicaciones, que utilizan un API no tan complejo y extenso como en el caso de Android, pero suficiente para que el código sea portable entre diferentes dispositivos móviles.

¿Puede ejecutarse un Proyecto Java ME en un móvil con ANDROID?

·         Claro que si, usando MicroEmu (Emulador de J2ME hecho en Java) o bien con el J2ME MIDP Runner.
Diferencias en aspectos de programación
·         ANDROID: Permite desarrollar aplicaciones en los siguientes entornos de programación: 
         Eclipse
         Netbeans
·         JAVA: Permite desarrollar aplicaciones en los siguientes entornos de programación: 
        J2ME Wireless Toolkit 2.2
        J2ME WTK 2.5
        Java ME Platform SDK 3.0
       Netbeans: Mobility Pack 4.1
                 Eclipse: Plug-in EclipseME

   Midlet(Java ME) vs. Activity(Android)
·         ANDROID:  En Android una pantalla (asociada a una interfaz de usuario) se corresponde
 con la clase Activity, y para pasar de una pantalla a otra se utiliza la clase Intent de
 la siguiente manera:
                          Intent intentLista = new Intent();      intentLista.setClass(Clase1.this,Lista.class);//origen,destino
                                     startActivity(intentList);//para pasar a la pantalla asociada a la clase Lista 
·         JAVA:  En MIDP para pasar de una pantalla otra se utiliza la clase Display de la siguiente
manera:
                                            this.midlet.getDisplay().setCurrent(this.midlet.getLista());
Donde el método getLista() devuelve un objeto del tipo List de la API de alto nivel
 Además, se usa la clase Command para añadir un comando al Displayable y poder cambiar
de una pantalla a otra, utilizando el siguiente método:
                                    addComand(Command)
  Modelo de seguridad
·         ANDROID: En Android se hace en el fichero AndroidManifest.xml. Por ejemplo, si
 queremos acceder a la API de bajo nivel, ActivityManager, para obtener el número
de procesos en ejecución, debemos añadir la siguiente línea al descriptor:
 <uses-permission id="android.permission.GET_TASKS" android:name="GET_TASKS"/> 
·         JAVA:  CLDC sigue el modelo “sandbox” y MIDP 2.0  proporciona un modelo de seguridad
a nivel de aplicaciónmediante firmas digitales que permiten determinar si una aplicación es
 fiable o no asociada a un dominio de seguridad. Las políticas permiten especificar los
permisos asignados a cada dominio. 
 Gestión de eventos (escuchadores)
·          ANDROID: Principalmente se usan android.view.View.OnClickListener
 (para capturar el evento OnClick de cualquier elemento del Layout, por ejemplo un botón) y android.view.MenuItem.onMenuItemSelected (cuando se usa la tecla Menú
para interactuar con el usuario, para capturar el evento OnClick de una de las
opciones del menú).
·         JAVA: Sigue el modelo de manejo de eventos y escuchadores definidos en Java SE,
así tenemos fuentes de eventos que mantiene escuchadores que están interesados en saber cuándo ocurre un evento y proporciona métodos que permite que los escuchadores se añadan a dicha lista. Así cuando la fuente genera un evento, se lo notifica al escuchador correspondiente para que procese el evento, ejecutando la acción programada. Además, con la API de bajo nivel se pueden programas eventos del teclado y puntero. Por ejemplo, en la clase javax.microedition.lcdui.game.GameCanvas se gestionan los eventos de teclado por polling utilizando el método getKeyStates(). 
  Propiedades del sistema
·         ANDROID: Las propiedades del sistema se definen en el fichero AndroidManifest.xml, el cual describe la aplicación, los permisos necesarios, etc… Todos los proyectos Android tienen este archivo que, entre otras cosas, nos dará la posibilidad depedir los permisos que vayamos necesitando, y definirá la actividad inicial que se ejecutará. 
·         JAVA: Las propiedades del sistema se definen en el fichero descriptor de la aplicación (JAD) y se obtienen viajava.lang.System y javax.microedition.MIDlet, por ejemplo:
                        System.getproperty(String key)

   Uso de memoria
·         ANDROID: En este aspecto Android es el ganador ya que los terminales Android no imponen restricciones de memoria, debido a que cada aplicación Android corre su propio proceso, con su propia instancia de la VM Dalvik. Dalvik permite el uso eficiente de dichas instancias. Ejecuta ficheros en el formato .dex optimizado para el consumo mínimo de memoria. 
·         JAVA: Los sistemas J2ME tienen restricciones importantes de memoria para el almacenamiento y ejecución de aplicaciones, restricciones por debajo de 50K.

  Uso de hilos (contextos)
·         ANDROID:  Ofrece el paquete java.util.concurrent, heredado de java, y android.os para mecanismos de sincronización de procesos, tareas, hilos y actividades. 
·            La principal diferencia entre las dos tecnologías es que Android ofrece un “entorno multitarea”, es decir, cada aplicaciónde Android corre en su propio proceso, el cual es creado por la aplicación cuando se ejecuta y permanece hasta que la aplicación deja de trabajar o el sistema necesita memoria para otras aplicaciones. Una característica fundamental de Android es que el ciclo de vida de una aplicación  no está controlado por la misma aplicación sino que lo determina el sistema a partir de una combinación de estados como pueden ser que aplicaciones están funcionando, que prioridad tienen para el usuario y cuanta memoria queda disponible en el sistema. De esta manera,  Android sitúa cada proceso en una jerarquía de "importancia", concretamente sigue el estándar POSIX, de modo que la política de eliminación de procesos esTRANSPARENTE para el programador, ya que la capa inferior de la plataforma está compuesta por un núcleo Linux (versión 2.6) que se usa como capa de abstracción de hardware (HAL, Hardware Abstraction Layer). Si el programador desea ver los procesos en ejecución a bajo nivel, la única posibilidad es usar la herramienta AIDL, la cual ofrece al programador la visualización de las llamadas del SO a los métodos IPC.
·         JAVA: Java ME, al igual que Android ofrece un entorno “multithreaded”, ya que permite realizar múltiples actividades simultáneamente, pero se diferencia en que el Planificador de hilos (el cambio de contexto) no lo puede controlar el programador sino que puede suceder en cualquier momento. Aún así, existen “trucos” para que el programador sea capaz de gestionar varios hilos dentro de una misma aplicación.


Finalmente el proyecto de como seria un HELLO WORD en las dos tecnologias:
Android:


Java:

sábado, 3 de marzo de 2012

Tipos de aplicaciones en Android



La mayoría de las aplicaciones de Android se caen en una o dos de estas categorías:
·         Foreground (De Primer Plano). Estas aplicaciones solo se utlizan cuando el usuario las ve y las usa. En cuanto la minimiza o cierra, deja de actuar. Los juegos son un ejemplo típico de estas aplicaciones.
·         Background (De fondo). Estas aplicaciones tienen una interacción limitada con el usuario, pasan la mayoría de su vida escondidas, esperando algun evento. Aplicaciones para responder SMS o interactuar con llamadas son ejemplos.
·         Intermittent (Intermitentes). Son aplicaciones que son interactivas, pero hacen mucho de su trabajo de fondo, notificando a los usuarios cuando es apropiado. Servicios de Chat y Música son ejemplos.
·         Widget, Live Wallpapers. Son aplicaciones que viven solamente en el home-screen del aparato.
Al crear una aplicación, podemos utilizar todas las técnicas mencionadas anteriormente, pero es importante considerar como la utilizará el usuario y diseñar la interfaz apropiadamente.
Aplicaciones de Primer Plano
Al crear aplicaciones de primer plano, necesitamos considerar el Ciclo de Vida de Actividades (detallado mas delante), para que la Activity pueda cambiar de primer a segundo plano sin mayor problema.
Las aplicaciones tienen poco control sobre su ciclo de vida, una aplicacion que requiere recursos matará a las que no estan en uso y tienen poca prioridad, por lo que es necesario guardar el estado de la aplicación cuando ésta deja el Primer Plano, y cargarlo nuevamente cuando el usuario vuelve a utilizarla, de manera que ve exactamente lo mismo que tenía anteriormente.
Servicios de Fondo e Intent Receivers
Estas aplicaciones corren silenciosamente, esperando algún evento que las despierte, como cambios de hardware o recibir un SMS o inclusive una señal de otra aplicación.
Aún que es posible crear una aplicación 100% invisible, es preferible mostrar al usuario una especie de dialogo de configuración y por lo menos confirmar con el usuario si en verdad quiere que el servicio esté corriendo de fondo.
Aplicaciones Intermitentes
Son aplicaciones que combinan los dos tipos anteriores, como aplicaciones de Chat e Email. El usuario configura la aplicación, y deja el servicio de fondo esperando a recibir mensajes o correos para despues contestarlo.
Este tipo de aplicaciones deben estar concientes del estado en el que estan, para evitar actualizar la interfáz gráfica si el usuario on esta usando la aplicación, y notificar al usuario mientras que la aplicación corre de fondo.
Widgets y Live Wallpapers
Los Live Wallpapers fueron introducidos en Android 2.0, pero los Widgets han sido parte de Android desde sus principios. Estos son componentes que permiten al usuario interactuar con el teléfono sin necesidad de lanzar la aplicación. Los Live Wallpapers permiten animar el Wallpaper e inclusive permitir al usuario interactuar con el mismo. Pueden accesar componentes como el porcentaje de batería, o el acelerometro y reaccionar según los valores que reciben.
Los Widgets pueden ser componentes estaticos o interactivos, y generalmente se utilizan para desplegar el porcentaje de batería, el clima o la fecha y la hora o información sobre la aplicación (Últimos Tweets recibidos, etc). 
Según esta jerarquía, Android prioriza los procesos existentes en el sistema y decide cuáles han de ser eliminados, con el fin de liberar recursos y poder lanzar la aplicación requerida.
 Para los procesos en segundo plano, existe una lista llamada LRU (Least Recently Used). En función de esta lista se van eliminando los procesos; los primeros que se eliminan son aquellos que llevan más tiempo sin usarse. Así el sistema se asegura de mantener vivos los procesos que se han usado recientemente.

Bibliografía:
https://sites.google.com/site/swcuc3m/home/android/generalidades/aplicacionespag2

Android market


Adelantando un poco el proceso del desarrollo de una aplicación, con esta entrada pretendo mostrar como poner nuestra aplicación (una ves que ya la tenemos), en el sitio mas importante y oficial de android, el “Android market”. Si bien, podemos poner nuestra aplicación de forma gratuita para todo el mundo o tambien si queremos sacer algo de dinero, podemos cobrar por la descarga de la aplicación.
Primero explicare como se le llama a este proceso.
Marketing móvil
Podemos definir el marketing móvil o mobile marketing como la actividad dedicada al diseño, implantación y ejecución de acciones de márketing realizadas a través de dispositivos móviles.
Los dispositivos móviles son soportes digitales pequeños, de fácil uso y manejo, que permiten su traslado a cualquier lugar sin dificultad y cuyo consumo se hace sin necesidad de conexión eléctrica. Entre éstos, los más importantes son: Teléfonos móviles, PDA (Personal Digital Assistant), iPods, Consolas portátiles, Navegadores GPS, etc.
Las principales acciones de márketing móvil que se realizan en la actualidad son:
Se puede resumir en cuatro modalidades las formas en que se agrupan las diversas acciones de marketing móvil: mensajería (SMS y MMS), Internet móvil, voz y música (modalidades en el RBT- Ring Back Tone) y aplicaciones (popularmente "Apps").


Market

Android Market es una tienda de software en línea desarrollada por Google para los dispositivos Android. Es una aplicación ("app") llamada "Mercado" que está preinstalada en la mayoría de los dispositivos Android y que permite a los usuarios buscar y descargar aplicaciones publicadas por desarrolladores terceros, alojada en Android Market. Los usuarios también pueden buscar y obtener información sobre aplicaciones en esta página web. En enero de 2012, Android Market dispone de más de 500.000 aplicaciones

Historia
El 17 de marzo de 2009, alrededor de 2.300 aplicaciones estaban disponibles en Android Market, de acuerdo con el director técnico de T-Mobile Cole Brodman.2 El 10 de mayo de 2011, durante Google I/O, Google anunció que en Android Market figuran 200.000 aplicaciones y habían sido instaladas 4.500.000.000 aplicaciones.

Interfaz
Android Market tiene un acceso fácil y rápido a sus aplicaciones. Las aplicaciones son creadas por desarrolladores de todo el mundo y posteriormente puntuadas por los usuarios de Android.
El menú tiene las siguientes opciones:
·         Mostrado: avanza por los iconos de la parte superior para ver las aplicaciones mostradas.
·         Aplicaciones: examina todas las aplicaciones o busca aplicaciones por categorías.
·         Juegos: examina todos los juegos o busca juegos por categorías.
·         Búsqueda: busca aplicaciones en Android Market.
·         Mis descargas: visualiza las aplicaciones que están instaladas en el dispositivo.
Las categorías de juegos y aplicaciones, del menú principal proporcionan submenús para que la búsqueda sea más sencilla. Los usuarios tienen la posibilidad de valorar las aplicaciones mediante un sistema similar a YouTube, con una escala del 1 al 5, también ofrece la posibilidad de poner comentarios sobre la aplicación. La novedad de la nueva versión de Android Market es también la posibilidad de añadir capturas de pantalla de su aplicación.

Aplicaciones

Las aplicaciones móviles están especialmente diseñadas para dispositivos portátiles. Estas pueden ser gratuitas o de pago. Inicialmente, las aplicaciones tenían una función puramente recreativa. Sin embargo, han ido evolucionando en aplicaciones más útiles, como son las aplicaciones para el registro de gastos, información deportiva, guías de restaurantes, callejeros... Actualmente las nuevas aplicaciones más innovadoras son las llamadas de realidad aumentada que combinan elementos reales y virtuales.
El tipo de aplicaciones Android se clasifican de la siguiente manera: Compras, comunicación, cómics, deportes, estilo de vida, finanzas, herramientas, multimedia, noticias y metereologia, ocio, productividad, referencia, salud, sociedad, temas, viajes, demostración y bibliotecas de software. Unas de las aplicaciones más importantes para dispositivos móviles son los juegos, y estos reciben un trato especial dentro de las aplicaciones su clasificación es la siguiente: Arcade y acción, casuales, juegos de cartas, casino, puzzles y juegos para ejercitar la mente.

Aplicaciones de pago

Para vender aplicaciones debes crearte una cuenta de comerciante de Google Checkout, y subir el archivo de la aplicación a los servidores. Para crearte una cuenta de comerciante deberás proporcionar información privada, de contacto y financiera. El precio de la aplicación se puede cambiar en cualquier momento siempre y cuando no la hayas publicado anteriormente como gratuita. Los intervalos de precios permitidos son entre 0,99 y 200 dólares estadounidenses, o entre 0,50 y 100 libras esterlinas. Los desarrolladores de las aplicaciones de pago reciben un 70% del precio total de la aplicación, mientras que el 30% restante es destinado a las empresas. El beneficio obtenido de ‘Android Market’ es pagado a los desarrolladores a través sus cuentas en el sistema Google Checkout.
Desarrolladores
La gran novedad que aporta Android Market hace referencia a los desarrolladores: estos serán capaces de hacer su contenido disponible en un servicio abierto el servicio de Google que ofrece una retroalimentación y sistema de calificación similar a YouTube. Los desarrolladores tendrán un entorno abierto y sin obstáculos para hacer su contenido disponible. El contenido puede subirse al mercado después de tres pasos: registrarse como comerciante, subir y describir su contenido y publicarlo. Para registrarse como desarrollador y poder subir aplicaciones hay que pagar una cuota de registro (US$ 25,00) con tarjeta de crédito (mediante Google Checkout).
Disponibilidad para desarrolladores
En un primer momento sólo los desarrolladores en Estados Unidos y Reino Unido tenían soporte para publicar aplicaciones de pago. Actualmente Google ha aumentado esa lista con países como Austria, Francia, Alemania, Italia, España y Países Bajos. Por el contrario la lista de países con disponibilidad de desarrolladores que pueden distribuir aplicaciones gratuitas es: Australia, Austria, República Checa, Francia, Alemania, Italia, Países Bajos, Polonia, Singapur, España, Reino Unido, Estados Unidos y Venezuela.

Competencia
Las tiendas por Internet están cada vez más en alza y más si se trata de tiendas de aplicaciones para los teléfonos móviles. No es de extrañar que las principales plataformas de móviles decidan crear portales donde poder descargar o comprar todas las aplicaciones posibles. Entre estas hablamos de dos de las más importantes, la App Store de Apple y la Android Market de Google pero también hay otras como Ovi Store de Nokia, App Place de Toshiba Market Place, App World de Blackberry, Microsoft Windows Phone Marketplace y Palm App Catalog. El desarrollo de aplicaciones para el iPhone no está siendo de fácil acceso como consecuencia de la política de admisión de aplicaciones de Apple que es muy restrictiva. En cambio Android Market no hace tantas excepciones con las aplicaciones, aceptando todas, propias o de desarrolladores, gracias a su herramienta Android SDK. Android Market al ser más reciente cuenta con unas 105.000 aplicaciones de las cuales el 62,2% son gratuitas. En cambio App Store contiene unas 220.000 aplicaciones de las cuales sólo el 23% son gratuitas. Por lo que se refiere al número de descargas App Store no tiene competencia, al menos por ahora, ya que es muy superior a sus competidores. En España la evolución de Android Market parece ser mejor comparada con el nivel mundial.



Ventas de Android
Ahora vamos a ver porque es importante y para que sirve poner nuestra aplicación en el market de android.
Los estudios pueden ser más o menos certeros, pero considero que el realizado por Distimo es muy interesante para compartirlo con vosotros en nuestra página. Trata sobre Android Market y el problema que tiene la plataforma de distribución para que se consuman aplicaciones de pago.
De cara a los desarrolladores es un problema importante, y aunque no es la única forma de conseguir rentabilidad de sus aplicaciones, sí es una muy importante y directa. Según los datos de Distimo, más del 95% de las aplicaciones descargadas en abril eran gratuitas.
Los datos duelen más si nos vamos al número de aplicaciones de pago que han pasado el medio millón de descargas: concretamente dos. En lo que respecta a desarrollos gratuitos, son 96 millones de aplicaciones los que han pasado la barrera de los cinco millones.
Si nos vamos a la App Store de Apple, seis aplicaciones de pago pasaron el medio millón de descargas en Estados Unidos, mientras que en el caso de Android Market hablamos a nivel mundial. Se estima que en App Store, el porcentaje de descargas de pago está por encima del 15%.
Es complicado de entender este fenómeno teniendo en cuenta que no paran de llegar desarrolladores y el público está respondiendo muy bien, cada vez la cuota de mercado de Android es más grande. Existen diferentes teorías al respecto, algunas con tintes de manipulación por parte de Google.
Muchos argumentan que posiblemente el problema siga encontrándose en los sistemas de pago, otros apuntan a que la forma de descubrir aplicaciones es deficiente, y alguno incluso apunta a que a Google le gustan mucho más las aplicaciones gratuitas con publicidad dentro.
Siguiendo con las estadísticas, Distimo nos informa que el 80% de las aplicaciones de pago en Android Market han sido descargadas menos de 100 veces. Está claro que algo no funciona en lo que respecta a la venta directa.
·         En mayo de este año Google ha introducido mejoras en la plataforma de distribución, empezando por novedades en la versión web de Android Market. La empresa del buscador sigue trabajando en este sentido también en la versión a la que podemos acceder desde los terminales.
·         Las otras tiendas de aplicaciones. Amazon App Store llega muy fuerte, con unos criterios de calidad interesantes y material exclusivo, además de toda la experiencia de la empresa en la venta online de contenidos.
·         Conforme pasen los meses, Android será una plataforma más apetecible para los desarrolladores, ya que con las nuevas versiones del sistema, tablets y teléfonos serán más parecidos de cara a las aplicaciones.
Dejando la rentabilidad a un lado, actualmente Android Market está superando las 200.000 aplicaciones, con más de 300 dispositivos diferentes accediendo a ellas, y se han realizado cerca de 5.000 millones de instalaciones.

Subir aplicación:
Ahora un pequeño tutorial de iniciación para subir nuestra aplicación.
Subir aplicaciones a Android Market es muy fácil una vez que te has registrado. En la pantalla principal de la consola para desarrolladores, selecciona "Subir aplicaciones". Tendrás que completar la información de tu aplicación indicada a continuación:


1) Registro:

3) Pago de 25 dollares para poder subir


Especificaciones
Hay que tener en cuenta las especificaciones de las aplicaciones que podemos subir.
·         Tamaño de archivo APK: el tamaño máximo admitido es 50 MB.
·         Borrador de archivo .apk de aplicación: al subir un archivo .apk, se puede guardar como un borrador mientras editas el resto de aspectos de la lista.
·         Ten en cuenta que los nombres de paquetes de los archivos de aplicaciones son únicos y permanentes, por lo que debes elegirlos con cuidado. Los nombres de paquetes no se pueden eliminar ni utilizar en el futuro.
·         Capturas de pantalla: son necesarias dos capturas de pantalla. Las seis restantes son opcionales.
·         Icono de aplicación de alta resolución (obligatorio)
·         Gráfico promocional (opcional)
·         Gráfico de funciones (opcional)
·         Vídeo promocional (opcional)
Especificación de detalles
·         Idioma: sirve para indicar el idioma de la aplicación. El idioma predeterminado es el inglés de EE.UU. La lista de idiomas irá aumentando a medida que los dispositivos con la tecnología de Android estén disponibles en más idiomas.
·         Título: es el nombre de la aplicación tal como te gustaría que apareciera en Android Market. Puedes añadir un nombre por idioma.
·         Descripción: es la descripción de tu aplicación que se puede consultar en Android Market. Utiliza la función de traducción para traducir la descripción de tu aplicación a otros idiomas. En este campo, puedes utilizar un máximo de 4.000 caracteres.

Nota: el uso de palabras clave repetitivas e irrelevantes en la descripción promocional, en la descripción o en el título de la aplicación ofrece al usuario una experiencia no deseada y puede derivar en la suspensión de la aplicación.

·         Cambios recientes: la función de cambios recientes te ofrece la oportunidad de añadir notas sobre los cambios específicos de la versión más reciente de tu aplicación. Utiliza el campo de cambios recientes para informar a tus usuarios sobre los cambios que se han realizado en la aplicación.
·         Texto promocional: es el texto situado junto al gráfico promocional en lugares destacados de Android Market.
·         Tipo de aplicación: Android Market se divide en dos tipos de aplicaciones principales ("Aplicaciones" y "Juegos"). Elige uno.
·         Categoría: debes elegir una categoría para la aplicación. 
Opciones de publicación
·         Protección contra copias: la protección contra copias puede contribuir a evitar que se copien las aplicaciones desde un dispositivo. Aumenta la cantidad de memoria necesaria para instalar la aplicación en el teléfono. Pensamos que la protección contra copias quedará obsoleta en breve.
·         Ubicaciones: son las ubicaciones en las que puedes distribuir tus aplicaciones.
·         No todas las ubicaciones de la lista actual tienen usuarios con dispositivos con la tecnología de Android.
·         Puedes seleccionar las ubicaciones de una en una o elegir la opción "Todas las ubicaciones actuales y futuras". Esta opción significa que se habilitarán más ubicaciones de distribución a medida que las vayamos habilitando para tu aplicación. Antes de comprobar esta opción, consulta la página de cumplimiento de las leyes de exportación.
·         Nota: en estos momentos, sólo puedes vender aplicaciones a los usuarios que se encuentran en estas ubicaciones.  
Información de contacto

·         Debes elegir un canal de asistencia para tu aplicación: sitio web, correo electrónico o teléfono.
·         Los usuarios de Android Market verán esta información.
·         Puedes elegir más de un canal de asistencia.

Bibliografía:
http://www.distimo.com/blog/2011_05_in-depth-view-on-download-volumes-in-the-google-android-market/
https://market.android.com/?hl=es
http://es.wikipedia.org/wiki/Marketing_movil
http://support.google.com/androidmarket/developer/bin/answer.py?hl=es&answer=113469