使用 VS Code 和 Android Studio 阅读 Android 源码:基于 Copilot 的高效代码分析技巧

305 阅读6分钟

1. 背景

在日常开发中,大家常用 AI 工具(如 ChatGPT、DeepSeek 等)进行代码分析。但通过网页 AI 工具分析代码时,缺乏上下文,需要手动分段粘贴代码,效率低且容易遗漏关键信息。

公司引入 Copilot 后,大家多在 VS Code、Android Studio 等 IDE 插件中用 Copilot 进行代码分析。Copilot 能直接分析当前编辑器中的代码,并支持上下文,极大提升了分析效率,减少了人工粘贴的麻烦。

但实际开发中,仍存在以下痛点:

  • 代码跳转不连贯:对于 Android.bp soong 构建系统下的 Android 代码,不能自由地跳转到方法定义、实现、符号等。
  • 查找方法繁琐:大部分 Android framework 开发,是通过 VS Code 或 Android Studio 打开整个项目代码文件夹,然后用全局查找指令定位方法。这会导致通过 Copilot 分析代码时需要手动查找、复制,容易中断思路,且查找结果不一定精准。

实际开发中发现,通过 aidegen 在 VS Code 和 Android Studio 中配置模块化代码加载环境,支持自动跳转功能,结合 Copilot 的上下文分析和分段解释能力,可以实现持续、连贯且高效的代码分析流程,从而提升 Android 项目的代码分析与开发效率,有效解决上述痛点。


2. 应用场景

2.1 VS Code + Copilot Android 代码分析

对于 HAL 层可配置 VS Code + Copilot Android 代码分析环境。

下面以分析 Android 系统中的 android/bootable/recovery 模块代码来说明实施步骤。

2.1.1 配置 VS Code Android.bp 代码自动跳转环境

把原有的 C++ 相关的插件卸载掉,安装 clangd 插件。

02-01-clangd-plugin.png

2.1.2 使用 aidegen 生成 VS Code 模块化工程文件

aidegen(Android IDE Generator)是 Google 提供的一个用于 Android 开发的命令行工具,主要用于自动生成适用于 IDE(如 Android Studio、IntelliJ IDEA、VS Code 等)的工程文件。

它可以帮助开发者快速把 Android 源码中的某个模块(如 app、framework、JNI、native 代码等)导入到 IDE 里,方便代码阅读、调试和智能跳转。

在 android 代码路径下(例:/workspace/tegu/android)执行如下编译指令:

source lunch
source build/envsetup.sh
lunch (对应product)
cd bootable/recovery
aidegen -i v -s

执行上面指令后,VS Code 会被自动拉起来,并会在当前目录生成工程文件 bootable.recovery.code-workspace

02-02-aidegen.png

备注

aidegen -i v -s 不仅可以对单独模块生成工程文件,还可以对某个路径下的所有模块生成一个工程文件,在相关路径下执行即可。

2.1.3 VS Code 中配置工程文件

VS Code 被自动拉起来后工作空间如下,其会自动加载当前模块代码和 bootable.recovery.code-workspace 文件。

02-03-vscode-config1.png

在生成的 bootable.recovery.code-workspace 文件中添加如下蓝色框内的全局配置,红色框的内容需根据不同项目的 out 路径进行配置。

02-04-vscode-config2.png

{
    "folders": [
        {
            "name": "bootable.recovery",
            "path": "/home/workspace/tegu/android/bootable/recovery"
        }
    ],
    "settings": {
        "clangd.arguments": [
            "--compile-commands-dir=/home/workspace/tegu/android/out/soong/development/ide/compdb"
        ]
    }
}

2.1.4 重新加载更改后的配置

配置完成后关闭当前 VS Code,右键修改后的 bootable.recovery.code-workspace 文件,使用 VS Code 重新打开。

02-05-open-new-workspace.png

2.1.5 检查配置是否成功

第一次配置的时候,VS Code 右下角会提示安装 clangd 的相关依赖压缩包,按照提示点击允许并进行下载。

下载完成后再重复步骤 2.1.4 即可。

