Descripción general de la compatibilidad de dispositivos

Android está diseñado para ejecutarse en muchos dispositivos diferentes, como teléfonos, tablets y televisores. La variedad de dispositivos proporciona un público potencial enorme para tu app. Para que tenga éxito en todos los dispositivos, debe tolerar la variabilidad de las funciones y proporcionar una interfaz de usuario flexible que se adapte a diferentes configuraciones de pantalla.

Para ayudar con la compatibilidad de los dispositivos, Android proporciona un framework de apps dinámico en el que puedes proporcionar recursos de apps específicos de una configuración en archivos estáticos, como diferentes diseños XML para distintos tamaños de pantalla. Luego, Android carga los recursos correspondientes según la configuración actual del dispositivo. Teniendo en cuenta el diseño de tu app y los recursos adicionales de tu app, puedes publicar un solo paquete de aplicación (APK) que optimiza la experiencia del usuario en una variedad de dispositivos.

Sin embargo, si es necesario, puedes especificar los requisitos de las funciones de tu app y controlar qué tipos de dispositivos pueden instalarla desde Google Play Store. En este documento, se explica cómo puedes controlar qué dispositivos tienen acceso a tus apps y cómo prepararlas para llegar al público correcto.

¿Qué significa "compatibilidad"?

Hay dos tipos de compatibilidad con respecto al desarrollo de Android: compatibilidad con dispositivos y compatibilidad con apps.

Como Android es un proyecto de código abierto, cualquier fabricante de hardware puede compilar un dispositivo que ejecute el sistema operativo Android. Sin embargo, un dispositivo es "compatible con Android" solo si puede ejecutar correctamente apps escritas para el entorno de ejecución de Android. El Programa de compatibilidad de Android define los detalles exactos del entorno de ejecución de Android. Cada dispositivo debe aprobar el Conjunto de pruebas de compatibilidad (CTS) para considerarse compatible.

Como desarrollador de apps, no tienes que preocuparte por la compatibilidad de un dispositivo con Android, ya que solo los dispositivos que lo son incluyen Google Play Store. Por lo tanto, si un usuario instala tu app desde Google Play Store, está usando un dispositivo compatible con Android.

Sin embargo, debes considerar si tu app es compatible con cada posible configuración del dispositivo. Como Android se ejecuta en una amplia variedad de configuraciones de dispositivos, algunas funciones no están disponibles en todos los dispositivos. Por ejemplo, es posible que algunos dispositivos no incluyan sensor de brújula. Si la funcionalidad principal de tu app requiere un sensor de brújula, entonces solo es compatible con dispositivos que incluyen esa función.

Controla la disponibilidad de tu app para los dispositivos

Android admite una variedad de funciones que tu app puede aprovechar a través de las APIs de la plataforma. Algunas funciones se basan en hardware, como un sensor de brújula; otras se basan en software, como los widgets de apps; y otras dependen de la versión de la plataforma. No todos los dispositivos admiten todas las funciones, por lo que es posible que debas controlar la disponibilidad de tu app para los dispositivos según las funciones que requiera tu app.

Para lograr la mayor base de usuarios posible para tu app, admite tantas configuraciones de dispositivos como sea posible con un solo APK o AAB. En la mayoría de las situaciones, puedes hacerlo inhabilitando las funciones opcionales en el tiempo de ejecución y proporcionando recursos de la app con alternativas para diferentes configuraciones, como diferentes diseños para distintos tamaños de pantalla. Si es necesario, puedes restringir la disponibilidad de tu app a ciertos dispositivos a través de Google Play Store en función de las siguientes características del dispositivo:

Funciones del dispositivo

Para administrar la disponibilidad de tu app según las funciones del dispositivo, Android define los IDs de función de cualquier función de hardware o software que podría no estar disponible en todos los dispositivos. Por ejemplo, el ID de función del sensor de brújula es FEATURE_SENSOR_COMPASS y el ID de función de los widgets de apps es FEATURE_APP_WIDGETS.

Si es necesario, puedes evitar que los usuarios instalen tu app cuando sus dispositivos no proporcionen una función necesaria. Para ello, declara la función mediante un elemento <uses-feature> en el archivo de manifiesto de la app.

Por ejemplo, si tu app no tiene sentido en un dispositivo que no tiene sensor de brújula, puedes declararlo como un requisito con la siguiente etiqueta de manifiesto:

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

Google Play Store compara las funciones que requiere tu app con las disponibles en el dispositivo de cada usuario para determinar si tu app es compatible con cada dispositivo. Si el dispositivo no tiene todas las funciones que requiere tu app, el usuario no podrá instalarla.

Sin embargo, si la funcionalidad principal de tu app no requiere una función del dispositivo, establece el atributo required en "false" y verifica la función del dispositivo durante el tiempo de ejecución. Si la función de la app no está disponible en el dispositivo actual, degrada de forma elegante la función de la app correspondiente. Por ejemplo, puedes consultar si una función está disponible llamando a hasSystemFeature() de la siguiente manera:

Kotlin

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature()
}

Java

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature();
}

