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.

viernes, 13 de julio de 2012

Nuestra primera aplicación Android ya está en google Play

Acabamos de subir a Google Play nuestra primera aplicación Android. Se trata de MasQueCursos Móvil, una aplicación que replica las funcionalidades del sitio web MasQueCursos.org en dispositivos Android, tanto móviles como tabletas.

  • Busca el curso que necesitas.
  • Revisa toda la información del curso: características, objetivos, requisitos, destinatarios, temario, ....
  • Solicita información ampliada al centro que imparte el curso.
  • Revisa las características del centro de formación.
  • Obtén una lista de cursos similares al que te interesa.
  • Y mucho más...

Disponible ya en Google Play de forma gratuita.

domingo, 17 de junio de 2012

Programación Android: Como cargar más datos en un ListView al llegar al final

Hola de nuevo. Ahora quiero hablaros de un pequeño truco que he descubierto. La aplicación Android de MasQueCursos.org utiliza varios web services para leer los datos de Internet: lista de cursos, datos de un curso, lista de centros, datos de un centro, lista de categorías, etc. Para no sobrecargar las comunicaciones, en lugar de cargar todos los resultados a mostrar de golpe (por ejemplo cursos), lo hago en bloques de 25. Al principio puse botones para paginar igual que hay en la web: siguiente página, anterior página, primera página y última página, pero eso no quedaba demasiado bien en el móvil: los botones comen espacio para los resultados y la pantalla se veía demasiado llena. Así que decidí que lo ideal era cargar los 25 primeros resultados y cuando el usuario moviera la lista para ver el último, se cargaran automáticamente los siguientes 25 resultados.

Estuve investigando diferentes soluciones en Internet, pero ninguna me acababa de gustar. La mayoría usaban un evento mediante la función setOnScrollListener(), pero me dio algunos problemas y busqué otras soluciones. Al final resulta que ha sido relativamente fácil.

La solución consiste en añadir un elemento vacío al final de la lista de datos de forma que cuando Android llama a la función getView() del adaptador del ListView, si la llamada se hace para la última posición, cargamos los nuevos resultados.

A continuación pongo el código de la clase ListViewActivity, que es la que se encarga de gestionar la lista de resultados. Atención seguir este código requiere un mínimo de conocimientos de programación Android.

public class ListViewActivity
    extends Activity
    implements OnItemClickListener {

    // Miembros de la clase
    private ListViewData[] mListViewData;

    // Controles del layout
    private ListView mListView;

    // Parámetros de llamada
    private int mStart;
    private int mLimit;

    // Tamaño de la vista
    private int mCount;
    private int mActual;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        // Llamada a la clase padre
        super.onCreate(savedInstanceState);

        // Inicialización de la vista
        setContentView(R.layout.listviews);

        // Obtención de referencias permanentes a los controles
        mListView = (ListView) findViewById(R.id.listview);

        // Tratamiento de eventos del ListView
        mListView.setOnItemClickListener(this);

        // Inicializaciones
        mListViewData = null;
        mActual = 0;
        mCount = 0;

        // Se Obtención y carga de datos en el ListView
        mStart = 0;
        mLimit = 25;
        _loadDataCount();
        _loadDataList();

    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        // Validaciones iniciales (necesario al haber un item de más)
        if(mListViewData == null || mListViewData[position] == null)
            return;

        // Tratamiento de la pulsación sobre el item mListViewData[position]
        // ...
    }

    private void _loadDataCount() {

        // Aquí cargamos en mCount el tamaño total de los datos, ya sea mediante
        // una query a una base de datos interna o extarna o mediante una llamada
        // REST o lo que sea.
        // ...
    }

    private void _loadDataList() {

        // Aquí accedermos a la fuente de datos (base de datos, web service u
        // otro) para obtener los datos entre mStart y mLimit y los cargamos
        // por ejemplo en un array llamado data.
        // ...

        // Se cargan los datos en el ListView
        _fillListView(data);
    }

    private void _fillListView(ListViewData[] data) {

        // Se cuenta el número de items en el array de datos
        int dataCount = data.length();

        // Establecimiento de los textos de la cabecera
        mActual += dataCount;

        // Si no hay datos es un error error
        if(dataCount < 1) {

            // Hacer el tratamiento del error
            // ...

            // Fin por error
            return;
        }

        // Nos guardamos el array de datos anterior
        ListViewData[] oldData = mListViewData;

        // Se crea un array de n + 1 items para el ListView excepto si ya se han
        // cargado todos los datos. Si hay un item de más, éste quedará vacío
        int count = mActual;
        if(mActual < mCount)
            ++count;

        mListViewData = new ListViewData[count];

        // Si había un array anterior, se traspasa la información al nuevo
        int position = 0;
        if(oldData != null) {
            for(int i = 0; i < oldData.length; ++i) {
                if(oldData[i] != null) {
                    mListViewData[position++] = oldData[i];
                }
            }
        }

        // Traspaso de la información leída de la fuente de datos
        for (int i = 0; i < dataCount; i++) {
            mListViewData[position++] = new ListViewData(data[i]);
        }

        // Si hay más resultados, el último item irá vacío
        if(mActual < mCount)
            mListViewData[mActual] = null;

        // Se asigna el nuevo adaptador al ListView
        DataAdapter adapter = new DataAdapter();
        mListView.setAdapter(adapter);

        // Scroll del ListView al último item leído
        mListView.setSelection((mStart > 0) ? mStart - 1 : 0);
    }

    public class ListViewData {

        // En esta clase se definen los datos y métodos para acceder a ellos.
        // ...
    }

    public class DataAdapter extends ArrayAdapter<ListViewData> {

        public DataAdapter() {

            // Llamada a la clase padre
            super(ListViewActivity.this, R.layout.listitem, mListViewData);
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            // Obtención del objeto que se usa para cargar los items
            LayoutInflater inflater = ListViewActivity.this.getLayoutInflater();

            View item;
            if(position == mActual) {

                // Inicializaciones
                item = inflater.inflate(R.layout.listitem, null);

                // Traspaso de información al item recién creado
                // ...

                // Se carga una nueva lista de cursos
                mStart = mActual;
                mLimit = 25;
                _loadDataList();
            }
            else {

                // Inicializaciones
                item = inflater.inflate(R.layout.listitem, null);


                // Traspaso de información al item recién creado
                // ...
            }

            // Finalización
            return(item);
        }
    }
}

PD: ¿Alguien sabe como hacer que el código fuente salga coloreado en el blog? Con las palabras clave resaltadas y eso.

Curso de programación Android

Hola a todos. Llevo algunos meses haciendo un curso de programación Android, por aquello de ampliar horizontes y estar al día de la tecnología más actual. Se trata de un curso a distancia, asistido por un profesor que resuelve tus dudas.

El curso regular lo he acabado y ahora tengo que hacer un proyecto, pero en lugar de hacer algo sólo para demostrar que ya se programar Android, he decidido hacer algo funcional: La aplicación para móviles de una de nuestras webs: MasQueCursos.org. La intención, aparte de acabar el curso, es aprender haciendo una aplicación de verdad para en el futuro poder realizar aplicaciones para terceros. Además cuando esté acabada subiré la aplicación a Google Play, poniéndola gratuita.

Iré informando aquí de los progresos. Además como me estoy encontrando problemas reales, publicaré algunos trucos de programación Android que voy encontrando.