分析预构建的 APK

Android Studio 3.0 及更高版本允许您分析和调试已启用调试的 APK,而无需从 Android Studio 项目构建它们。

要开始调试 APK,请执行以下步骤

  1. 从 Android Studio 欢迎屏幕中,点击“分析或调试 APK”。

    如果您已打开项目,请从菜单栏中点击“文件 > 分析或调试 APK”。

  2. 在打开的对话框中,选择要导入 Android Studio 的 APK。

  3. 点击“确定”。

如果此选项未显示,请确保已启用“Android APK 支持”插件。

然后,Android Studio 将显示解压缩的 APK 文件,类似于图 1。这不是完全反编译的文件集,但它确实为 DEX 文件提供了 SMALI 文件,以提供更易读的版本。

Importing a pre-built APK into Android Studio

图 1. 将预构建的 APK 导入 Android Studio。

项目窗格中的 Android 视图允许您检查 APK 的以下内容

  • APK 文件:双击 APK 打开 APK 分析器。
  • 清单:包含从 APK 中提取的应用程序清单。
  • java:包含 Android Studio 从 APK 的 DEX 文件中反汇编(转换为 SMALI 文件)的 Kotlin 或 Java 代码。此目录中的每个 SMALI 文件对应于一个 Kotlin 或 Java 类。
  • cpp:如果您的应用程序包含本机代码,此目录将包含您的 APK 的本机库 (SO 文件)。
  • 外部库:包含 Android SDK。

您可以 使用 Android 分析器 开始测试应用程序的性能。

要调试应用程序的 Kotlin 或 Java 代码,您需要 附加 Kotlin 或 Java 源代码 并在 Kotlin 或 Java 源代码文件中添加断点。类似地,要调试本机代码,您必须 附加本机调试符号.

附加 Kotlin 或 Java 源代码

默认情况下,Android Studio 会从 APK 中提取 Kotlin 或 Java 代码并将其保存为 SMALI 文件。要使用断点调试 Kotlin 或 Java 代码,您需要将 IDE 指向与要调试的 SMALI 文件相对应的 Kotlin 或 Java 源代码文件。

要附加 Kotlin 或 Java 源代码,请执行以下操作

  1. 双击 Android 视图中 项目 窗格中的 SMALI 文件。打开文件后,编辑器将显示一个横幅,要求您选择 Kotlin 或 Java 源代码: 附加源代码横幅
  2. 单击编辑器窗口中横幅上的 附加 Kotlin/Java 源代码...
  3. 导航到包含应用程序 Kotlin 或 Java 源代码文件的目录,然后单击 打开

项目 窗口中,Android Studio 会用其相应的 Kotlin 或 Java 源代码文件替换 SMALI 文件。Android Studio 还会自动包含内部类。现在,您可以添加断点并 调试您的应用程序.

附加本机调试符号

如果您的 APK 包含不包含调试符号的本机库 (SO 文件),Android Studio 会向您显示一个类似于图 1 中所示的横幅。在附加可调试的本机库之前,您无法调试 APK 的本机代码或使用断点。

要附加可调试的本机库,请执行以下操作

  1. 如果您尚未这样做,请 下载 NDK 和工具.
  2. 项目 窗口的 Android 视图中,在 cpp 目录下,双击不包含调试符号的本机库文件。

    编辑器将显示 APK 支持的所有 ABI 的表格。

  3. 单击编辑器窗口右上角的 添加

  4. 导航到包含要附加的可调试本机库的目录,然后单击 确定

如果 APK 和可调试的本机库是使用不同的工作站构建的,您还需要通过执行以下步骤来指定本地调试符号的路径

  1. 通过编辑图 2 所示的编辑器窗口中 路径映射 部分 本地路径 列下的字段,添加缺少的调试符号的本地路径。

    在大多数情况下,您只需要提供指向根文件夹的路径,Android Studio 会自动检查子目录以映射其他源代码。Android Studio 还会自动将指向远程 NDK 的路径映射到您的本地 NDK 下载路径。

  2. 单击编辑器窗口 路径映射 部分中的 应用更改

Providing paths to local debug symbols

图 2. 调试符号的本地路径。

本机源代码文件将显示在 项目 窗口中。打开这些本机源代码文件以添加断点并 调试您的应用程序。要删除映射,请单击编辑器窗口 路径映射 部分中的 清除

已知问题:当将调试符号附加到 APK 时,APK 和可调试的 SO 文件必须使用相同的工作站或构建服务器构建。

在 Android Studio 3.6 及更高版本中,当 APK 在 IDE 外部更新时,您无需创建新项目。Android Studio 会检测 APK 中的更改,并提供重新导入它的选项。

Import updated APK

图 3. 在 Android Studio 外部更新的 APK 可以重新导入。