欢迎关注微信公众号 [无限无羡]

为了方便调试AOSP源码 ,花1000多大洋在pdd上买了一个99新的pixel5手机,从此总算能够在真机上调试代码了。

代码下载

AOSP代码的下载在本专栏中现已有文章介绍过了,这儿就不再赘述,没看过的能够去翻看之前介绍的文章。
这儿想要阐明的是如下下载对应手机型号的代码,比方pixel5对应的代码如何下载。
翻开如下链接AOSP源代码符号和 build能够看到如下内容:

使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、调试)详细攻略

在这儿刺进图片描绘

支撑的设备一栏表明该分支的代码支撑的手机型号,符号一栏指的是咱们下载代码时指定的TAG,build ID一栏是用来下载Google的闭源资源的id。由于咱们想要编译一个完整镜像的话,除了开源的aosp之外,还有一部分比方驱动、vendor.img等是不开源的,就需求经过这个build ID来下载对应的资源,放到aosp源码目录下进行解压编译,最终会生成完整的镜像。

由于咱们是pixel5设备,能够看到android-13.0.0_r40是支撑的,咱们先经过如下指令下载对应aosp

mkdirandroid-13.0.0_r40
repoinit-uhttps://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest-bandroid-13.0.0_r40
reposync

然后到如下页面进行驱动二进制的下载Nexus 和 Pixel 设备的驱动程序二进制文件
android-13.0.0_r40对应的驱动文件的build ID是 TQ2A.230405.003.B2,所以咱们查找buildID 为TQ2A.230405.003.B2的pixel5即可。

使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、调试)详细攻略

在这儿刺进图片描绘

如上图能够看到,咱们需求下载两个文件,一个是Google的,一个是高通的关于硬件相关的镜像。由于pixel5用的是高通芯片,所以需求高通的部分镜像。点击两个蓝色Link进行文件下载。下载完毕后进行解压发现是两个shell脚本。咱们将其放到aosp根目录下,如下:

使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、调试)详细攻略

在这儿刺进图片描绘

图中符号出来的便是解压后的shell脚本,别离履行,开端会有一些协议条款的打印,咱们翻到最终,需求输入I ACCEPT,然后就开端解压了。解压完结后就能够进行代码编译了。

代码编译

这部分主要介绍编译时的lunch选项怎么选,其实也很简单,翻开如下页面挑选设备 build

使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、调试)详细攻略

在这儿刺进图片描绘

这儿列出了每个机型的编译配置,比方咱们编译pixel5的代码,用如下指令:

sourcebuild/envsetup.sh
lunchaosp_redfin-userdebug
m-j8

刷机

刷机需求用到fastboot和adb东西,我有一个偷懒的方法便是假如装置了Android Studio的话,直接将Sdk里的东西复制到体系的bin目录下即可。

使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、调试)详细攻略

在这儿刺进图片描绘

刷机前需求先翻开usb调试,然后履行如下指令开端刷机。
留意要在aosp根目录,假如没有进行过lunch要先履行

sourcebuild/envsetup.sh
lunchaosp_redfin-userdebug

然后开端刷机

adbrebootbootloader
fastbootflashingunlock
这个时候手机上会有选项,依据阐明按下音量键切换到答应unlock,再按电源键承认即可。

最终履行

fastbootflashall-w
-w会清除data分区,假如不想的话也能够不加-w选项

然后等待刷机完结手机自动重启开机即可,下面是我刷成功的输出:

