lunes, 22 de octubre de 2012

Diseñando aplicaciones Android para diferentes tamaños de pantalla

Hace unos días hemos publicado en Google Play nuestra segunda aplicación Android llamada Contacts Backup. Sobre ella hablaré en otra entrada. Por ahora basta decir que permite guardar una copia de seguridad de los contactos del dispositivo y restaurarla en el mismo dispositivo o en otro. También permite exportar una lista de teléfonos y/o direcciones de email a un archivo externo en varios formatos: Excel, HTML, texto plano, etc.

Para dar el toque final a la aplicación he tenido que buscar mucha información sobre como diseñar aplicaciones Android para diferentes tamaños de pantalla. El tema es muy interesante, pero realmente hay poca documentación. Y menos aun es español. En esta entrada voy a poner un listado de artículos relacionados con este tema que he ido encontrando.

Lista de enlaces.

Algunos conceptos.

Recordemos que en Android hay que diferenciar entre el tamaño de la pantalla, expresada en pixels, y la densidad de la misma, expresada en PPP (Puntos Por Pulgada). Los dispositivos Android mezclan estas dos características.

  • Existen cuatro tamaños de pantalla estándar: pequeño (small), normal, grande (large) y extra grande (xlarge).
  • Existen cuatro densidades estándar: low (ldpi), medium (mdpi), high (hdpi) y extra high (xhdpi).
  • Además en el mismo dispositivo puede variar la orientación de la pantalla entre portrait (vertical) y landscape (horizontal), lo que a efectos prácticos es como tener dos dispositivos.

A la hora de crear nuestras pantallas en Android (layouts) tendremos en cuenta los distintos tamaños de pantalla. Para ello crearemos carpetas para los distintos tamaños de pantalla y duplicaremos los archivos en cada una de ellas.

  • layout: Orientación vertical y pantalla normal.
  • layout-land: Orientación horizontal y pantalla normal.
  • layout-large: Orientación vertical y pantalla grande.
  • layout-large-land: Orientación horizontal y pantalla grande.
  • layout-small: Orientación vertical y pantalla pequeña.
  • layout-small-land: Orientación horizontal y pantalla pequeña.
  • layout-xlarge: Orientación vertical y pantalla extra grande.
  • layout-xlarge-land: Orientación horizontal y pantalla extra grande.

Por otro lado a la hora de crear las imágenes del proyecto tendremos que tener en cuenta las distintas densidades. Para ello también crearemos carpetas con distintos nombres:

  • drawable-ldpi: 75% de tamaño.
  • drawable-mdpi: 100% de tamaño.
  • drawable-hdpi: 150% de tamaño.
  • drawable-xhdpi: 200% de tamaño.

lunes, 15 de octubre de 2012

Publicando aplicaciones Android (III)

En los capítulos I y II de nuestra mini guía para publicar aplicaciones Android hemos explicado respectivamente como generar un archivo .apk firmado digitalmente y como publicar una aplicación en Google Play. Llegados a este punto muchos desarrolladores quieren sacar algún rendimiento de su trabajo, monetizar su aplicación, lo cual es perfectamente razonable. Para ello hay dos estrategias:

  • Poner la aplicación de pago. Ya sea por unos pocos céntimos o por varios euros, si quieres poner tu aplicación de pago debes asegurarte antes de que tu aplicación aporta algo que ninguna otra hace. Sino lo más probable es que nadie la descargue.

  • Añadir publicidad a la aplicación. Esta estrategia suele ser la correcta para la mayoría de aplicaciones. Otra estrategia puede ser subir dos versiones de aplicación: una gratuita con publicidad y otra de pago, libre de publicidad.

Por ello en esta entrada voy a intentar explicar como añadir publicidad a una aplicación Android usando Google AdMob, la plataforma publicitaria para móviles que Google adquirió en 2010.

La propia Google tiene publicada una completísima guía para Android de anuncios de Google AdMob que, a diferencia del SDK oficial de Android, está disponible tanto en Español como en Inglés. Por ello aquí sólo vamos a comentar los aspectos más prácticos.

Primeros pasos.

Google AdMob usa una pequeña parte de la pantalla del dispositivo para mostrar anuncios publicitarios (Banners en inglés). Si el usuario pulsa sobre el banner es dirigido a un sitio web o bien a Google Play. El desarrollador cobra unos céntimos por cada clic hecho por un usuario en la publicidad.

Lo primero que habrá que hacer es registrarse en AdMob. Para ello hay que entrar en http://es.admob.com/ (o bien en http://www.google.es/ads/admob/), pulsar el botón Regístrese en AdMob y seguir los pasos. Teniendo una cuenta Google es muy sencillo.