配置成功的情况下,相关方法有了提示,并可以自由跳转。

02-06-vscode-config-success.png

2.1.6 使用 Copilot 整体分析该模块代码

上下文添加当前工程文件,并询问。

02-07-analyse-code-with-copilot1.png

02-08-analyse-code-with-copilot2.png

上面相关的文件夹和文件会生成链接,都可以点击进行查看/询问/分析。

2.1.7 结合自由跳转功能,使用 Copilot 进行持续分析

光标定位到某一个方法上,CTRL + 鼠标左键 点击,即可跳转到具体实现方法中(包括非本模块的方法实现,如本模块所依赖的原生库方法实现也可以跳转查看实现)。

02-09-analyse-code-with-copilot3.png

2.1.8 配置光标前进和返回快捷键

可以对光标的前进和返回配置自己习惯的快捷键。

配置后的好处:比如当前光标在方法 A 上,然后跳转到另一个文件的方法 B 上,我们可以用光标返回快捷键再回到 A,或者再前进到 B。

02-10-hotkey-config.png

02-11-hotkey-config2.png

02-12-hotkey-config3.png

AI 工具会自动锁定当前查看的文件和代码行,因此可以直接帮助分析。

02-13-read-code-with-copolit.png

也可以针对当前光标某行进行询问。

02-14-read-code-with-copolit2.png


2.2 Android Studio + Copilot Android 代码分析

对于 JAVA 层可配置 Android Studio + Copilot Android 代码分析环境。

下面以分析 Android 项目代码中 android/packages/apps/Music 模块代码来说明实施步骤。

2.2.1 使用 aidegen 生成 Android Studio 模块化工程文件

aidegen(Android IDE Generator)是 Google 提供的一个用于 Android 开发的命令行工具,主要用于自动生成适用于 IDE(如 Android Studio、IntelliJ IDEA、VS Code 等)的工程文件。

它可以帮助开发者快速把 Android 源码中的某个模块(如 app、framework、JNI、native 代码等)导入到 IDE 里,方便代码阅读、调试和智能跳转。

在 android 代码路径下(例:/workspace/tegu/android)执行如下编译指令:

source lunch
source build/envsetup.sh
lunch (对应product)

查看 android/packages/apps/Music 编译配置中的模块名:

android/packages/apps/Music$ cat Android.bp
android_app {
    name: "Music", //模块名为 Music
    srcs: ["src/**/*.java"],
    resource_dirs: ["kotlin/res"],
    sdk_version: "current",
    product_specific: true,
    optimize: {
        proguard_flags_files: ["proguard.flags"],
    },
}

执行:

aidegen Music -i s -p <your_android_studio_path>/bin

其中 <your_android_studio_path> 替换为你本地 Android Studio 的实际安装路径。

例如:

aidegen Music -i s -p /soft/android-studio-2022.1.1.21-linux/android-studio/bin

执行上面指令后,Android Studio 会被自动拉起来,自动生成模块化配置环境。

02-15-open-workspace-with-as.png

并且会自动生成本模块的外部依赖,支持跳转到依赖模块,方便查看相关调用的具体代码实现。

02-16-open-workspace-with-as2.png

工程配置成功后,即可实现代码的自由跳转,并结合 Copilot 的上下文分析和分段解释能力,进行持续的代码分析,其分析流程与 VS Code 环境分析流程类似。

02-17-open-workspace-with-as3.png


3. 总结

通过使用 aidegen 工具配置 VS Code 和 Android Studio 的模块化代码环境,结合 Copilot 的上下文分析能力,可以实现:

  • 自由代码跳转:支持方法定义、实现、符号的快速跳转
  • 高效代码分析:Copilot 自动锁定当前文件和代码行,提供精准分析
  • 持续连贯分析:无需手动查找和复制代码,保持分析思路连贯
  • 多模块支持:可以分析单个模块或整个路径下的所有模块

这套方案有效解决了 Android 源码阅读中的代码跳转和查找问题,大幅提升了代码分析效率。


欢迎来我中的个人主页找到更多有用的知识和有趣的产品