Generar perfiles y depurar APK previamente compilados

Android Studio 3.0 te permite generar perfiles y depurar APK sin tener que compilarlos desde un proyecto de Android Studio. No obstante, debes asegurarte de usar una versión depurable del APK.

Para comenzar a depurar un APK, haz clic en Profile o debug APK en la pantalla de bienvenida de Android Studio. O bien, si ya tienes un proyecto abierto, haz clic en File > Profile o debug APK en la barra de menú. En la ventana de diálogo siguiente, selecciona el APK que desees importar a Android Studio y haz clic en OK. Verás algo similar a lo que aparece en la figura 1.

Figura 1: Importación de un APK previamente compilado a Android Studio.

Nota: Cuando importas un APK a Android Studio, el IDE crea un proyecto nuevo en tu directorio principal y realiza una copia local del APK de destino. Esto significa que si vuelves a compilar o actualizas el APK original, deberás volver a importar manualmente la versión actualizada a Android Studio.

La vista Android, en el subpanel Project, te permite explorar el siguiente contenido de tu APK:

  • APK file: al hacer doble clic, el APK abre el analizador de APK.
  • manifests: los manifest de la aplicación, extraídos del APK.
  • java: contiene código Java que Android Studio desensambla (en archivos .smali ) a partir de los archivos DEX de tu APK. Cada archivo .smali de este directorio corresponde a una clase Java.
  • cpp: si tu app incluye código nativo, este directorio contiene las bibliotecas nativas de tu APK (archivos .so).
  • External Libraries: contiene el Android SDK.

Puedes usar el generador de perfiles de Android de inmediato para comenzar a probar el rendimiento de tu app. No obstante, esta herramienta actualmente funciona únicamente con los procesos Java de tu app. Para depurar el código Java y el código nativo de tu app usando puntos de interrupción, primero debes adjuntar las fuentes de Java y símbolos de depuración nativa.

Adjuntar fuentes de Java

De forma predeterminada, Android Studio extrae código Java de tu APK y lo guarda como archivos .smali. Para depurar el código Java usando puntos de interrupción, debes adjuntar las fuentes de Java a cada archivo .smali que desees depurar.

Para adjuntar fuentes de Java, sigue estos pasos:

  1. Haz doble clic en el archivo .smali del subpanel Project (usa la vista Android). Una vez que se abre el archivo, en el editor se muestra un banner de advertencia amarillo en el que se te solicita seleccionar las fuentes de Java, como se muestra en la figura 1.
  2. Haz clic en Attach Java Sources, en la parte superior de la ventana del editor.
  3. Dirígete al directorio en el que se encuentran los archivos de origen de Java y haz clic en Open.

En la ventana Project, el IDE reemplaza los archivos .smali con sus archivos .java correspondientes. Ahora puedes agregar puntos de interrupción y depurar tu app como lo harías normalmente.

Adjuntar símbolos de depuración nativa

Si tu APK incluye bibliotecas nativas (archivos .so) que no incluyen símbolos de depuración, el IDE te mostrará en la ventana Messages una advertencia similar a la que se muestra en la figura X. No puedes depurar el código nativo del APK ni usar puntos de interrupción sin adjuntar bibliotecas nativas depurables. Si todavía no lo hiciste, asegúrate de descargar el NDK y las herramientas.

Para adjuntar bibliotecas nativas depurables, sigue estos pasos:

  1. En el directorio cpp de la ventana Project, haz doble clic en un archivo de biblioteca nativa que no incluya símbolos de depuración. En el editor se muestra una tabla con todas las ABI compatibles con tu APK.
  2. Haz clic en Add en la esquina superior derecha de la ventana del editor.
  3. Dirígete al directorio en el que se incluyen las bibliotecas nativas depurables que desees adjuntar y haz clic en OK.
  4. Si el APK y las bibliotecas nativas depurables se compilaron usando una estación de trabajo diferente, deberás especificar rutas de acceso locales a los símbolos de depuración siguiendo estos pasos:
    1. Agrega rutas de acceso locales para los símbolos de depuración faltantes editando el campo debajo de la columna Local Paths en la sección Path Mappings de la ventana del editor, como se muestra en la figura 2. El IDE asigna automáticamente rutas de acceso a un NDK remoto para las rutas de acceso en tu descarga local del NDK.
    2. Haz clic en Apply.

      Figura 2: Provisión de rutas de acceso a símbolos de depuración locales.

Podrás ver los archivos de origen nativos en la ventana Project. Abre esos archivos nativos para agregar puntos de interrupción y depurar tu app como lo harías normalmente.

Problema conocido: Al adjuntar símbolos de depuración a un APK, este y los archivos .so depurables deben compilarse usando la misma estación de trabajo o el mismo servidor de compilación.