Una vez nos hemos registrado en AdMob, habiendo introducido los datos de contacto, los datos de facturación y los datos legales (número de IVA, etc.) ya podemos crear nuestra primera campaña. Para ello lo primero de todo es tener subida una aplicación a Google Play. No es necesario que este publicada, pero sí que tiene que estar subida. Entonces entramos en AdMob con nuestro usuario y contraseña, vamos a Sitios y aplicaciones y pulsamos sobre Agregar sitio/aplicación.

En la pantalla Agregar sitio/aplicación pulsamos sobre el icono de Android e introducimos los datos que nos pide:

  • Nombre de la aplicación.
  • URL del paquete Android. La URL para localizar la aplicación en Google Play. Formato: market://details?id={nombre_paquete}
  • Categoría: Juegos, multimedia, Redes sociales, Herramientas, etc.
  • Descripción de la aplicación.
  • Anuncios Google. En esta opción se puede indicar si se quiere que además de los anuncios de la red AdMob se muestren anuncios de la red Google (igual que el programa Adsense) o si por el contrario sólo se desean anuncios de la red AdMob. Esto es a gusto de los desarrolladores. Yo prefiero anuncios de ambas redes.

Pulsamos Continuar y ya tendremos lista nuestra primera campaña publicitaria. Ahora sólo quedará añadir el código adecuado a nuestra aplicación Android.

Descargar AdMob SDK.

Entramos en AdMob, vamos a Sitios y aplicaciones, localizamos nuestra aplicación en la parte de abajo, pasamos el ratón por encima y aparecerá el botón Gestionar configuración. Lo pulsamos. En la nueva pantalla tenemos que copiar al portapapeles el ID de editor (publisher ID). Lo necesitaremos más tarde. Luego pulsamos Obtener código del editor. En la nueva pantalla habrá que pulsar el botón Descargar SDK AdMob para Android.

Esto nos descargará un archivo ZIP (GoogleAdMobAdsSdkAndroid.zip). Hay que extraer un archivo JAR (GoogleAdMobAdsSdk-6.1.0.jar) y copiarlo al disco duro.

Agregar AdMob SDK al proyecto Eclipse.

Abrimos Eclipse y en el explorador de proyectos pulsamos con el botón derecho del ratón sobre nuestro proyecto. Aparecerá el menú contextual. Entonces seleccionamos Build Path y luego Configure Build Path...

Elegimos la pestaña Libraries, pulsamos sobre Add External JARs... y elegimos el archivo JAR que copiamos anteriormente al disco duro (GoogleAdMobAdsSdk-6.1.0.jar).

Por último elegimos la pestaña Order And Export y marcamos la librería que acabamos de añadir. Este paso no lo pone en la guía de Google pero es fundamental hacerlo porque sino al ejecutar la aplicación obtendremos una excepción con el mensaje could not find class 'com.google.ads.AdView'.

Modificar AndroidManifest.xml.

Para que Google AdMob funcione tendremos que modificar el AndroidManifest.xml de nuestro proyecto para añadir permisos de acceso a Internet y agregar una actividad com.google.ads.AdActivity.

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">

<activity android:name="com.google.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />

Añadir el banner a nuestro layout.

<com.google.ads.AdView android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adUnitId="MY_AD_UNIT_ID"
ads:adSize="BANNER"
ads:loadAdOnCreate="true"
/>

Más información en la Guía oficial de Google AdMob para Android.

Restriciones del SDK.

Según la Guía de Google AdMob SDK, éste requiere Android v1.5 o superior y debe compilarse para Android v3.2 (target=android-13). Esto es un problema si estás desarrollando una aplicación compatible con versiones anteriores de Android, pero hay formas de solucionarlo.

Hemos intentado compilar el proyecto para Android v2.3 pero no funcionaba: en el lugar el anuncio salía un mensaje de error. En la red se pueden encontrar librerías AdMob antiguas compatibles con versiones anteriores de Android pero no parece demasiado recomendable usarlas.

Después de mucho investigar hemos descubierto que lo que hay que hacer para que Google AdMob SDK sea compatible con versiones de Android anteriores a la 3.2 es informar en AndroidManifest.xml que la versión mínima del SDK es por ejemplo Android-8 (2.2 Froyo).

<uses-sdk android:minSdkVersion="8" />

Esto puede hacer que Eclipse se vuelva un poco loco por lo que lo mejor es desarrollar y probar todo el proyecto y añadir la publicidad cuando esté todo hecho.

Enlaces.