zzh@ubuntu:~/work/android/aosp/android-13.0.0_r40$fastbootflashall
--------------------------------------------
Checking'product'OKAY[0.069s]
Settingcurrentslotto'b'OKAY[0.087s]
Sending'boot_b'(98304KB)OKAY[2.720s]
Writing'boot_b'OKAY[0.308s]
Sending'dtbo_b'(16384KB)OKAY[0.540s]
Writing'dtbo_b'OKAY[0.112s]
Sending'vbmeta_b'(8KB)OKAY[0.140s]
Writing'vbmeta_b'OKAY[0.079s]
Sending'vbmeta_system_b'(4KB)OKAY[0.140s]
Writing'vbmeta_system_b'OKAY[0.079s]
Sending'vendor_boot_b'(98304KB)OKAY[2.680s]
Writing'vendor_boot_b'OKAY[0.308s]
RebootingintofastbootOKAY[0.070s]
<waitingforanydevice>
Sending'super'(4KB)OKAY[0.001s]
UpdatingsuperpartitionOKAY[0.031s]
Resizing'product_b'OKAY[0.006s]
Resizing'system_b'OKAY[0.006s]
Resizing'system_ext_b'OKAY[0.006s]
Resizing'system_a'OKAY[0.006s]
Resizing'vendor_b'OKAY[0.006s]
Resizing'vendor_a'OKAY[0.006s]
Invalidsparsefileformatatheadermagic
Resizing'product_b'OKAY[0.006s]
Sendingsparse'product_b'1/2(262140KB)OKAY[6.954s]
Writing'product_b'OKAY[0.710s]
Sendingsparse'product_b'2/2(20168KB)OKAY[0.547s]
Writing'product_b'OKAY[0.090s]
Invalidsparsefileformatatheadermagic
Resizing'system_b'OKAY[0.006s]
Sendingsparse'system_b'1/4(262112KB)OKAY[6.951s]
Writing'system_b'OKAY[0.697s]
Sendingsparse'system_b'2/4(262116KB)OKAY[6.912s]
Writing'system_b'OKAY[0.701s]
Sendingsparse'system_b'3/4(262140KB)OKAY[6.935s]
Writing'system_b'OKAY[0.679s]
Sendingsparse'system_b'4/4(64236KB)OKAY[1.697s]
Writing'system_b'OKAY[0.206s]
Resizing'system_ext_b'OKAY[0.006s]
Sending'system_ext_b'(191812KB)OKAY[4.977s]
Writing'system_ext_b'OKAY[0.526s]
Resizing'system_a'OKAY[0.005s]
Sending'system_a'(26672KB)OKAY[0.699s]
Writing'system_a'OKAY[0.091s]
Invalidsparsefileformatatheadermagic
Resizing'vendor_b'OKAY[0.010s]
Sendingsparse'vendor_b'1/3(262092KB)OKAY[6.941s]
Writing'vendor_b'OKAY[0.731s]
Sendingsparse'vendor_b'2/3(262116KB)OKAY[6.881s]
Writing'vendor_b'OKAY[0.692s]
Sendingsparse'vendor_b'3/3(239980KB)OKAY[6.379s]
Writing'vendor_b'OKAY[0.627s]
RebootingOKAY[0.000s]
Finished.Totaltime:88.360s

调试

由于咱们编译的是userdebug版别,所以后面咱们调试时是能够进行push的。需求先履行

adbroot
adbremount
adbreboot

咱们在Launcher启动时加一行日志来进行验证一下:

使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、调试)详细攻略

在这儿刺进图片描绘

sourcebuild/envsetup.sh
lunchaosp_redfin-userdebug
makeLauncher3

使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、调试)详细攻略

在这儿刺进图片描绘

将编译好的Launcher3 push到设备并重启

adbroot
adbremount
//在测验时发现现已被装置的apk重启后不会再扫描,需求删去data下的文件才能够,所以我直接installapk验证了。
//当然其他文件,比方so库,jar包,xml文件等还是能够push验证的。
//adbpushout/target/product/redfin/system_ext/priv-app/Launcher3//system_ext/priv-app/
adbinstall-rout/target/product/redfin/system_ext/priv-app/Launcher3/Launcher3.apk
//此刻Launcher会重启,能够看到咱们增加的日志打印出来了。
07-2622:08:53.44158555855Dzzh:Launcher3Start...

不足

买回来的设备,或者我从网上下载的对应设备的镜像,是有gms服务和运用的,但是自己编译aosp的话是没有的,要的话需求自己内置gms服务和运用。
另一个是体系运用与原生体系也是不一样的,aosp编译出来的运用都比较粗陋,原生体系带的比较漂亮。不过既然是调试代码运用,这个就无所谓了,自己有空了定制一下也是能够的。