工程实战

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

手把手教你配置 VS Code 和 Android Studio 的 Android 源码阅读环境,结合 Copilot 实现高效的代码分析和跳转,解决 Android.bp soong 构建系统下的代码跳转问题

·约 8 分钟阅读·教程

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 插件。

安装 clangd 插件

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

aidegen 生成工程文件

备注

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

2.1.3 VS Code 中配置工程文件

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

VS Code 工作空间

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

VS Code 工程配置
{
    "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 重新打开。

使用 VS Code 打开工作空间

2.1.5 检查配置是否成功

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

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

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

配置成功提示

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

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

使用 Copilot 分析代码
Copilot 分析结果

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

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

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

代码跳转功能

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

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

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

快捷键配置 1
快捷键配置 2
快捷键配置 3

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

Copilot 自动锁定当前文件

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

针对某行代码询问

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 会被自动拉起来,自动生成模块化配置环境。

Android Studio 自动打开

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

Android Studio 外部依赖

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

Android Studio 代码分析

3. 总结

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

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

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


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