Cómo brindar compatibilidad con diferentes versiones de plataformas

Si bien las últimas versiones de Android en general ofrecen API excelentes para tu app, debes continuar admitiendo versiones anteriores de Android hasta que se actualicen más dispositivos. En esta lección, se muestra cómo aprovechar las últimas API sin dejar de admitir versiones anteriores.

El panel de Versiones de la plataforma se actualiza con regularidad para mostrar la distribución de los dispositivos activos que ejecutan cada versión de Android, según el número de dispositivos que acceden a Google Play Store. En general, se recomienda admitir aproximadamente el 90% de los dispositivos activos y orientar la aplicación a la versión más reciente.

Sugerencia: Con el fin de proporcionar las mejores funciones y funcionalidades en diversas versiones de Android, debes usar la biblioteca de compatibilidad de Android en tu app, que te permite usar varias API recientes de la plataforma en versiones anteriores.

Cómo especificar niveles de API mínimos y objetivo

El archivo AndroidManifest.xml contiene información detallada sobre tu app e identifica las versiones de Android que admite. En especial, los atributos minSdkVersion y targetSdkVersion del elemento <uses-sdk> identifican el nivel de API más bajo con el que tu app es compatible y el nivel de API más alto con el que diseñaste y probaste tu app.

Por ejemplo:

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

A medida que se lanzan nuevas versiones de Android, es posible que algunos estilos y comportamientos cambien. Para permitir que la app aproveche estos cambios y para garantizar que tu app se ajuste al estilo del dispositivo de cada usuario, debes establecer el valor targetSdkVersion de modo que coincida con la versión de Android más reciente disponible.

Cómo comprobar la versión del sistema en el tiempo de ejecución

Android proporciona un código exclusivo para cada versión de la plataforma en la clase de constantes Build. Utiliza estos códigos en tu app para compilar condiciones que garanticen que el código que depende de niveles de API más altos se ejecute únicamente cuando esas API estén disponibles en el sistema.

Kotlin

    private fun setUpActionBar() {
        // Make sure we're running on Honeycomb or higher to use ActionBar APIs
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            actionBar.setDisplayHomeAsUpEnabled(true)
        }
    }
    

Java

    private void setUpActionBar() {
        // Make sure we're running on Honeycomb or higher to use ActionBar APIs
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            ActionBar actionBar = getActionBar();
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
    }
    

Nota: Cuando se analizan los recursos XML, Android omite los atributos XML que no son admitidos por el dispositivo actual. Por lo tanto, puedes usar de forma segura los atributos XML que solo sean compatibles con las últimas versiones sin preocuparte porque las versiones anteriores generen errores cuando se encuentren con el código. Por ejemplo, si estableces targetSdkVersion="11", tu app incluye ActionBar de forma predeterminada en Android 3.0 y versiones posteriores. Para agregar elementos de menú a la barra de acción, debes establecer android:showAsAction="ifRoom" en el recurso XML del menú. Es seguro hacer esto en un archivo XML para varias versiones, porque las versiones anteriores de Android simplemente omiten el atributo showAsAction (es decir, no necesitas una versión separada en res/menu-v11/).

Cómo usar estilos y temas de la plataforma

Android ofrece temas para la experiencia del usuario que brindan a las apps la apariencia del sistema operativo subyacente. Esos temas se pueden aplicar en tu app dentro del archivo de manifiesto. Si usas estos estilos y temas integrados, tu app adoptará naturalmente la apariencia de Android más reciente cada nueva versión.

Para que tu actividad se muestre como un diálogo:

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

Para que tu actividad tenga un fondo transparente:

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

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

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

Para aplicar un tema a toda la app (todas las actividades), agrega el atributo android:theme al elemento <application>:

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

Para obtener más información acerca de cómo crear y usar temas, consulta la guía Estilos y temas.