Cómo brindar compatibilidad con diferentes versiones de plataformas

Si bien las últimas versiones de Android en general ofrecen APIs 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 APIs más recientes sin dejar de admitir versiones anteriores.

Usa el asistente de New Project de Android Studio para buscar la distribución de los dispositivos activos que ejecutan cada versión de Android. Esta distribución se basa en la cantidad de dispositivos que visitan Google Play Store. En general, recomendamos admitir aproximadamente el 90% de los dispositivos activos y segmentar la app a la versión más reciente.

Nota: Para 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 APIs 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. Específicamente, los atributos minSdkVersion y targetSdkVersion para el elemento <uses-sdk> identifican el nivel de API más bajo con el que es compatible tu app, así como el nivel de API más alto en función del cual 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. A fin de permitir que tu app aproveche esos cambios y asegurarte de que se adapte al estilo de dispositivo de cada usuario, debes configurar el valor targetSdkVersion para que coincida con la última versión disponible de Android.

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

Android proporciona un código único 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 el dispositivo actual no admite. 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 luego poder agregar elementos de menú a la barra de acciones, debes establecer android:showAsAction="ifRoom" en el archivo en formato XML de recursos del menú. Es seguro hacer esto en un archivo en formato XML para múltiples versiones, ya que las versiones anteriores de Android simplemente ignoran el atributo showAsAction (es decir, no necesitas una versión independiente 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 con cada versión nueva.

Para que tu actividad se muestre como un cuadro de 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.