pixel2真机调试aosp
##1. 前置工作
- 解锁手机,让手机允许刷机
adb reboot bootloader # 重开机后看到机器人
fastboot flashing unlock #进入解锁画面,音量键选择unlock the bootloader 加上电源键进行解锁
- 刷入官网rom
1.为了确定解锁后的手机能够刷机 2.刷特定版本的rom确保之后编译的系统映像是同一版本
官网rom位置
记住自己下载的rom的版本,不同手机能下载的rom版本不同,官网已经标出 - 下载后解压,命令行里运行(adb reboot bootloader),并在解压文件目录下运行fastboot-all.sh脚本开始刷机。完成刷机后系统重启。可以进入系统-关于手机里查看手机build number (eg:PQ3A.190405.003)
2.下载源码
1.获取repo工具,这里可能需要翻墙
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
2.下载aosp
aosp有很多branch 和tag。记得我们上面刷的rom版本 PQ3A.190405.003 找到对应tag的分支
分支列表
1.新建目录
2 在该目录下执行 repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-9.0.0_r35(这里是上面找到的分支)
3.repo sync -j4 #注意不要开太多线程,经常会出错
ps:可以使用如下shell脚本,同步出错可以继续同步
#/bin/sh
repo sync -j4
while [ $? -ne 0 ]
do
repo sync -j4
3.下载完成后编译aosp
- 编译前需要下载driver(没有driver只能编译emulator),注意根据上面选择的tag(PQ3A.190405.003)选择driver版本
driver地址
需要下载两个一个是Vendor Image,另一个是Driver。下载至我们下载的aosp目录。解压进入相应的目录执行里面的shell脚本进行解压。ps:解压过程中需要输入I ACCEPT - 编译aosp
source ./build/envsetup.sh
lunch #选择和手机对应的版本
make -j16
3.编译完成后刷机
#进入Bootloader Mode
adb reboot bootloader
# 进行刷机
fastboot flashall -w
ps:刷机过程可能出现的问题
- 命令找不到
解决:sdk platform tools
下载最新的platform-tools(放到path环境变量中或者将其中的工具替换系统中已有的)
比如:which fastboot 查到在/usr/bin/fastboot中,将下载fastboot直接移动到/usr/bin目录下 - 如果碰到error: Cannot generate image for userdata
编辑flash-all.sh,把-w去掉。
4.as导入aosp
1.源码根目录执行 make idegen
2.执行development/tools/idegen/idegen.sh
3.as 打开android.ipr文件
1.导入加速
- 加载前配置提速
打开android.iml文件,有大量excludeFolder,是指不会导入到AS的模块,默认除了以下14个文件夹之外的所有文件都会导致到AS工程, 这显然还会非常庞大的,那么我们可以有选择的导入 如下:
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/art" />
<excludeFolder url="file://$MODULE_DIR$/bionic" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/dalvik" />
<excludeFolder url="file://$MODULE_DIR$/device" />
<excludeFolder url="file://$MODULE_DIR$/external/bluetooth" />
<excludeFolder url="file://$MODULE_DIR$/external/chromium" />
<excludeFolder url="file://$MODULE_DIR$/external/emma" />
<excludeFolder url="file://$MODULE_DIR$/external/icu4c" />
<excludeFolder url="file://$MODULE_DIR$/external/jdiff" />
<excludeFolder url="file://$MODULE_DIR$/external/webkit" />
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs" />
<excludeFolder url="file://$MODULE_DIR$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/out/eclipse" />
<excludeFolder url="file://$MODULE_DIR$/out/host" />
<excludeFolder url="file://$MODULE_DIR$/out/target/common/docs" />
<excludeFolder url="file://$MODULE_DIR$/out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates" />
<excludeFolder url="file://$MODULE_DIR$/out/target/product" />
<excludeFolder url="file://$MODULE_DIR$/prebuilt" />
<excludeFolder url="file://$MODULE_DIR$/test" />
- 加载后提速
Project Structure -> Modules,在相应的包右键excluded可快速去除某些模块, 其中红色代码Exclueded选项(即代表已删除的目录)。
2.配置正确的源码跳转
- 这里的配置JDK/SDK,是用于解决在分析和调试源码的过程,能正确地跳转到目标源码,而非SDK中的代码。 点击File菜单下的Project Structure
- Project Structure -> SDKs, 新建 JDK(None), 其中JDK目录可选择跟原本JDK一致即可, 然后删除其classpath和SourcePath的内容,确保使用Android系统源码文件
- Project Structure -> SDKs, 选中Android API level Platform, 然后选择其Java SDK为前面新建的JDK(None)
- Project Structure -> Project -> 选中Project SDK, 选择前面的Android API 25 Platform
- Project Structure -> Modules -> android -> Dependencies: 先删除Android API 25 Platform之外的所有依赖, 然后点击下图绿色的+号来选择Jars or directories,将frameworks添加进来, 也可添加其他所关注的源码;添加后将framework的依赖放到最前面

3.调试aosp
1.as点击attach 进程 选择显示所有进程

2. frameworks各大核心服务运行在system_server进程, 在调试器上名字为system_process,通过attach到system_process我们可以调试AMS等的代码
4. 其他
repo查看其他分支
#源码目录下执行
cd .repo/manifests
git branch -a | cut -d / -f 3
本文详细介绍了在Pixel2设备上进行AOSP源码调试的步骤,包括解锁手机、下载与编译源码、使用Android Studio导入并加速源码加载、配置源码跳转,以及如何调试system_server进程。
411

被折叠的 条评论
为什么被折叠?



