Coletar dados de tráfego de rede com a ferramenta Network Traffic

A ferramenta Network Traffic está obsoleta. Se você está usando o Android Studio 3.0 ou posterior, use o Network Profiler para analisar como e quando seu app transfere dados em uma rede.

O tráfego de rede gerado por um app pode ter um impacto significativo sobre a duração da bateria do dispositivo em que ele é executado. Para otimizar esse tráfego, é necessário medi-lo e identificar a origem dele. As solicitações de rede podem vir diretamente de uma ação do usuário, de solicitações do próprio código do app ou de um servidor que se comunica com o app.

A ferramenta Network Traffic (parte das ferramentas do DDMS) permite visualizar como e quando o app transfere dados em uma rede.

Esta lição mostra como medir e categorizar solicitações de rede marcando o código-fonte. Em seguida, ela mostra como implantar, testar e visualizar o tráfego de rede dos seus apps.

Marcar solicitações de rede

Os apps usam o hardware de rede em um dispositivo por várias razões. Para otimizar corretamente o uso dos recursos de rede, é necessário entender com que frequência o app usa a rede e por quê. Para fins de análise de desempenho, divida o uso do hardware de rede nestas categorias:

  • Solicitações de rede iniciadas pelo usuário: solicitações iniciadas pelo usuário, como uma solicitação de uma lista atualizada de artigos em um app de notícias.
  • Solicitações de rede iniciadas pelo app: solicitações iniciadas no código do app Android que não são usadas para atender imediatamente uma ação do usuário. Por exemplo, uma solicitação para armazenar em cache o texto de artigos não lidos em um app de notícias.
  • Solicitações de rede iniciadas pelo servidor: solicitações iniciadas por um servidor do seu app que não são usadas para atender imediatamente uma ação do usuário. Por exemplo, uma notificação de um artigo recém-disponibilizado em um app de notícias.

Este procedimento mostra como marcar o código-fonte do app com constantes para categorizar o tráfego como um desses três tipos de solicitação. A ferramenta Network Traffic representa cada tipo de tráfego com uma cor diferente. Assim, é possível ver e otimizar cada fluxo de tráfego separadamente. A técnica descrita aqui relata o tráfego de rede com base nas linhas de execução no app que você identificou como usuário, app ou origem do servidor.

  1. No projeto de desenvolvimento do app, defina três constantes para representar os diferentes tipos de uso da rede:

    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. Para encontrar o código de rede no app, pesquise as classes mais comuns usadas para esse fim:
    1. No Android Studio, selecione Edit > Find > Find in Path.
    2. Cole esta string no campo Text to find:
      extends GcmTaskService|extends JobService|extends AbstractThreadedSyncAdapter|HttpUrlConnection|Volley|Glide|HttpClient
    3. Marque a opção Regular expression.
    4. Marque a opção File mask(s) e digite *.java.
    5. Clique no botão Find.
  3. Com base nos resultados da etapa anterior, marque o uso de tráfego de rede do app. Para isso, adicione o método setThreadStatsTag(int) a cada linha de execução no app que usa recursos de rede, conforme mostrado no exemplo de código a seguir.

    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();
            }
        }
        

    Observação: verifique se a inclusão de tag não entra no código de produção. Para isso, torne a inclusão desse código condicional com base no tipo de compilação usado para gerar o APK. No exemplo acima, o campo BuildConfig.NETWORK_TEST identifica esse APK como uma versão de teste.

Observação: essa técnica para marcar o tráfego de rede do app depende de como as APIs usadas acessam e gerenciam soquetes de rede. Algumas bibliotecas de rede podem não permitir que os utilitários TrafficStats marquem o tráfego do app.

Para saber mais sobre como marcar e rastrear o tráfego de rede com a ferramenta Network Traffic, consulte Uso detalhado da rede no DDMS (em inglês).

Configurar um tipo de compilação de teste de rede

Ao executar testes de desempenho, o APK deve estar o mais próximo possível da compilação de produção. Para que isso aconteça no seu teste de rede, crie um tipo de compilação network-test, em vez de usar o tipo de compilação debug.

  1. Abra seu app no Android Studio.
  2. Crie um tipo de compilação depurável para o teste de rede modificando o arquivo build.gradle do projeto, conforme mostrado no exemplo de código a seguir:
        android {
            ...
            buildTypes {
                debug {
                    // debuggable true is default for the debug buildType
                }
                network-test {
                    debuggable true
                }
            }
            ...
        }
        

Implantar o APK de teste de rede

Para implantar o APK gerado pelo tipo de compilação network-test configurado no procedimento anterior:

  1. Verifique se as Opções do desenvolvedor estão ativadas no dispositivo de teste. Para saber mais sobre como verificar e ativar essa opção, consulte Executar apps em um dispositivo de hardware.
  2. Com um cabo USB, conecte o dispositivo de teste ao computador de desenvolvimento.
  3. No Android Studio, selecione Build Variants na borda esquerda da janela.
  4. Clique no botão Sync Project with Gradle Files para preencher a lista "Build Variants" com o network-test do módulo do app.
  5. Selecione network-test na lista.
  6. Implante a versão depurável do app no dispositivo selecionando Run > Debug.

Executar ferramenta Network Traffic

A ferramenta Network Traffic no Android Studio ajuda a ver como o app usa recursos de rede em tempo real durante a execução.

Para melhorar a capacidade de repetição dos testes, comece com um estado inicial conhecido para o app limpando os dados dele. O procedimento a seguir inclui uma etapa que mostra como limpar todos os dados do app, incluindo aqueles previamente armazenados em cache e os de rede. Esta etapa retorna seu app para um estado em que é necessário armazenar novamente em cache todos os dados que já estavam nesse armazenamento. Não pule essa etapa.

Para iniciar a ferramenta Network Traffic e ver as solicitações de rede:

  1. Para iniciar a ferramenta Network Traffic, abra o Android Studio e inicie o Android Device Monitor. Quando solicitado, permita as conexões de rede de entrada.
  2. Na janela do Android Device Monitor, clique no botão DDMS na parte superior e selecione a guia Network Statistics. Caso não veja essa guia, amplie a janela e selecione Window > Reset Perspective.
  3. Selecione o app a ser depurado na lista de apps depuráveis do dispositivo na guia Devices e clique no botão Start, na guia Network Statistics.

    Observação: talvez você veja a solicitação Allow USB Debugging para permitir a depuração USB no dispositivo. Selecione OK dar continuidade à depuração.

  4. Limpe os dados do app por meio deste comando do adb:
        adb shell pm clear package.name.of.app
        
  5. Inicie seu app e execute um plano de teste que exercite os principais casos de uso dele. O plano também deve aceitar o tempo de inatividade do app, em que não há interações do usuário. Assim, o acesso à rede iniciado pelo app ou pelo servidor poderá ocorrer.
  6. Repita o teste limpando os dados do app e executando o plano de teste novamente. Repita o teste algumas vezes para verificar a capacidade de repetição dos dados de desempenho.

A inclusão de tag para tráfego de rede ajuda a distinguir visualmente cada categoria de solicitação produzindo uma cor diferente para cada tráfego de rede na ferramenta Network Traffic, conforme mostrado na Figura 1.

Figura 1. Tráfego de rede marcado para as três categorias.