Android está diseñado para ejecutarse en muchos dispositivos diferentes, como teléfonos, tablets y televisiones. 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 funciones y brindar 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 app dinámico en el que puedes proporcionar recursos de app 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 del dispositivo actual. Con un poco de previsión para el diseño de tu app y 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"?
En lo que respecta al desarrollo de Android, existen dos tipos de compatibilidad: la compatibilidad con dispositivos y la compatibilidad con apps.
Debido a que 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 aplicaciones 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 que se considere compatible.
Como desarrollador de apps, no tienes que preocuparte acerca de 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 está usando 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 gama 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, tu app solo es compatible con dispositivos que incluyen esa función.
Cómo controlar la disponibilidad de tu app para los dispositivos
Android es compatible con 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 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 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 tiempo de ejecución y proporcionando recursos de la app con alternativas para diferentes configuraciones, como distintos diseños para distintos 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 del dispositivo:
Funciones del dispositivo
Para administrar la disponibilidad de tu app según las funciones del dispositivo, Android define los ID de función para cualquier función de hardware o software que puede no estar disponible en todos los dispositivos. Por ejemplo, el ID de función para el sensor de brújula es FEATURE_SENSOR_COMPASS
y el ID de función para los widgets de app 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 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 carece de un sensor de brújula, puedes declarar el sensor de brújula 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 funciones disponibles en el dispositivo de cada usuario para determinar si tu app es compatible con cada uno de ellos. 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, configura el atributo required
en "false"
y verifica la función del dispositivo en tiempo de ejecución.
Si la función de la app no está disponible en el dispositivo actual, se degrada la función de la app correspondiente de forma elegante. Por ejemplo, puedes consultar si una función está disponible llamando a hasSystemFeature()
de esta 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 a través de Google Play Store, consulta la documentación sobre 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 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(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 las apps compiladas con las APIs de versiones anteriores de la plataforma, por lo que tu app es compatible con versiones futuras de Android mientras usas las APIs de Android documentadas.
Sin embargo, si tu app usa APIs agregadas en una versión de plataforma más reciente, pero no las requiere para su funcionalidad principal, verifica el nivel de API en tiempo de ejecución y degrada las funciones correspondientes de forma elegante 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 del sistema actual, SDK_INT
, con la constante de nombre interno en Build.VERSION_CODES
que corresponda 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 por tipo de pantalla, Android define dos características para cada uno: tamaño de pantalla (el tamaño físico) y densidad de 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 extra grande
- Varias densidades generalizadas: mdpi (media), hdpi (alta), xhdpi (extra 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 los ajustes adecuados a tu diseño de IU y recursos de imagen según sea necesario para cada pantalla. Proporciona imágenes de mapa de bits optimizadas para densidades de pantalla comunes.
Usa diseños flexibles tanto como sea posible para optimizar la experiencia del usuario. Cuando haya diseños para cambios de configuración grandes, como vertical y horizontal, o tamaños de ventana grandes en comparación con los 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 determinados tamaños de pantalla cuando sea necesario, lee la descripción general de la compatibilidad de pantallas y consulta los lineamientos de calidad de las apps para pantallas grandes.
Cómo controlar 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 razones comerciales o legales. Para este tipo de situación, Google Play Store ofrece 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 de la compatibilidad técnica (como los componentes de hardware obligatorios) 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 procesa 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 a fin de separar los recursos de la app de su código, incluido cómo puedes proporcionar recursos alternativos para configuraciones específicas de dispositivos.
- 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 ciertas APIs con un sistema de permisos que requiere el consentimiento del usuario para que tu app use esas APIs.