사전 빌드 APK 프로파일링 및 디버깅

Android Studio 3.0에서는 Android Studio 프로젝트에서 빌드하지 않고서도 APK를 프로파일링하고 디버깅할 수 있습니다. 그러나 디버깅 가능 버전의 APK를 사용 중인지 확인해야 합니다.

APK 디버깅을 시작하려면 Android Studio Welcome 화면에서 Profile or debug APK를 클릭합니다. 또는 프로젝트가 이미 열려있는 경우 메뉴 모음에서 File > Profile or debug APK를 클릭합니다. 그 다음 나타나는 대화상자 창에서, Android Studio로 가져오려는 APK를 선택하고 OK를 클릭합니다. 그림 1과 유사한 화면이 나타날 것입니다.

그림 1. 사전 빌드 APK를 Android Studio로 가져오기.

참고: APK를 Android Studio로 가져올 때 IDE는 홈 디렉토리에 새 프로젝트를 생성하고 대상 APK의 로컬 복사본을 만듭니다. 즉, 원본 APK를 다시 빌드하거나 업데이트하는 경우에는 업데이트된 버전을 Android Studio로 직접 가져와야 합니다.

Project 창의 Android 뷰에서는 APK의 다음과 같은 내용을 검사할 수 있습니다.

  • APK file: APK를 두 번 클릭하면 APK Analyzer가 열립니다.
  • manifests: APK로부터 추출된 애플리케이션 매니페스트.
  • java: 여기에는 Android Studio가 APK의 DEX 파일로부터 .smali 파일로 분해하는 Java 코드가 포함됩니다. 이 디렉토리의 각 .smali 파일이 하나의 Java 클래스에 해당.
  • cpp: 앱에 네이티브 코드가 포함된 경우, 이 디렉토리에는 APK의 네이티브 라이브러리(.so 파일)가 포함됩니다.
  • External Libraries: Android SDK가 포함됩니다.

즉시 Android 프로파일러를 사용하여 앱 성능을 테스트할 수 있지만, 현재는 프로파일러가 앱의 Java 프로세스에서만 작동합니다. 중단점을 사용하여 앱의 Java 및 네이티브 코드를 디버깅하려면, 먼저 Java 소스를 연결하고 네이티브 디버그 기호를 연결해야 합니다.

Java 소스 연결

기본적으로, Android Studio는 APK로부터 Java 코드를 추출하여 .smali 파일로 저장합니다. 중단점을 사용하여 Java 코드를 디버깅하려면, 디버깅하려는 각 .smali 파일에 Java 소스를 연결해야 합니다.

Java 소스를 연결하려면 다음 단계를 진행하세요.

  1. Project 창에서 .smali 파일을 두 번 클릭합니다( Android 뷰 사용). 파일을 열면 Java 소스를 선택하라는 노란색 경고 배너가 편집기에 표시됩니다(그림 1 참조).
  2. 편집기 창 상단의 Attach Java Sources를 클릭합니다.
  3. 앱의 Java 소스 파일이 있는 디렉토리로 이동하여 Open을 클릭합니다.

Project 창에서 IDE가 .smali 파일을 해당 .java 파일로 바꿉니다. 이제 일반적으로 하듯이 중단점을 추가하고 앱을 디버깅할 수 있습니다.

네이티브 디버그 기호 연결

디버그 기호를 포함하지 않는 네이티브 라이브러리(.so 파일)가 APK에 포함된 경우, IDE는 그림 X에 나타난 것과 유사한 경고를 Messages 창에 표시합니다. 디버깅 가능 네이티브 라이브러리를 연결하지 않고서는 APK의 네이티브 코드를 디버깅하거나 중단점을 사용할 수 없습니다. 아직 그렇게 하지 않은 경우 NDK와 도구를 다운로드하세요.

디버깅 가능 네이티브 라이브러리를 연결하려면 다음 단계를 진행하세요.

  1. Project 창의 cpp 디렉토리에서, 디버그 기호를 포함하지 않는 네이티브 라이브러리 파일을 두 번 클릭합니다. APK가 지원하는 모든 ABI가 편집기에 표로 나타납니다.
  2. 편집기 창 오른쪽 위 모서리에서 Add를 클릭합니다.
  3. 연결하려는 디버깅 가능 네이티브 라이브러리가 포함된 디렉토리로 이동하여 OK를 클릭합니다.
  4. APK와 디버깅 가능 네이티브 라이브러리가 서로 다른 워크스테이션을 사용하여 빌드된 경우, 다음 단계에 따라 디버그 기호의 로컬 경로를 지정해야 합니다.
    1. 누락된 디버그 기호에 대한 로컬 경로를 추가하려면 편집기 창의 Path Mappings 섹션에 있는 Local Paths 열 아래의 필드를 편집합니다(그림 2 참조). IDE는 원격 NDK에 대한 경로를 로컬 NDK 다운로드의 경로에 자동으로 매핑합니다.
    2. Apply를 클릭합니다.

      그림 2. 로컬 디버그 기호에 대한 경로 제공.

이제 네이티브 소스 파일이 Project 창에 나타날 것입니다. 네이티브 파일을 열고 일반적으로 하듯이 중단점을 추가하고 앱을 디버깅합니다.

알려진 문제: 디버그 기호를 APK에 연결할 때, APK와 디버깅 가능 .so 파일은 모두 동일한 워크스테이션이나 빌드 서버를 사용하여 빌드되어야 합니다.