Depurar APKs pré-compilados

O Android Studio 3.0 e versões mais recentes permitem que você crie perfis e depure APKs com a depuração ativada sem precisar criá-los em um projeto do Android Studio.

Para começar a depurar um APK, siga estas etapas:

  1. Na tela de boas-vindas do Android Studio, clique em Profile or debug APK.

    Se já tiver um projeto aberto, clique em File > Profile or Debug APK na barra de menus.

  2. Na caixa de diálogo aberta, selecione o APK que você quer importar para o Android Studio.

  3. Clique em OK.

Se essa opção não aparecer, verifique se o plug-in "Suporte ao APK do Android" está ativado.

Com isso, o Android Studio mostra 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.

Como importar um APK pré-criado para o Android Studio

Figura 1. Como importar um APK pré-criado para o AndroidStudio.

A visualização Android no painel "Project" permite inspecionar este conteúdo do APK:

  • APK file: clique duas vezes no APK para abrir o APK Analyzer.
  • manifests: contém os manifestos de apps extraídos do APK.
  • java: contém o código Kotlin ou Java que o Android Studio desmonta (em arquivos SMALI) nos arquivos DEX do APK. Cada arquivo SMALI nesse diretório corresponde a uma classe Kotlin ou Java.
  • cpp: se o app incluir código nativo, esse diretório vai conter as bibliotecas nativas do seu APK (arquivos SO).
  • External Libraries: contém o Android SDK.

Você pode usar o Android Profiler para começar os testes de desempenho do seu app.

Para depurar o código Kotlin ou Java do seu app, é necessário anexar origens Kotlin ou Java e adicionar pontos de interrupção nos arquivos de origem Kotlin ou Java. Da mesma forma, para depurar seu código nativo, é necessário anexar símbolos de depuração nativos.

Anexar origens Kotlin ou Java

Por padrão, o Android Studio extrai o código Kotlin ou Java do seu APK e o salva como arquivos SMALI. Para depurar o código Kotlin ou Java usando pontos de interrupção, aponte o ambiente de desenvolvimento integrado para os arquivos de origem Kotlin ou Java que correspondem aos arquivos SMALI que você quer depurar.

Para anexar origens Kotlin ou Java, siga estas etapas:

  1. Clique duas vezes em um arquivo SMALI do painel Project na visualização Android. Depois de abrir o arquivo, o editor mostra um banner pedindo para você selecionar as origens Kotlin ou Java: Anexar banner de origens
  2. Clique em Attach Kotlin/Java Sources… no banner na janela do editor.
  3. Navegue até o diretório com os arquivos de origem Kotlin ou Java do app e clique em Open.

Na janela Project, o Android Studio substitui arquivos SMALI pelos arquivos de origem Kotlin ou Java correspondentes. O Android Studio também inclui classes internas automaticamente. Agora é possível adicionar pontos de interrupção e depurar o app.

Anexar símbolos de depuração nativos

Se o APK incluir bibliotecas nativas (arquivos SO) que não incluem símbolos de depuração, o Android Studio vai mostrar um banner semelhante ao que aparece 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.

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. Na visualização Android, no diretório cpp na janela Project, clique duas vezes em um arquivo de biblioteca nativa que não inclua símbolos de depuração.

    O editor mostra uma tabela de todas as ABIs com suporte do seu APK.

  3. Clique em Add no canto superior direito da janela do editor.

  4. Navegue até o diretório que tem as bibliotecas nativas depuráveis que você quer anexar e clique em OK.

Se o APK e as bibliotecas nativas depuráveis tiverem sido criados com uma estação de trabalho diferente, você também vai precisar 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 da seção Path Mappings na 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 origens. O Android Studio também mapeia automaticamente os caminhos para um NDK remoto para o download do NDK local.

  2. Clique em Apply Changes na seção Path Mappings da janela do editor.

Como fornecer caminhos para os símbolos locais de depuração

Figura 2. Caminhos locais para símbolos de depuração.

Os arquivos de origem nativos aparecem na janela Project. Abra esses arquivos de origem nativos para adicionar pontos de interrupção e depurar seu app. Para remover os mapeamentos, clique em Clear na seção Path Mappings da 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 criados usando a mesma estação de trabalho ou servidor de build.

No Android Studio 3.6 e versões mais recentes, não é necessário criar um novo projeto quando o APK é atualizado fora do ambiente de desenvolvimento integrado. O Android Studio detecta mudanças no APK e oferece a opção de importá-lo novamente.

Importar o APK atualizado

Figura 3. APKs atualizados fora do Android Studio podem ser importados novamente.