P.D. Por cierto, no cuesta nada hacer clic de vez en cuando en las aplicaciones gratuitas que hemos descargado de Google Play. A los desarrolladores nos encanta pasar horas y horas depurando código para hacer aplicaciones decentes, pero no hemos aprendido a vivir del aire. Tenía que decirlo...

jueves, 11 de octubre de 2012

Publicando aplicaciones Android (II)

En la entrada anterior explicamos como generar un archivo .apk firmado digitalmente en Eclipse de nuestra aplicación Android. Dicho archivo es imprescindible para publicar aplicaciones en Google Play.

En esta entrada explicaremos por pasos como publicar nuestra primera aplicación Android.

  1. Lo primero que necesitaremos tener una cuenta Google o lo que es lo mismo, una cuenta GMail. No vamos a detallar aquí como conseguir una cuenta GMail porque es muy sencillo: basta con acceder a GMail, pulsar el botón crear una cuenta y rellenar los campos.

  2. Una vez conectados a nuestra cuenta GMail habrá que acceder a la zona de desarrolladores de Google Play http://play.google.com/apps/publish/, registrarse como publisher y pagar una cuota única de 25,00 US$.


    Este pago sólo tendrá que realizarse una vez y es obligatorio hacerlo con tarjeta de crédito a través del servicio Google Checkout (actualmente parte de Google Wallet).



  3. Una vez nos hemos registrado como desarrolladores, hemos aceptado las condiciones del servicio y hemos pagado la cuota, podemos empezar a publicar aplicaciones Android. Para ello entraremos en la consola de desarrollador en Google Play http://play.google.com/apps/publish/ y pulsaremos el botón Subir aplicación.


    Seleccionamos el archivo .apk que generamos anteriormente y pulsamos el botón Publicar. En la siguiente pantalla se muestran las características de la aplicación a subir, leídas del archivo .apk. Habrá que pulsar el botón Guardar.



  4. Ya hemos subido nuestra aplicación a Google Play. Ahora hay que añadir las características de la aplicación: título, descripción, idiomas, capturas de pantalla, vídeo promocional, países en los que se publicará, dispositivos a los que va destinada, datos de contacto, etc.


    Para rellenar todos estos datos basta tener un poco de sentido común. Como mínimo hay que poner dos capturas de pantalla y un icono de 512 x 512 (aparte de título y descripción). En resumen lo siguiente:
    • Capturas de pantalla (al menos 2). Archivo PNG o JPEG de 24 bits de 320x480, 480x800, 480x854, 720x1280 o 800x1280. Sangrado completo, sin bordes.
    • Icono de aplicación de alta resolución (obligatorio). Imagen de 32 bits PNG o JPEG y 512x512 (máximo 1024 KB).
    • Gráfico promocional (opcional). Archivo de 24 bits PNG o JPEG y 180x120. Sin bordes.
    • Gráfico de funciones (opcional). Archivo de 24 bits PNG o JPEG y 1024x500; el tamaño se reducirá a mini o micro.
    • Vídeo promocional (opcional). URL de YouTube.
    • Política de privacidad (obligatorio). URL de la política de privacidad que se mostrará a los usuarios. Se puede indicar que por ahora no hay política de privacidad.
    • Excluir marketing (opcional). Se trata de un check que indica que no se desea que la aplicación se promocione fuera de Google Play. Lo normal es dejarlo deshabilitado para que la aplicación se pueda promocionar tanto en Google Play como en otros servicios de Google.
    • Idiomas: Inglés, Español, Francés, etc. Uno de ellos será el idioma por defecto (generalmente inglés).
    • Título. Obligatorio en todos los idiomas. Nombre de la aplicación. Es el nombre que aparece en las búsquedas. Máximo 30 caracteres.
    • Descripción. Obligatorio en todos los idiomas. La descripción detallada es muy importante. Máximo 4000 caracteres.
    • Cambios recientes. Opcional. Máximo 500 caracteres.
    • Texto promocional. Opcional. Máximo 80 caracteres.
    • Tipo de aplicación. Obligatorio. Seleccionar del desplegable: aplicación o juego.
    • Categoría. Obligatorio. Seleccionar del desplegable.
    • Protección contra copias. Obligatorio. Las opciones son Desactivado (la aplicación se puede copiar desde el dispositivo) o bien Activado (evita la copia de esta aplicación desde el dispositivo. Aumenta la cantidad de memoria del teléfono necesaria para instalar la aplicación). La función de protección contra copias quedará obsoleta en poco tiempo. Se usará el servicio de licencias en su lugar.
    • Clasificación de contenido. Los desarrolladores deben clasificar su aplicación como nivel de madurez alto, medio o bajo o para todos los públicos. Las directrices para clasificar las aplicaciones se encuentran en este artículo.
    • Precios. La aplicación puede ser gratuita o de pago. Puede establecerse un precio común o distinto para cada país. Para poder establecer una aplicación como "de pago" hay que tener cuenta de comerciante de Google Checkout.
    • Países. Se puede orientar una aplicación sólo a algunos países o bien se puede orientar a todo el mundo, excluyendo algunos países.
    • Información de contacto. Opcional. Introduciremos sitio web, email de contacto y/o teléfono según deseemos.
    • Consentimiento: Hay que marcar los dos checks.

    Una vez introducida toda la información, podemos publicar la aplicación o bien guardar los datos para publicarla más adelante.

