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 esta 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 app dinámico en el que puedes proporcionar recursos de apps específicos de configuración en archivos estáticos, como diferentes diseños XML para distintos tamaños de pantalla. Luego, Android carga los recursos adecuados según la configuración actual del dispositivo. Con la previsión del diseño de tu app y los recursos adicionales, puedes publicar un solo paquete de aplicación (APK) que optimice 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"?

Con respecto al desarrollo de Android, hay dos tipos de compatibilidad: compatibilidad con dispositivos y compatibilidad con apps.

Como Android es un proyecto de código abierto, cualquier fabricante de hardware puede crear 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. Los detalles exactos del entorno de ejecución de Android se definen en el Programa de compatibilidad de Android. Cada dispositivo debe pasar el Conjunto de pruebas de compatibilidad (CTS) para que se considere compatible.

Como desarrollador de apps, no tienes que preocuparte por si un dispositivo es compatible 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, significa que usa un dispositivo compatible con Android.

Sin embargo, debes considerar si tu app es compatible con cada posible configuración del dispositivo. Debido a que 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 la app requiere un sensor de brújula, entonces la app 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 están basadas en hardware, como el sensor de brújula; otras, en software, como los widgets de apps; y otras, dependen de la versión de la plataforma. No todos los dispositivos son compatibles con 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 base de usuarios más grande posible para tu app, admite tantas configuraciones de dispositivos como sea posible mediante un solo APK o AAB. En la mayoría de las situaciones, puedes hacerlo inhabilitando las funciones opcionales durante el tiempo de ejecución y proporcionando recursos de la app con alternativas para diferentes configuraciones, como distintos diseños para diferentes tamaños de pantalla. Si es necesario, puedes restringir la disponibilidad de tu app a ciertos dispositivos a través de Google Play Store según las siguientes características:

Funciones del dispositivo

Para administrar la disponibilidad de tu app según las funciones de los dispositivos, Android define los IDs de funciones de cualquier función de hardware o software que pueda 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 proporcionan una función necesaria declarando la función con un elemento <uses-feature> en el archivo de manifiesto de la app.

Por ejemplo, si tu app no tiene sentido en un dispositivo sin sensor de brújula, puedes declararlo como 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 funciones disponibles en el dispositivo de cada usuario para determinar si 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á disponible, 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 el 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 sucesiva de Android proporciona compatibilidad para apps compiladas con las APIs de versiones anteriores de la plataforma, de modo que tu app es compatible con futuras versiones 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, comprueba 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 el 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 orientar:

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

De forma predeterminada, tu app es compatible con todos los tamaños y densidades de pantalla porque 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 usando diseños flexibles tanto como sea posible. Cuando haya diseños para cambios de configuración grandes, como verticales y horizontales, o tamaños de ventana grandes en comparación con los pequeños, considera proporcionar diseños alternativos que sean flexibles para los cambios más pequeños en la configuración. Esto mejora la experiencia del usuario en factores de forma como tablets, teléfonos y dispositivos plegables. También es útil que las ventanas cambien de tamaño en el modo multiventana.

Si quieres obtener información sobre cómo crear recursos alternativos para diferentes pantallas y cómo 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 hacerlo por motivos comerciales o legales. Por ejemplo, es poco probable que una app que muestra horarios de trenes para el metro de Londres sea útil para usuarios fuera del Reino Unido. En este tipo de situaciones, Google Play Store ofrece opciones de filtrado en Play Console que te permiten controlar la disponibilidad de tu app por motivos no técnicos, como la configuración regional o el operador inalámbrico del usuario.

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

Recursos adicionales:

Descripción general de los recursos de las apps
Información acerca de cómo se estructuran las apps para Android para separar los recursos de la app del código de la app, lo que incluye cómo puedes proporcionar recursos alternativos para configuraciones de dispositivos específicos.
Filtros en Google Play
Información sobre las diferentes formas en las 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 ciertas APIs con un sistema de permisos que requiere el consentimiento del usuario para que tu app use esas APIs.