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 tu app 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 dispositivos, Android proporciona un framework de apps dinámico en el que puedes proporcionar recursos de la app específicos de la 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 del dispositivo actual. Si planificas el 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 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 adecuado.
¿Qué significa "compatibilidad"?
En lo que respecta al desarrollo para Android, existen dos tipos de compatibilidad: compatibilidad de dispositivos y compatibilidad de 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. Los detalles exactos del entorno de ejecución de Android se definen en el Programa de compatibilidad de Android. Cada dispositivo debe aprobar 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 compatibles con Android incluyen Google Play Store. Por lo tanto, si un usuario instala tu app desde Google Play Store, significa que está usando un dispositivo compatible con Android.
Sin embargo, debes considerar si tu app es compatible con cada configuración de dispositivo potencial. 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 la app solo es compatible con los 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 el hardware, como un sensor de brújula; otras se basan en el software, como los widgets de la app, 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.
Para lograr la mayor base de usuarios posible para tu app, admite la mayor cantidad posible de configuraciones de dispositivos con un solo APK o AAB. En la mayoría de los casos, 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 para 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 del dispositivo, Android define IDs de funciones para 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 la app es FEATURE_APP_WIDGETS.
Si es necesario, puedes impedir que los usuarios instalen tu app cuando sus dispositivos no proporcionen una función necesaria. Para ello, declara la función con un elemento <uses-feature> en el archivo de manifiesto de tu app.
Por ejemplo, si tu app no tiene sentido en un dispositivo que no tiene sensor de brújula, puedes declarar ese sensor 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 que están 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, realiza una degradación elegante de la función 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(); }
Para obtener información sobre todos los filtros que puedes usar para controlar la disponibilidad de tu app en Google Play Store, consulta la documentación de Filtros en Google Play.
Versión de plataforma
Es posible que diferentes dispositivos ejecuten distintas 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 es el nivel de API 31 y Android 13 es el 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(36) ... } }
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 36 ... } }
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 con las apps compiladas con las APIs de versiones anteriores de la plataforma, por lo que tu app es compatible con las versiones futuras de Android mientras usas 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 durante 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 su tipo de pantalla, Android define dos características para cada dispositivo: el tamaño de la pantalla (el tamaño físico de la pantalla) y la densidad de la pantalla (la densidad física de los píxeles en la pantalla, conocida como DPI). Para simplificar las diferentes configuraciones, Android generaliza estas variantes en grupos que facilitan su segmentación:
- Cuatro tamaños generalizados: pequeño, normal, grande y extragrande
- Varias densidades generalizadas: mdpi (media), hdpi (alta), xhdpi (extra alta), xxhdpi (extra extra 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 usando 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. Esto 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.
Para 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, consulta la descripción general de la compatibilidad de pantallas y 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 restringirla por motivos comerciales o legales. En este tipo de situaciones, Google Play Store proporciona 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 del usuario o el operador de telefonía móvil.
El filtrado por compatibilidad técnica, como los componentes de hardware requeridos, siempre se basa en la información que se incluye 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 sobre cómo se estructuran las apps para Android para separar los recursos de la app del 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 maneras 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 las apps a ciertas APIs con un sistema de permisos que requiere el consentimiento del usuario para que tu app use esas APIs