Únete a ⁠ #Android11: The Beta Launch Show el 3 de junio.

Cómo recopilar datos de tráfico de red con la herramienta Network Traffic

La herramienta Network Traffic dejó de estar disponible. Si usas Android Studio 3.0 o una versión posterior, debes usar el Generador de perfiles de red para examinar cómo y cuándo tu app transfiere datos por medio de redes.

El tráfico de red generado por una app puede tener un impacto significativo en la duración de batería del dispositivo en el que se ejecuta. Para optimizar ese tráfico, debes identificar su fuente y medirlo. Las solicitudes de red pueden provenir directamente de una acción del usuario, del código de la app o de un servidor que se comunica con ella.

La herramienta Network Traffic (parte de las herramientas DDMS) te permite ver cómo y cuándo tu app transfiere datos a través de una red.

En esta lección, se muestra cómo medir y categorizar las solicitudes de red etiquetando el código fuente y, luego, se explica cómo implementar, probar y visualizar el tráfico de red de tus apps.

Etiqueta solicitudes de red

Las apps usan el hardware de red en un dispositivo por varias razones. Para optimizar el uso de los recursos de red de tu app, debes comprender con qué frecuencia usa la red y por qué razones. Para analizar el rendimiento, desglosa el uso del hardware de red en estas categorías:

  • Solicitudes de red iniciadas por el usuario: Por ejemplo, cuando el usuario solicita una lista de artículos actualizados en una app de noticias.
  • Solicitudes de red iniciadas por la app: Se realizan dentro del código de la app para Android y no sirven para cumplir inmediatamente con una acción del usuario; por ejemplo, una solicitud para almacenar en caché artículos sin leer en una app de noticias.
  • Solicitudes de red iniciadas por el servidor: Son las que inicia un servidor.

Este procedimiento te muestra cómo etiquetar el código fuente de tu app con constantes para categorizar el tráfico en alguno de estos tres tipos de solicitud. La herramienta Network Traffic representa cada tipo de tráfico con un color distinto para que puedas visualizar y optimizar cada corriente de tráfico por separado. La técnica que se describe aquí informa el tráfico de red de acuerdo con la ejecución de subprocesos en tu app, lo que debes identificar como fuente de tipo usuario, app o servidor.

  1. En el proyecto de desarrollo de tu app, define tres constantes que representen los diferentes tipos de uso de red:

    Kotlin

        const val USER_INITIATED: Int = 0x1000
        const val APP_INITIATED: Int = 0x2000
        const val SERVER_INITIATED: Int = 0x3000
        

    Java

        public static final int USER_INITIATED = 0x1000;
        public static final int APP_INITIATED = 0x2000;
        public static final int SERVER_INITIATED =0x3000;
        
  2. Busca el código de red de tu app mediante las clases más comunes que se usan con este propósito:
    1. En Android Studio, elige Edit > Find > Find in Path.
    2. Pega la siguiente string en el campo Text to find:
      extends GcmTaskService|extends JobService|extends AbstractThreadedSyncAdapter|HttpUrlConnection|Volley|Glide|HttpClient
    3. Marca Regular expression.
    4. Marca File mask(s) y escribe *.java.
    5. Haz clic en el botón Find.
  3. En función de tus hallazgos del paso anterior, etiqueta el uso de tráfico de red tu app agregando el método setThreadStatsTag(int) a cada subproceso de ejecución de tu app que use recursos de red, tal como se muestra en el siguiente código de ejemplo.

    Kotlin

        if (BuildConfig.NETWORK_TEST && Build.VERSION.SDK_INT >= 14) {
            try {
                TrafficStats.setThreadStatsTag(USER_INITIATED)
                // make network request using HttpClient.execute()
            } finally {
                TrafficStats.clearThreadStatsTag()
            }
        }
        

    Java

        if (BuildConfig.NETWORK_TEST && Build.VERSION.SDK_INT >= 14) {
            try {
                TrafficStats.setThreadStatsTag(USER_INITIATED);
                // make network request using HttpClient.execute()
            } finally {
                TrafficStats.clearThreadStatsTag();
            }
        }
        

    Nota: Asegúrate de que el etiquetado no afecte tu código de producción; para ello, incluye este código condicional, basado en el tipo de compilación que se usa para generar el APK. En el ejemplo anterior, el campo BuildConfig.NETWORK_TEST identifica a este APK como versión de prueba.