Si deseas obtener información sobre todos los filtros que puedes usar para controlar la disponibilidad de tu app a través de Google Play Store, consulta la documentación Filtros en Google Play.

Versión de plataforma

Los diferentes dispositivos pueden ejecutar diferentes versiones de la plataforma de Android, como Android 12 o Android 13. Cada versión posterior de la plataforma suele agregar APIs que no están disponibles en la versión anterior. Para indicar qué conjunto de APIs están disponibles, cada versión de la plataforma especifica un nivel de API. Por ejemplo, Android 12 tiene un nivel de API 31 y Android 13 tiene un nivel de API 33.

Debes especificar los valores minSdkVersion y targetSdkVersion en tu archivo build.gradle:

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"

        // Defines the minimum API level required to run the app.
        minSdkVersion(30)

        // Specifies the API level used to test the app.
        targetSdkVersion(33)
        ...
    }
}

Groovy

android {
    defaultConfig {
        applicationId 'com.example.myapp'

        // Defines the minimum API level required to run the app.
        minSdkVersion 30

        // Specifies the API level used to test the app.
        targetSdkVersion 33
        ...
    }
}

Para obtener más información sobre el archivo build.gradle, consulta Cómo configurar tu compilación.

Cada versión posterior de Android proporciona compatibilidad para apps compiladas con las APIs de versiones anteriores de la plataforma, por lo que tu app es compatible con versiones futuras de Android mientras usa las APIs de Android documentadas.

Sin embargo, si tu app usa APIs agregadas en una versión más reciente de la plataforma, pero no las requiere para su funcionalidad principal, verifica el nivel de API en el tiempo de ejecución y degrada de forma elegante las funciones correspondientes cuando el nivel de API sea demasiado bajo. En este caso, establece minSdkVersion en el valor más bajo posible para la funcionalidad principal de tu app y, luego, compara la versión actual del sistema, SDK_INT, con la constante de nombre interno en Build.VERSION_CODES que corresponde al nivel de API que deseas verificar, como se muestra en el siguiente ejemplo:

Kotlin

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop()
}

Java

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop();
}

Configuración de pantalla

Android se ejecuta en dispositivos de varios tamaños, como teléfonos, tablets y TVs. Para categorizar los dispositivos según el tipo de pantalla, Android define dos características para cada uno: el tamaño de la pantalla (el tamaño físico) y la densidad de la pantalla (la densidad física de los píxeles, conocida como DPI). Para simplificar las diferentes configuraciones, Android generaliza estas variantes en grupos que las hacen más fáciles de abordar:

  • Cuatro tamaños generalizados: pequeño, normal, grande y extragrande
  • Varias densidades generalizadas: mdpi (media), hdpi (alta), xhdpi (muy alta), xxhdpi (muy muy alta) y otras

De forma predeterminada, tu app es compatible con todos los tamaños y densidades de pantalla, ya que el sistema realiza ajustes en el diseño de la IU y los recursos de imagen según sea necesario para cada pantalla. Proporciona imágenes de mapa de bits optimizadas para densidades de pantalla comunes.

Optimiza la experiencia del usuario con diseños flexibles tanto como sea posible. Cuando haya diseños para cambios de configuración grandes, como vertical y horizontal, o tamaños de ventana grandes o pequeños, considera proporcionar diseños alternativos que sean flexibles para cambios más pequeños en la configuración. De esta manera, se mejora la experiencia del usuario en factores de forma como tablets, teléfonos y dispositivos plegables. También ayuda cuando las ventanas cambian de tamaño en el modo multiventana.

Si quieres obtener información para crear recursos alternativos para diferentes pantallas y restringir tu app a ciertos tamaños de pantalla cuando sea necesario, lee la descripción general de compatibilidad de pantalla y consulta los lineamientos de calidad de las apps para pantallas grandes.

Controla la disponibilidad de tu app por motivos comerciales

Además de restringir la disponibilidad de tu app según las características del dispositivo, es posible que debas restringir su disponibilidad por motivos comerciales o legales. Para este tipo de situación, Google Play Store proporciona opciones de filtrado en Play Console que te permiten controlar la disponibilidad de tu app por razones no técnicas, como la configuración regional del usuario o el proveedor de servicios inalámbricos.

El filtrado por compatibilidad técnica, como los componentes de hardware necesarios, siempre se basa en la información contenida en el archivo APK o AAB. Sin embargo, el filtrado por motivos no técnicos, como la configuración regional geográfica, siempre se maneja en Google Play Console.

Recursos adicionales:

Descripción general de los recursos de la app
Información sobre cómo se estructuran las apps para Android a fin de separar los recursos de la app desde el código de la app, incluido cómo puedes proporcionar recursos alternativos para configuraciones de dispositivos específicos.
Filtros en Google Play
Información sobre las diferentes formas en que Google Play Store puede evitar que tu app se instale en diferentes dispositivos.
Permisos en Android
Cómo Android restringe el acceso de la app a determinadas APIs con un sistema de permisos que requiere el consentimiento del usuario para que tu app pueda usar esas APIs.