0. 需求
至少32G内存,ubuntu 22.04,200G磁盘空间
1.下载AOSP源码
1 | curl -OC - https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包,建议windows下用IDM多线程下载好之后拷过去。 |
2.修改soong文件并编译
代码同步完之后应该会捡出来,编辑Android.bp文件
1 | cd packages/modules/adb |
编辑如下:
1 | index 3013079..0a8c982 100644 |
主要是加上这几个参数 cflags: ["-g","-gcodeview",""-O0""], ldflags: ["-municode","-Wl,--pdb="],取消优化,产生pdb文件。
参数详见:
https://github.com/mstorsjo/llvm-mingw/blob/master/README.md#pdb-support
之后编译即可出现下列报错,没关系,因为symbol被弄到pdb里去了,报错正常。
FAILED: out/soong/.intermediates/packages/modules/adb/adb/windows_x86/adb.exe
out/host/linux-x86/bin/symbol_inject -i out/soong/.intermediates/packages/modules/adb/adb/windows_x86/unversioned/adb.exe -o out/soong/.intermediates/packages/modules/adb/adb/windows_x86/adb.exe -s soong_build_number -from ‘SOONG BUILD NUMBER PLACEHOLDER’ -v $(cat out/soong/build_number.txt)
symbol not found
如果还需要调试adb里面涉及到的一些静态库里的代码,如以下这些库:
则需要去库所在文件夹的android.bp里面添加这几行,确保编译的时候带调试信息,如libbase库的代码在system/libbase目录下(可以用cvdump查询,也可以在aosp/out/soong/build.ninja里面搜索。):
1 | cflags: [ |
我们可以在aosp/out/soong/.intermediates/packages/modules/adb/adb/windows_x86/unversioned找到adb.exe和adb.pdb,之后就可以在windbg里面源码调试了。
说些什么吧!