Criar perfis e depurar os APKs de pré-compilação

O Android Studio 3.0 e versões posteriores permite que você crie perfis e depure APKs sem precisar compilá-los a partir de um projeto do Android Studio. No entanto, é necessário garantir que você esteja usando um APK com depuração ativada.

Para iniciar a depuração de um APK, clique em Profile or Debug APK na tela de boas-vindas do Android Studio. Ou, se já tiver um projeto aberto, clique em File > Profile or Debug APK na barra de menus. Na caixa de diálogo seguinte, selecione o APK que você quer importar para o Android Studio e clique em OK.

Com isso, o Android Studio exibe os arquivos APK descompactados, como na Figura 1. Esse não é um conjunto de arquivos totalmente descompactado, apesar de oferecer arquivos .smali para uma versão mais legível dos arquivos .dex.

Figura 1. Importação de um APK pré-compilado para o Android Studio

A visualização Android no painel "Project" permite que você inspecione o seguinte conteúdo do seu APK:

  • APK file: clicar duas vezes no APK abre o APK Analyzer.
  • manifests: contém os manifestos de apps extraídos do APK.
  • java: contém o código Java que o Android Studio extrai (para arquivos .smali) dos arquivos DEX do seu APK. Cada arquivo .smali nesse diretório corresponde a uma classe Java.
  • cpp: se o app incluir código nativo, este diretório conterá as bibliotecas nativas do seu APK (arquivos .so).
  • External Libraries: contém o Android SDK.

Você pode usar o Android Profiler imediatamente para começar a testar o desempenho do seu app.

Para depurar o código Java do seu app, você precisará anexar as fontes Java e adicionar pontos de interrupção nos arquivos .java. Da mesma forma, para depurar seu código nativo, você precisará anexar símbolos de depuração nativos.

Anexar fontes Java

Por padrão, o Android Studio extrai o código Java do seu APK e o salva como arquivos .smali. Para depurar o código Java com pontos de interrupção, aponte o ambiente de desenvolvimento integrado para os arquivos-fonte .java que correspondam aos arquivos .smali que você quer depurar.

Para anexar fontes Java, faça o seguinte:

  1. Clique duas vezes em um arquivo .smali do painel Project (use a visualização Android). Depois de abrir o arquivo, o editor exibirá um banner de aviso solicitando que você selecione as fontes Java, conforme mostrado na Figura 1.
  2. Clique em Attach Java Sources no banner, no topo da janela do editor.
  3. Navegue para o diretório com os arquivos-fonte Java do app e clique em Open.

Na janela Project, o ambiente de desenvolvimento integrado substitui arquivos .smali pelos arquivos .java correspondentes. O ambiente de desenvolvimento integrado também inclui classes internas automaticamente. Agora, é possível adicionar pontos de interrupção e depurar seu app normalmente.

Anexar símbolos de depuração nativos

Se seu APK incluir bibliotecas nativas (arquivos .so) sem símbolos de depuração, o ambiente de desenvolvimento integrado mostrará um aviso na janela Messages, conforme mostrado na Figura 1. Não é possível depurar o código nativo do APK ou usar pontos de interrupção sem anexar bibliotecas nativas depuráveis.

Se você criar as bibliotecas nativas do seu APK com um código de compilação (link em inglês), o Android Studio verificará se o código nos seus arquivos de símbolo corresponde ao código das suas bibliotecas nativas e rejeitará os arquivos de símbolo se houver incompatibilidade. Se você não criar com um código de versão, fornecer arquivos de símbolo incorretos poderá causar problemas na depuração.

Para anexar bibliotecas nativas depuráveis, faça o seguinte:

  1. Faça o download do NDK e das ferramentas, caso ainda não tenha feito.
  2. No diretório cpp na janela Project (visível apenas se você tiver selecionado a visualização Android, conforme mostrado na Figura 2), clique duas vezes sobre um arquivo de biblioteca nativa que não inclua símbolos de depuração. O editor mostra uma tabela de todos os ABIs compatíveis com seu APK.
  3. Clique em Add no canto superior direito da janela do editor.
  4. Navegue até o diretório que inclua as bibliotecas nativas depuráveis que você quer anexar e clique em OK.

Se o APK e as bibliotecas nativas depuráveis foram compilados usando uma estação de trabalho diferente, você também precisa especificar caminhos para os símbolos de depuração locais seguindo estas etapas:

  1. Adicione caminhos locais para os símbolos de depuração ausentes editando o campo na coluna Local Paths na seção Path Mappings da janela do editor, conforme mostrado na Figura 2. Na maioria dos casos, basta fornecer o caminho para uma pasta raiz, e o Android Studio inspecionará automaticamente os subdiretórios para mapear outras fontes. O ambiente de desenvolvimento integrado também mapeia automaticamente caminhos para um NDK remoto no seu download local do NDK.
  2. Clique em Apply Changes na seção Path Mappings da janela do editor.

Figura 2. Fornecimento de caminhos para os símbolos locais de depuração

Os arquivos de fonte nativos serão exibidos na janela Project. Abra esses arquivos nativos para adicionar pontos de interrupção e depurar seu app normalmente. Também é possível remover os mapeamentos clicando em Clear na seção Path Mappings na janela do editor.

Problema conhecido: ao anexar símbolos de depuração em um APK, o APK e os arquivos .so depuráveis precisam ser compilados usando a mesma estação de trabalho ou servidor de compilação.