调试预构建的 APK

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

如需开始调试 APK,请按以下步骤操作

  1. 在 Android Studio 欢迎屏幕中,点击 分析或调试 APK

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

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

  3. 点击确定

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

Android Studio 随后会显示解压后的 APK 文件,如图 1 所示。这并非完全反编译的文件集,但它提供了 SMALI 文件,可让 DEX 文件更具可读性。

Importing a pre-built APK into Android Studio

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

“项目”窗格中的Android视图可让您检查 APK 的以下内容

  • APK 文件:双击 APK 以打开 APK 分析器。
  • manifests:包含从 APK 中提取的应用清单。
  • java:包含 Android Studio 从 APK 的 DEX 文件中反汇编(为 SMALI 文件)的 Kotlin 或 Java 代码。此目录中的每个 SMALI 文件都对应一个 Kotlin 或 Java 类。
  • cpp:如果您的应用包含原生代码,则此目录包含 APK 的原生库(SO 文件)。
  • External Libraries:包含 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 视图中的 Project 窗格中双击 SMALI 文件。打开文件后,编辑器会显示一个横幅,要求您选择 Kotlin 或 Java 源代码:附加源代码横幅
  2. 在编辑器窗口的横幅中,点击附加 Kotlin/Java 源代码...
  3. 导航到包含应用 Kotlin 或 Java 源文件的目录,然后点击打开

Project 窗口中,Android Studio 会将 SMALI 文件替换为其对应的 Kotlin 或 Java 源文件。Android Studio 还会自动包含内部类。您现在可以添加断点并调试您的应用

附加原生调试符号

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

如需附加可调试的原生库,请按以下步骤操作

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

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

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

  4. 导航到包含您要附加的可调试原生库的目录,然后点击确定

如果 APK 和可调试原生库是使用不同的工作站构建的,您还需要按照以下步骤指定本地调试符号的路径

  1. 通过编辑编辑器窗口中Path Mappings部分的Local Paths列下的字段,添加缺失调试符号的本地路径,如图 2 所示。

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

  2. 在编辑器窗口的Path Mappings部分中,点击应用更改

Providing paths to local debug symbols

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

原生源文件会显示在 Project 窗口中。打开这些原生源文件即可添加断点并调试您的应用。如需移除映射,请点击编辑器窗口的 Path Mappings 部分中的清除

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

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

Import updated APK

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