El el próximo capítulo explicaremos como añadir publicidad a tu aplicación Android usando AdMob.

miércoles, 10 de octubre de 2012

Publicando aplicaciones Android (I)

Ahora que estamos en proceso de publicar nuestra segunda aplicación en Google Play, voy a aprovechar para escribir una serie de artículos donde se detallan los pasos a seguir para publicar aplicaciones Android.

Las aplicaciones Android se distribuyen mediante un archivo con extensión .apk (Application PacKage), que es un paquete similar al formato .jar de Java. Dicho archivo contiene las clases, los recursos, los permisos y todo lo necesario para distribuir e instalar la aplicación Android en un smartphone o tablet. Eclipse y el entorno de desarrollo Android (ADT) generan automáticamente un archivo .apk mientras se desarrolla la aplicación. Dicho archivo puede encontrarse en la carpeta /bin del proyecto y es el que se instala en el emulador de Android y en los dispositivos mediante el cable USB cuando se prueba o se depura el programa, pero no sirve para subirlo a Google Play, pues antes debe ser firmado digitalmente con un certificado válido para al menos 25 años.

Para firmar digitalmente un archivo .apk hay que seguir los siguientes pasos:

  1. Cuando la aplicación ha sido probada y dada por válida hay que pulsar con el botón derecho del ratón en la carpeta del proyecto en Eclipse y seleccionar la opción Export:


  2. En la pantalla Export hay que seleccionar Android, luego Export Android Application y por último Next:


  3. En la pantalla Project Checks hay que seleccionar el proyecto del cual queremos generar el .apk y Next


  4. En la pantalla Keystore selecion hay que seleccionar o crear el almacén de certificados a usar (Keystore en Inglés). Un Keystore es un archivo encriptado en el que se guardan distintos certificados, localizado en un único archivo. Podemos crear un almacén para una aplicación o para un conjunto de aplicaciones.

    La primera vez crearemos un almacén nuevo dándole un nombre de archivo y una clave y pulsaremos Next. Es importante no perder nunca la clave del almacén pues cada vez que queramos publicar una modificación de nuestra aplicación deberemos usarlo.


  5. En la siguiente pantalla seleccionaremos crear un nuevo certificado y en la pantalla Key Creation introduciremos los datos del nuevo certificado:
    • Alias: Obligatorio. Identificador del certificado. Generalmente se usa el nombre de la aplicación.
    • Password: Obligatorio. Contraseña del certificado. No debe olvidarse nunca porque es necesaria para cada actualización de la aplicación.
    • Confirm: Obligatorio. Confirmación la contraseña anterior.
    • Validity (years): Obligatorio. Validez del certificado (25 años mínimo).
    • First and Last Name: Obligatorio. Nombre del programador.
    • Organization Unit: Opcional. Departamento (de la empresa).
    • Organization: Opcional. Nombre de la empresa.
    • City or Locality: Opcional. Ciudad o localidad.
    • State or Province: Opcional. Provincia o Estado.
    • Country Code: Opcional. Código de país.


  6. Por último en la pantalla Destination and key/certification checks hay que seleccionar el nombre del archivo .apk destino y pulsar Finish. Eso generará el archivo .apk firmado digitalmente.

Con esto hemos generado un archivo .apk válido para subir a Google Play. En el próximo artículo veremos como subir este paquete a Google Play.

NOTAS:

  1. Como curiosidad, los archivos .apk tienen internamente un formato similar a los archivos .zip y pueden abrirse con programas como el 7-Zip y similares.
  2. Si al generar el archivo .apk da un error como error de keytool: java.io.IOException: Incorrect AVA format, revisa los parámetros del certificado. Ten cuidado de usar sólo letras inglesas o números para los nombres, pues los signos de puntuación, acentos y carácteres latinos (como la ñ) pueden dar a veces problemas.
  3. A la hora de publicar nuestra primera aplicación en Google Play, encontramos mucha información en el artículo Publicar aplicación Android en Google Android Market, obtener beneficios. Ahora está algo anticuado pero contiene mucha información útil.