Una forma útil de evaluar la excelencia de la app es analizar los flujos de trabajo y evaluar la fluidez y seguridad de la experiencia de la app.
En esta lista de tareas, se define un conjunto de criterios principales de calidad y pruebas relacionadas que te ayudarán a evaluar la calidad de tu app. Algunos de estos criterios pueden ser fáciles de omitir, y las pruebas te ayudarán a que los incluyas en tus planes de prueba.
La lista de tareas destaca la calidad mínima que deben cumplir todas las apps. Es probable que las pruebas vayan más allá de lo que se describe aquí.
Cada elemento de la lista de tareas de calidad tiene un ID único que puede resultarte útil a la hora de comunicarte con tu equipo. También puedes ver la versión anterior de estos lineamientos.
Experiencia visual
Tu app debe proporcionar los patrones de interacción y diseño visual estándares de Android cuando corresponda a fin de garantizar una experiencia del usuario intuitiva y coherente.
Área | ID | Pruebas | Descripción |
---|---|---|---|
Navigation | VX-N1 | CR-3 | La app admite la navegación estándar del botón Atrás y no utiliza avisos personalizados en pantalla para este. |
VX-N2 | CR-3 | La app admite la navegación por gestos a fin de navegar a la pantalla principal y volver a ella. | |
VX-N3 | CR-1 CR-3 CR-5 |
La app preserva y restaura correctamente el estado del usuario o la app. La app preserva el estado del usuario o la app cuando abandona el primer plano y evita la pérdida accidental de datos a causa de la navegación hacia atrás y otros cambios de estado. Cuando regresa al primer plano, la app debe restablecer el estado preservado y cualquier transacción con estado importante que esté pendiente. Entre los ejemplos, se incluyen cambios en campos editables, progreso de un juego, menús, videos y otras secciones de la app o el juego.
|
|
Notificaciones | VX-S1 | CR-9 | Las notificaciones siguen los lineamientos de diseño. En particular:
|
VX-S2 | CR-9 | Para apps de mensajería o sociales y conversaciones:
| |
IU y gráficos | VX-U1 | CR-5 | La app admite orientaciones horizontal y vertical, y estados de dispositivos plegados y desplegados. Las orientaciones y los estados de plegado exponen básicamente las mismas funciones y acciones, y conservan la paridad funcional. |
VX-U2 | CR-5 | La app llena su ventana en ambas orientaciones y no está en formato letterbox debido a los cambios de configuración, como el plegado y el desplegado del dispositivo. Se acepta el uso mínimo de formato de pantalla ancha para compensar pequeñas variaciones en la geometría de la pantalla. |
|
VX-U3 | CR-5 | La app controla correctamente las transiciones rápidas entre las orientaciones de la pantalla y el plegado y desplegado del dispositivo sin problemas de renderización de la pantalla y sin perder el estado. | |
Calidad visual | VX-V1 | CR-all | La app muestra gráficos, texto, imágenes y otros elementos de la IU sin distorsión, esfumado ni pixelado notables.
|
VX-V2 | CR-all | La app muestra texto y bloques de texto de forma aceptable para cada uno de los idiomas que admite.
|
|
VX-V3 | CR-all | El contenido de la app y el contenido web al que esta hace referencia admiten el tema oscuro. | |
Accesibilidad | VX-A1 | CR-all | El tamaño de los objetivos táctiles debe ser de 48 dp como mínimo. Más información. |
VX-A2 | CR-all | El contenido de primer plano y el texto de la app deben mantener una relación de contraste de color lo suficientemente alta con su fondo:
Obtén más información sobre el color y el contraste. |
|
VX-A3 | CR-all | Describe cada elemento de la IU, excepto TextView , mediante contentDescription . |
Funcionalidad
Tu app deberá implementar el comportamiento funcional previsto.
Área | ID | Pruebas | Descripción |
---|---|---|---|
Audio | FN-A1 | CR-1 CR-8 |
La reproducción de audio continúa cuando la app regresa a primer plano, o le indica al usuario que la reproducción está pausada. |
FN-A2 | CR-1 CR-2 CR-8 |
Si la reproducción de audio es una función principal, la app deberá admitir la reproducción en segundo plano. | |
FN-A3 | CR-0 | Cuando el usuario inicie la reproducción de audio, la app deberá realizar una de las siguientes acciones antes de que transcurra un segundo:
|
|
FN-A4 | CR-0 | La app deberá solicitar foco de audio cuando el audio comience a reproducirse y deberá abandonarlo cuando se detenga la reproducción. | |
FN-A5 | CR-0 | La app deberá controlar las solicitudes de foco de audio de otras apps. Por ejemplo, una app podría bajar el volumen de reproducción cuando otra reproduzca contenido de voz. | |
Contenido multimedia | FN-M1 | CR-0 CR-6 CR-8 |
Si la app reproduce audio en segundo plano, deberá crear una notificación con estilo MediaStyle. |
FN-M2 | CR-0 | Si la app reproduce video, deberá admitir la reproducción pantalla en pantalla. | |
FN-M3 | CR-0 | Si la app codifica contenido de video, deberá hacerlo mediante el estándar de compresión de videos HEVC. | |
Se comparte | FN-S1 | CR-0 | La app deberá usar Android Sharesheet cuando comparta contenido. Puede sugerir objetivos que no están disponibles para las soluciones personalizadas. |
Servicio en segundo plano | FN-B1 | CR-6 | La app evita que se ejecuten servicios innecesariamente largos en segundo plano. Para garantizar que el dispositivo del usuario funcione sin problemas, el sistema aplica varias restricciones a los servicios en segundo plano. Los siguientes no se consideran buenos usos de los servicios en segundo plano:
Obtén más información a fin de elegir la solución adecuada para tu trabajo. |
Rendimiento y estabilidad
Tu app debe proporcionar el rendimiento, la estabilidad, la compatibilidad y la capacidad de respuesta que los usuarios esperan.
Área | ID | Pruebas | Descripción |
---|---|---|---|
Estabilidad | PS-S1 | CR-all SD-1 |
La app no falla ni bloquea el subproceso de IU que provoca errores ANR ("Android no responde"). Usa el informe previo al lanzamiento de Google Play a fin de identificar posibles problemas de estabilidad. Después de la implementación, presta atención a la página de Android Vitals en Google Play Console. |
Rendimiento | PS-P1 | CR-all SD-1 |
La app se carga rápidamente o le proporciona al usuario comentarios en pantalla (como un indicador de progreso o una señal similar) en el caso de que tarde más de dos segundos en cargarse. |
PS-P2 | CR-all SD-1 |
Las apps deberán renderizar los fotogramas cada 16 ms a efectos de alcanzar 60 fotogramas por segundo. Los desarrolladores podrán usar la opción Profile HWUI rendering en las pruebas. En el caso de que se presenten problemas, hay herramientas disponibles que ayudarán a diagnosticar la renderización lenta. | |
PS-P3 | PM-1 | Cuando StrictMode está activado (consulta Prueba StrictMode a continuación), no se verán destellos rojos (advertencias de rendimiento de StrictMode) durante la prueba de la app. Cualquier destello rojo indica un comportamiento inadecuado en relación con el almacenamiento, el acceso a la red o las fugas de memoria. | |
SDK | PS-T1 | CR-0 | La app se ejecutará en la última versión pública de la plataforma de Android sin que se produzca una falla y sin que haya un impacto sobre la funcionalidad principal. |
PS-T2 | SP-1 | La app se orienta al SDK de Android más reciente necesario para alinearse con los requisitos de Google Play mediante la configuración del valor targetSdk . |
|
PS-T3 | SP-1 | Se compilará la app con el último SDK de Android estableciendo el valor compileSdk . |
|
PS-T4 | SP-2 SP-3 |
Todos los SDKs de Google o de terceros usados están actualizados. Cualquier mejora que se realice a estos SDKs, como la estabilidad, la compatibilidad o la seguridad, debe estar disponible de forma oportuna para los usuarios.
Para los SDKs de Google, procura usar SDKs con la tecnología de los Servicios de Google Play, cuando estén disponibles. Estos SDKs son retrocompatibles, reciben actualizaciones automáticas, reducen el tamaño del paquete de la app y hacen un uso eficiente de los recursos integrados en el dispositivo. El desarrollador será responsable de toda la base de código de la app, incluidos los SDKs de terceros que se usen. |
|
PS-T5 | SP-3 | La app no usa interfaces que no pertenecen al SDK. | |
PS-T6 | SP-2 | No se incluyen bibliotecas de depuración en la app de productividad. Esto puede causar problemas de rendimiento y de seguridad. | |
Batería | PS-B1 | BA-1 | La app admite correctamente las funciones de administración de energía que se introdujeron en Android 6.0 (Descanso y App Standby). Cuando se interrumpe la funcionalidad central por la gestión de energía, solo apps calificadas pueden solicitar una exención. Consulta Compatibilidad con otros casos de uso en Descanso y App Standby.
Durante el desarrollo, los desarrolladores podrán probar el comportamiento de App Standby y Descanso mediante estos comandos de ADB. En términos del uso de batería, los desarrolladores podrán usar el generador de perfiles de energía de Android Studio o la herramienta Battery Historian, combinados con el trabajo previsto en segundo plano, a fin de diagnosticar el uso inesperado de la batería. |
Privacidad y seguridad
Tu app debería administrar de forma segura los datos del usuario y su información personal con el nivel de permisos que resulte adecuado.
Además de esta lista de tareas, las apps publicadas en Google Play Store deberán cumplir con las políticas de Datos del usuario a efectos de proteger la privacidad del usuario.
Área | ID | Pruebas | Descripción |
---|---|---|---|
Permisos | SC-P1 | SC-4 | La app solicita solo la cantidad mínima absoluta de permisos que necesita a fin de admitir el caso de uso en cuestión. Para algunos permisos, como la ubicación, usa la ubicación aproximada en lugar de la precisa si es posible. |
SC-P2 |
La app solicita permiso de acceso a datos sensibles (como los SMS, el registro de llamadas o la ubicación) o a servicios que cuesten dinero (como el Teléfono o los SMS) si están directamente relacionados con los casos de uso principales de las apps. Las consecuencias relacionadas con estos permisos deberán divulgarse de manera destacada al usuario. Según cómo uses los permisos, puede haber una forma alternativa de cumplir con el caso de uso de tu app sin depender del acceso a la información sensible. Por ejemplo, en lugar de solicitar permisos relacionados con los contactos de un usuario, puede ser más apropiado solicitar acceso mediante un intent implícito. |
||
SC-P3 | CR-0 | La app solicita permisos de tiempo de ejecución en contexto, cuando se solicita la funcionalidad, en lugar de hacerlo directamente durante el inicio de la app. | |
SC-P4 | CR-0 | La app transmite claramente el motivo por el que se necesitan ciertos permisos o sigue el flujo recomendado para explicar por qué necesita un permiso. |
|
SC-P5 | CR-0 | La app deberá degradarse de manera elegante cuando los usuarios rechacen o revoquen un permiso. La app no deberá impedir que el usuario acceda a ella. | |
Datos y archivos | SC-DF1 | SC-1 | Todos los datos sensibles se almacenan en el almacenamiento interno de la app. |
SC-DF2 | SC-10 | No se registran datos personales o sensibles de los usuarios en el registro del sistema ni en un registro específico de la app. | |
SC-DF3 | La app no deberá usar IDs de hardware que no se puedan restablecer, como el IMEI, para fines de identificación. | ||
Identidad | SC-ID1 | CR-0 | La app brinda sugerencias para autocompletar las credenciales de la cuenta y otra información sensible, como datos de tarjetas de crédito, direcciones físicas y números de teléfono. |
SC-ID2 | CR-0 | Integra el Administrador de credenciales para Android a fin de obtener una experiencia de acceso fluida que unifique la compatibilidad con las llaves de acceso, la identidad federada y las contraseñas tradicionales. | |
SC-ID3 | CR-0 | La app admite la autenticación biométrica para proteger las transacciones financieras y la información sensible, como los documentos importantes de los usuarios. | |
Componentes de la app | SC-AC1 | SC-5 |
La app establece el atributo Solo se exportan los componentes de la aplicación que comparten datos con otras apps o aquellos que otras apps deberían invocar. |
SC-AC2 | CR-0 SC-4 |
Todos los intents y transmisiones siguen las prácticas recomendadas:
|
|
SC-AC3 | SC-3 | Todos los componentes que comparten contenido entre tus apps usan android:protectionLevel="signature" para los permisos personalizados. Esto incluye actividades, servicios, receptores de emisión y, en especial, proveedores de contenido.
Las apps no deben depender del acceso a una lista de paquetes instalados. A partir de Android 11, se restringió el acceso. |
|
Redes | SC-N1 | SC-9 | Todo el tráfico de red se envía mediante SSL. |
SC-N2 | SC-6 | La aplicación declara una configuración de seguridad de red. | |
SC-N3 | Si la aplicación utiliza los Servicios de Google Play, se inicializará el proveedor de seguridad cuando lo haga la aplicación. | ||
WebViews | SC-W1 | SC-6 | No uses setAllowUniversalAccessFromFileURLs() para acceder al contenido local. En su lugar, usa WebViewAssetLoader. |
SC-W2 | SC-7 | Las WebViews no deben usar addJavaScriptInterface() con contenido que no sea de confianza.
En su lugar, en Android 6.0 y versiones posteriores, usa los canales de mensajes HTML. |
|
Ejecución | SC-E1 | La app no carga código dinámicamente desde fuera del APK de la app. Los desarrolladores deberán usar Android App Bundles, que incluyen Play Feature Delivery y Play Asset Delivery.
A partir de agosto de 2021, el uso de Android App Bundles es obligatorio para todas las apps nuevas en Google Play Store. |
|
Criptografía | SC-C1 | La app usa un generador de números aleatorios y algoritmos criptográficos fuertes y proporcionados por la plataforma. Además, la app no implementa algoritmos personalizados. |
Google Play
Asegúrate de que tus apps puedan publicarse en Google Play.
Área | ID | Pruebas | Descripción |
---|---|---|---|
Políticas | GP-P1 | GP-all | La app cumple estrictamente con los términos de la Política de Contenido para Desarrolladores de Google Play y no ofrece contenido inapropiado ni utiliza propiedad intelectual ni marcas de otros, entre otras cosas. |
GP-P2 | GP-1 | El nivel de madurez de la app se establece de forma correcta en función de los Lineamientos de Clasificación del Contenido. | |
Página de detalles de la app | GP-D1 | GP-1 GP-2 |
El gráfico de funciones de la app sigue las pautas que se describen en este artículo de asistencia. Asegúrate de lo siguiente:
|
GP-D2 | GP-1 | Las capturas de pantalla y los videos de la app no muestran ni hacen referencia a dispositivos que no sean Android. | |
GP-D3 | GP-1 | Las capturas de pantalla o los videos de la app no representan el contenido ni la experiencia que ofrece tu app de forma confusa. | |
Asistencia para el usuario | GP-X1 | GP-1 | Los errores comunes informados por los usuarios en la pestaña Reseñas de la página de Google Play se abordan siempre que se puedan reproducir y ocurran en muchos dispositivos diferentes. Si se produce un error en unos pocos dispositivos, aún debes abordarlo en caso de que esos dispositivos sean especialmente populares o nuevos. |
Configuración de un entorno de prueba
A fin de configurar un entorno de prueba para esta lista de tareas, te recomendamos lo siguiente:
- Enfoque en las pruebas de emulador: Android Emulator es una excelente manera de probar tu app para diferentes resoluciones de pantalla y versiones de Android. Debes configurar los dispositivos emulados (AVDs) para representar los factores de forma y las combinaciones de hardware y software más comunes para tu base de usuarios objetivo. Además de las pruebas de teléfonos, también te recomendamos probar otros factores de forma con los siguientes emuladores como mínimo:
- Dispositivos plegables: 7.6" con pantalla plegable (se muestra en teléfonos en el Administrador de AVD).
- Tablet: Pixel C de 9.94" (2,560 px x 1,800 px)
- Para probar la notificación de apps para dispositivos móviles, vincula un dispositivo móvil o emulador con el emulador de Wear OS: Wear OS redondo de 1.84".
- Dispositivos de hardware: El entorno de pruebas debe incluir una pequeña cantidad de dispositivos de hardware reales que representen los factores de forma y las combinaciones de hardware y software claves que se encuentren actualmente disponibles para los consumidores. No es necesario que pruebes todos los dispositivos disponibles en el mercado. En su lugar, concéntrate en una pequeña cantidad de dispositivos representativos (incluso puedes usar uno o dos dispositivos por factor de forma).
- Test Labs de dispositivos: También puedes usar servicios de terceros, como Firebase Test Lab, a fin de probar tu app en una variedad más amplia de dispositivos.
- Prueba con la versión más reciente de Android: Además de probar versiones representativas de Android para tu base de usuarios objetivo, siempre debes realizar pruebas con la versión más reciente de Android (actualmente, Android 14). Esto garantizará que los cambios de comportamiento más recientes no afecten negativamente la experiencia del usuario.
Si deseas obtener una guía más completa sobre las pruebas, incluidas la prueba de unidades, la de integración y la de IU, consulta los aspectos fundamentales para pruebas en Android.
Procedimientos de prueba
Estos procedimientos de prueba te ayudarán a descubrir varios tipos de problemas de calidad en tu app. Puedes combinar las pruebas o integrar grupos de ellas en tus propios planes de prueba. Consulta las secciones anteriores a fin de obtener referencias que asocien criterios con estos procedimientos de prueba.
Tipo | Prueba | Descripción |
---|---|---|
Conjunto central | CR-0 | Navega a todas las partes de la app (pantallas, diálogos, configuraciones y flujos de usuarios).
|
CR-1 | Desde cada una de las pantallas de la app, presiona para ir a la página principal del dispositivo o desliza el dedo hacia arriba en la navegación por gestos y vuelve a iniciar la app desde la pantalla Todas las apps. | |
CR-2 | Desde cada una de las pantallas de la app, pasa a otra que se esté ejecutando y luego regresa a la app que estés probando mediante el conmutador de Apps recientes. | |
CR-3 | Desde cada una de las pantallas (y diálogos) de la app, presiona el botón Atrás o usa el gesto para deslizar hacia atrás. | |
CR-5 | Desde cada una de las pantallas de la app, rota el dispositivo entre la orientación horizontal y vertical, y los estados plegado y desplegado al menos tres veces. | |
CR-6 | Cambia a otra app para enviar la que estás probando a segundo plano. Ingresa en Configuración y comprueba si la app que estás probando tiene servicios ejecutándose mientras se encuentra en segundo plano. En Android 4.0 y versiones posteriores, dirígete a la pantalla Apps y busca la app en la pestaña "En ejecución". | |
CR-7 | Presiona el botón de encendido para colocar el dispositivo en modo de suspensión y luego presiona nuevamente el botón de encendido para reactivar la pantalla. | |
CR-8 | Establece un bloqueo de pantalla en el dispositivo. Presiona el botón de encendido para colocar el dispositivo en modo de suspensión (el cual bloquea el dispositivo). A continuación, vuelve a presionar el botón de encendido para activar la pantalla y desbloquear el dispositivo. | |
CR-9 | Inicia la app y observa en el panel lateral de notificaciones todos los tipos de notificaciones que la app puede mostrar. Cuando sea posible (en Android 4.1 y versiones posteriores), expande las notificaciones y presiona todas las acciones disponibles. | |
CR-10 | Consulta Compatibilidad con otros casos de uso en Descanso y App Standby. | |
Instalación en tarjetas SD | SD-1 | Repite el paquete principal con la app instalada en la tarjeta SD del dispositivo (si la app admite este método de instalación).
A fin de mover la app a la tarjeta SD, puedes usar Configuración > Información de apps > Mover a la tarjeta SD. |
Rendimiento y estabilidad | SP-1 | Revisa el archivo de manifiesto de Android y la configuración de compilación para asegurarte de que la aplicación esté compilada con la última versión disponible del SDK (targetSdk y compileSdk ).
|
SP-2 | Revisa el archivo build.gradle a fin de comprobar si hay dependencias desactualizadas. |
|
SP-3 | Usa la herramienta lint de Android Studio para detectar el uso de interfaces que no pertenezcan al SDK. También existen otros métodos de prueba alternativos. | |
Control del rendimiento | PM-1 | Repite el paquete principal con la creación de perfiles de StrictMode habilitada.
Presta mucha atención a la recolección de elementos no utilizados y su impacto en la experiencia del usuario. |
Batería | BA-1 | Repite el paquete principal en los ciclos de Descanso y App Standby.
Presta mucha atención a las alarmas, los temporizadores, las notificaciones y las sincronizaciones, entre otros elementos. Si deseas obtener información sobre los requisitos y lineamientos, consulta Pruebas con Descanso y App Standby. |
Seguridad | SC-1 | Revisa todos los datos guardados en el almacenamiento externo. |
SC-2 | Revisa cómo se controlan y procesan los datos que se cargan desde el almacenamiento externo. | |
SC-3 | Revisa todos los proveedores de contenido definidos en el archivo de manifiesto de Android. Asegúrate de que cada proveedor tenga un protectionLevel adecuado.
|
|
SC-4 | Revisa todos los permisos que tu app requiere en el archivo de manifiesto, el tiempo de ejecución y la pantalla de configuración de la app (Configuración > Información de apps) en el dispositivo. | |
SC-5 | Revisa todos los componentes de la aplicación definidos en el archivo de manifiesto de Android para el estado de exportación apropiado. La propiedad de exportación debe establecerse explícitamente para todos los componentes. | |
SC-6 | Revisa la configuración de seguridad de red de la app y asegúrate de que no se produzca ningún error de configuración en las verificaciones de lint. | |
SC-7 | Para cada WebView, navega a una página que requiera JavaScript. | |
SC-8 | En cada WebView, intenta navegar a sitios y contenido que tu app no cargue de forma directa. | |
SC-9 | Declara una configuración de seguridad de red que inhabilite el tráfico de texto simple y, luego, prueba la app. | |
SC-10 | Ejecuta la aplicación y prueba todas las funciones básicas mientras observas el registro del dispositivo. No se debe registrar ninguna información privada de los usuarios. | |
Google Play | GP-1 | Inicia sesión en Google Play Console a fin de revisar tu perfil de desarrollador, la descripción de la app, las capturas de pantalla, el gráfico de funciones, la clasificación del contenido y los comentarios de los usuarios. |
GP-2 | Descarga tu gráfico de funciones y las capturas de pantalla, y reduce su tamaño de modo que coincidan con el de la pantalla de los dispositivos y factores de forma objetivo. | |
GP-3 | Revisa todos los recursos gráficos, el contenido multimedia, el texto, las bibliotecas de códigos y otros materiales incluidos en la descarga de la app o el archivo de expansión. |
Prueba con StrictMode
Para la prueba de rendimiento, te recomendamos que habilites StrictMode
en tu app y lo uses para detectar operaciones que podrían afectar el rendimiento, el acceso a la red, la lectura/escritura de archivos, etc. Busca operaciones potencialmente problemáticas en el subproceso principal y en otros.
Puedes establecer una política de supervisión por subproceso mediante StrictMode.ThreadPolicy.Builder
y habilitar toda la supervisión compatible en ThreadPolicy
con detectAll()
.
Asegúrate de habilitar la notificación visual de los incumplimientos de políticas para la
ThreadPolicy
mediante
penaltyFlashScreen()
.