1、AIDEGen
AIDEGen 是 google 推出的一个工具,用于方便开发者使用 IDE 来查看和修改系统源码。
AIDEGen + Android Studio 非常适合用于阅读与修改 Android 系统 Java 代码。
使用 AIDEGen 之前我们需要做一些准备工作:
编译 sdk:
bash
cd aosp
source build/envsetup.sh
lunch sdk-eng
# 或者 #lunch sdk-userdebug # or #lunch sdk-user make sdk
make sdk
ps:如果自己的磁盘够,建议用上面的 make sdk,这样不容易出问题;但是磁盘有限的话,可以使用下面的方式:
↓↓↓↓↓↓省硬盘空间方式 start↓↓↓↓↓↓
bash
#安装 Python 3.9 (系统不改变默认 Python)
Ubuntu 22.04 默认没有 3.9,需要用 deadsnakes PPA:
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install python3.9 python3.9-venv python3.9-distutils -y
# `python3.9-venv` 是创建虚拟环境必需的
# `python3.9-distutils` 是 pip 安装依赖
# 创建 Python 3.9 虚拟环境
python3.9 -m venv ~/aidegen-venv
# 激活环境:
source ~/aidegen-venv/bin/activate
# 此时虚拟环境里的 python 就是 3.9:
python --version
# 输出 Python 3.9.x
# 安装兼容 protobuf
pip install --upgrade pip
pip install protobuf==3.19.4
# protobuf 3.19.4 在 Python 3.9 下与 aidegen / Soong 兼容,不会报 `MutableMapping` 错误。
# 运行 aidegen,确保虚拟环境激活,然后运行:
cd aosp
source ~/aosp/build/envsetup.sh
lunch aosp_x86_64-eng
aidegen packages/apps/Launcher3 -p ~/android-studio/bin/studio.sh
# 使用完毕退出虚拟环境
deactivate
这样,就把python3.9的虚拟环境创建好,并且调试通了
后续只需要使用下方的命令即可:
bash
# **测试**
source ~/aidegen-venv/bin/activate
source ~/aosp/build/envsetup.sh
lunch aosp_x86_64-eng
aidegen packages/apps/Launcher3 -p studio.sh
↑↑↑↑↑↑省硬盘空间方式 end↑↑↑↑↑↑
2、VScode
我们可以使用 vscode 中的 file -> open folder 选择我们的系统源码目录,即可打开整个系统源码。 另外为了使我们的 vscode 更好用更好看,通常我们会安装一下一些插件:
- C/C++ Extension Pack
- Extension Pack for Java
- Makefile Tools
- RC Script language
- Android System Tools
- Android Studio Color Theme
3、find + grep 命令使用
Android 系统源码繁杂,通常我们通过 find 命令来查找我们关心的文件。使用 find + grep 命令查找我们关心的文件内容。
- 找文件,比如 service_manager.c
arduino
find . -name "service_manager.c"
./frameworks/native/cmds/servicemanager/service_manager.c

- 找文件内容,找 recyclerview 库
bash
find . -name "Android.bp" | xargs grep "name: \".*recyclerview.*\""
输出:
./prebuilts/sdk/current/androidx/Android.bp: name: "androidx.recyclerview_recyclerview-selection-nodeps",
./prebuilts/sdk/current/androidx/Android.bp: name: "androidx.recyclerview_recyclerview-selection",
./prebuilts/sdk/current/androidx/Android.bp: name: "androidx.recyclerview_recyclerview-nodeps",
./prebuilts/sdk/current/androidx/Android.bp: name:"androidx.recyclerview_recyclerview", ./prebuilts/sdk/current/support/Android.bp: name: "android-support-recyclerview-selection-nodeps",
./prebuilts/sdk/current/support/Android.bp: name: "android-support-recyclerview-selection",
./prebuilts/sdk/current/support/Android.bp: name: "android-support-v7-recyclerview-nodeps",
./prebuilts/sdk/current/support/Android.bp: name: "android-support-v7-recyclerview",

4、通过第一步中的编译 sdk后,再来配置 Android Studio
① 首先,选择我们的目标 Product:
bash
# 进入aosp目录后,再执行
source build/envsetup.sh
lunch aosp_x86_64-eng
② 打开系统模块,我们以 Settings 为例:
bash
# Settings 可以更换为其他模块名 or 模块存在的路径,即可打开其他模块
# -i 表示使用ide,s 表示 Android Studio
aidegen Settings -i s
如果出现了如下问题:

arduino
AttributeError: module 'collections' has no attribute 'MutableMapping'
原因是 Python 3.10 及以上版本中常见的问题。原因是:在 Python 3.10+ 中,collections.MutableMapping 被移到了 collections.abc.MutableMapping,旧写法会报错。而我们用到的 aidegen 或者 protobuf 版本还在用旧的写法。
解决方法
创建 Python 3.9 虚拟环境(推荐)
这样不会影响系统 Python,环境干净:
bash
cd ~/aosp
python3.9 -m venv venv39
source venv39/bin/activate
pip install --upgrade pip
pip install protobuf
再把 Android Studio 放到 /opt 目录下 。 我这里用的是android studio 2021 redirector.gvt1.com/edgedl/andr...
接着在虚拟环境里直接运行:
css
aidegen Settings -i s
进入
等待片刻:

点击 configure

点击ok。
然后,点 File 菜单下的 project structure,配置 jdk 和 sdk

点击 SDKS:

添加 jdk,配置上 aosp 内的jdk9
bash
prebuilts/jdk/jdk9/linux-x86

然后再添加 sdk,配置上我们上面 make 好的 sdk(API 29)
bash
out/host/linux-x86/sdk/sdk/android-sdk_eng.用户名_linux-x86

然后为了区分这个是咱们专门编译 aosp 的 sdk,给他改个名字

点击ok,保存之后,再次进入 project structure, 给 priject 配置 sdk

选择咱们的专用 sdk

点击 apply;
然后接着设置 modules 的 sdk,如下图所示,dependencies-Settings的Module SDK保持就好:

然后点击 modules ,再点击 Settings(咱们要调试的系统 app),选择 dependencies,配置上我们的专属 sdk:

点击apply,到此,android studio的环境就配置好了。
未完待续。。。
退出虚拟环境:
deactivate
后续操作步骤:
bash
source build/envsetup.sh
lunch aosp_x86_64-eng
source venv39/bin/activate
#比如说加载 settings
aidegen Settings -i s
#打开studio后做自己的调试工作
#最后退出虚拟环境
deactivate
5、开启emulator,并调试
① 同样,在这样的环境中去打开 emulator
bash
source build/envsetup.sh
lunch aosp_x86_64-eng
source venv39/bin/activate
emlator
② 打开 Settings 应用的主 Activity
通过清单文件判断主 Activity 大致是这个,打上断点
③打开调试窗口
选择 Settings 应用,然后点击调试按钮
然后直接敲上 setting 就定位到了。
点击ok,此时就打开了 Settings 应用的调试。
④ 打开emulator,上滑,找到 Settings 应用,打开
此时,Settings 应用会停在空白页面,再打开我们的 android studio,查看断点
这样,我们就可以针对某个具体的页面,或者功能调试了!!!