Nota: Esta técnica de etiquetado del tráfico de red de tu app depende de la manera en que las API que usas acceden y administran los sockets de red. Es posible que algunas bibliotecas de red no permitan que las utilidades TrafficStats etiqueten el tráfico de tu app.

Para obtener más información sobre el etiquetado y el seguimiento del tráfico de red con la herramienta Network Traffic, consulta Uso detallado de red en DDMS.

Configura un tipo de compilación de prueba de red

Cuando ejecutes pruebas de rendimiento de red, tu APK debería encontrarse lo más cerca posible de su compilación de producción. Para alcanzar este objetivo en tus pruebas de red, crea un tipo de compilación network-test, en lugar de usar el tipo de debug.

  1. Abre tu app en Android Studio.
  2. Modifica el archivo build.gradle de tu app a fin de crear un tipo de compilación depurable para tus pruebas de red como se muestra en el siguiente código de ejemplo:
        android {
            ...
            buildTypes {
                debug {
                    // debuggable true is default for the debug buildType
                }
                network-test {
                    debuggable true
                }
            }
            ...
        }
        

Implementa el APK de prueba de red

Para implementar el APK generado por el tipo de compilación network-test que se configuró en el procedimiento anterior, haz lo siguiente:

  1. Verifica que las Opciones para desarrolladores estén habilitadas en tu dispositivo de prueba. Para obtener información sobre cómo verificar y habilitar esta opción, consulta Uso de dispositivos de hardware.
  2. Con un cable USB, conecta el dispositivo de prueba a la computadora de desarrollo.
  3. En Android Studio, selecciona Build Variants en el borde izquierdo de la ventana.
  4. Haz clic en el botón Sync Project with Gradle Files para completar la lista de variantes de compilación con network-test para el módulo de la app.
  5. Elige network-test en la lista.
  6. Implementa la versión depurable de tu app en el dispositivo seleccionando Run > Debug.

Ejecuta la herramienta de tráfico de red

La herramienta Network Traffic de Android Studio te permite ver cómo tu app usa recursos de red en tiempo real mientras se ejecuta.

Para mejorar la repetibilidad de tus pruebas, debes borrar los datos de app a fin de comenzar con un estado inicial conocido de esta. El siguiente procedimiento incluye un paso que muestra cómo borrar todos los datos de la app, incluidos los datos previamente almacenados en caché y los de red. Este paso devuelve la app a un estado en el que debe volver a almacenar en caché todos los datos que había guardado previamente. No lo omitas.

Para iniciar la herramienta Network Traffic y visualizar las solicitudes de red, haz lo siguiente:

  1. Abre Android Studio y, luego, inicia Android Device Monitor y la herramienta Network Traffic. Cuando se te solicite, permite las conexiones de red entrantes.
  2. En la ventana de Android Device Monitor, haz clic en el botón DDMS en la parte superior y selecciona la pestaña Network Statistics. Si no la ves, amplía la ventana y prueba con Window > Reset Perspective.
  3. Selecciona la app que depurarás en la lista de apps depurables del dispositivo de la pestaña Devices y, luego, haz clic en el botón Start de la pestaña Network Statistics.

    Nota: Es posible que se te solicite que Allow USB Debugging (permitas la depuración por USB) en el dispositivo. Selecciona OK para continuar con la depuración.

  4. Borra los datos de app con el siguiente comando adb:
        adb shell pm clear package.name.of.app
        
  5. Inicia tu app y ejecuta un plan de prueba que aborde sus principales casos prácticos. El plan también debe permitir cierto tiempo de inactividad de la app, en el que el usuario no interactúa con ella, para que se produzca acceso a la red iniciado por la app y por el servidor.
  6. Para repetir la prueba, borra los datos de app y ejecuta de nuevo el plan. Debes repetir la prueba varias veces para verificar la repetibilidad de tus datos de rendimiento.

Etiquetar el tráfico de red te ayuda a distinguir visualmente cada categoría de solicitud, ya que muestra un color distinto para cada tráfico de red en la herramienta Network Traffic, como se muestra en la figura 1.

Figura 1: Tráfico de red etiquetado para las tres categorías