分析和调试预构建 APK
Android Studio 3.0 允许您分析和调试 APK,无需先从 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 分析器。
- manifests:从 APK 中提取的应用 manifest。
- java:包含 Android Studio 从您 APK 的 DEX 文件中反汇编(到
.smali
文件中)的 Java 代码。此目录下的每一个.smali
文件都对应一个 Java 类。 - cpp:如果您的应用包括原生代码,此目录将包含您的 APK 的原生库(
.so
文件)。 - External Libraries:包含 Android SDK。
您可以立即使用 Android Profiler 开始测试您的应用的性能 - 不过,分析器当前仅适用于您的应用的 Java 进程。 要使用断点调试您的应用的 Java 和原生代码,您需要先附加 Java 源代码和附加原生调试符号。
附加 Java 源代码
默认情况下,Android Studio 会从您的 APK 中提取 Java 代码,并将它们保存为 .smali
文件。 要使用断点调试 Java 代码,您需要将 Java 源代码附加到您想要调试的每一个 .smali
文件。
要附加 Java 源代码,请执行以下操作:
- 在 Project 窗格中双击
.smali
文件(使用 Android 视图)。打开文件后,编辑器将显示一个黄色的警告横幅(如图 1 中所示),要求您选择 Java 源代码。 - 点击编辑器窗口顶部的 Attach Java Sources。
- 导航到包含应用的 Java 源代码文件的目录,然后点击 Open。
在 Project 窗口中,IDE 会将.smali
文件替换为它们对应的.java
文件。 现在,您可以添加断点并像往常一样调试您的应用。
附加原生调试符号
如果您的 APK 包括的原生库(.so
文件)不包含调试符号,IDE 将在 Messages 窗口中向您显示一个警告,类似于图 X 中所示的警告。 如果不附加可调试的原生库,您将无法调试 APK 的原始代码或使用断点。 如果您还未下载,请务必下载 NDK 和工具。
要附加可调试的原生库,请执行以下操作:
- 在 Project 窗口的 cpp 目录下,双击不包含调试符号的原生库文件。编辑器将显示一个包含您的 APK 支持的所有 ABI 的表格。
- 点击编辑器窗口右上角的 Add。
- 导航到包含您想要附加的可调试原生库的目录,然后点击 OK。
- 如果 APK 和可调试原生库使用不同的工作站构建,您需要按照以下步骤操作,指定调试符号的本地路径:
- 在编辑器窗口 Path Mappings 部分中的 Local Paths 列下编辑相关字段,添加缺失调试符号的本地路径,如图 2 中所示。IDE 会将远程 NDK 的路径自动映射到您的本地 NDK 下载中的路径。
- 点击 Apply。
图 2. 提供本地调试符号的路径。
现在,您应当在 Project 窗口中看到原生源文件。 打开这些文件以添加断点并像往常一样调试您的应用。
已知问题: 将调试符号附加到 APK 时,APK 和可调试的 .so
文件必须使用相同的工作站或构建服务器构建。