Soportando distintas versiones de la plataforma

Aunque las últimas versiones de Android a menudo nos proporcionan fantásticas APIs para nuestras aplicaciones, siempre deberías continuar soportando las versiones antiguas de Android hasta que se actualicen más dispositivos. Esta lección te enseña a sacar partido a las últimas APIs a la vez que sigues dando soporte a versiones antiguas.

La página de Versiones de la plataforma se actualiza a menudo para mostrar el porcentaje de dispositivos activos que utilizan cada versión de Android, basándose en el número de dispositivos que visitan la tienda Google Play. Generalmente, es una buena práctica dar soporte a cerca del 90% de los dispositivos activos, a la vez que marcas como objetivo la última versión.

Consejo: Para proporcionar las mejores características y funcionalidades en las distintas versiones de Android, deberías usar la Librería de soporte Android, que te permite utilizar varias de las APIs más recientes en versiones antiguas.

Especificar el nivel API mínimo y el objetivo


El archivo AndroidManifest.xml describe tu aplicación e identifica las versiones de Android que soporta. Específicamente, los atributos minSdkVersion y targetSdkVersion del elemento <uses-sdk> identifican el mínimo nivel API con el que es compatible tu aplicación y el máximo nivel API con el que se ha probado, respectivamente.

Por ejemplo:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
    ...
</manifest>

Al lanzarse nuevas versiones de Android, algunos estilos y comportamientos se ven modificados. Para permitir que tu aplicación pueda aprovecharse de estas mejoras y asegurarte de que se ajusta al estilo del dispositivo de cada usuario, deberías establecer el valor de targetSdkVersion a la última versión de Android disponible.

Comprobar la versión del sistema en tiempo de ejecución


Android proporciona un código identificativo único para cada versión de la plataforma en las constantes de la clase Build. Utiliza estos códigos en tu aplicación para crear condiciones con las que asegurarte de que el código que dependa de un nivel API mayor sólo se ejecute cuando dichas APIs estén disponibles en el sistema.

private void setUpActionBar() {
    // Nos aseguramos de estar en Honeycomb o superior para usar las APIs ActionBar
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

Nota: Cuando analiza recursos XML, Android ignora los atributos XML que no soporta el dispositivo actual. Por tanto, puedes usar atributos XML que sólo estén soportados en versiones más modernas sin preocuparte de que las versiones anteriores no funcionen. Por ejemplo, si usas targetSdkVersion="11", tu aplicación incluye la ActionBar por defecto en Android 3.0 y superior. Para añadir elementos de menú a la barra de acciones, necesitas usar android:showAsAction="ifRoom" en tu XML de recursos de menú. No tendrás ningún problema al usar este XML con otras versiones, porque las versiones anteriores de Android simplemente ignorarán el atributo showAsAction (es decir, no necesitas crear una versión distinta en res/menu-v11/).

Usar estilos y temas de la plataforma


Android proporciona temas que le dan a las aplicaciones la apariencia y el aspecto del sistema operativo. Estos temas se pueden aplicar a tu aplicación dentro del archivo de manifiesto. Al usar estos estilos y temas por defecto, tu aplicación tomará la apariencia más moderna de Android con cada nueva versión.

Para hacer que tu actividad tenga el aspecto de una caja de diálogo:

<activity android:theme="@android:style/Theme.Dialog">

Para hacer que tu actividad tenga un fondo transparente:

<activity android:theme="@android:style/Theme.Translucent">

Para aplicar tu propio tema definido en /res/values/styles.xml:

<activity android:theme="@style/CustomTheme">

Para aplicar un tema a toda tu aplicación (todas las actividades), añade el atributo android:theme al elemento <application>:

<application android:theme="@style/CustomTheme">

Para más información sobre la creación y el uso de los temas, lee la guía de Estilos y temas.