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

文章目录

  • 代码下载
  • 代码编译
  • 刷机
  • 调试
  • 不足

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

代码下载

AOSP代码的下载在本专栏中已经有文章介绍过了,这里就不再赘述,没看过的可以去翻看之前介绍的文章。
这里想要说明的是如下下载对应手机型号的代码,比如pixel5对应的代码如何下载。
打开如下链接AOSP源代码标记和 build可以看到如下内容:
使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、调试)详细攻略_第1张图片

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

由于我们是pixel5设备,可以看到android-13.0.0_r40是支持的,我们先通过如下命令下载对应aosp

mkdir android-13.0.0_r40
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r40
repo sync

然后到如下页面进行驱动二进制的下载Nexus 和 Pixel 设备的驱动程序二进制文件
android-13.0.0_r40对应的驱动文件的build ID是 TQ2A.230405.003.B2,所以我们搜索buildID 为TQ2A.230405.003.B2的pixel5即可。
使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、调试)详细攻略_第2张图片

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

使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、调试)详细攻略_第3张图片
图中标记出来的就是解压后的shell脚本,分别执行,开始会有一些协议条款的打印,我们翻到最后,需要输入I ACCEPT,然后就开始解压了。解压完成后就可以进行代码编译了。

代码编译

这部分主要介绍编译时的lunch选项怎么选,其实也很简单,打开如下页面选择设备 build
使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、调试)详细攻略_第4张图片
这里列出了每个机型的编译配置,比如我们编译pixel5的代码,用如下命令:

source build/envsetup.sh
lunch aosp_redfin-userdebug
m -j8

刷机

刷机需要用到fastboot和adb工具,我有一个偷懒的方法就是如果安装了Android Studio的话,直接将Sdk里的工具复制到系统的bin目录下即可。
使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、调试)详细攻略_第5张图片
刷机前需要先打开usb调试,然后执行如下命令开始刷机。
注意要在aosp根目录,如果没有进行过lunch要先执行

source build/envsetup.sh
lunch aosp_redfin-userdebug

然后开始刷机

adb reboot bootloader
fastboot flashing unlock
这个时候手机上会有选项,根据说明按下音量键切换到允许unlock,再按电源键确认即可。

最后执行

fastboot flashall -w
-w会清除data分区,如果不想的话也可以不加-w选项

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

zzh@ubuntu:~/work/android/aosp/android-13.0.0_r40$ fastboot flashall
--------------------------------------------
Checking 'product'                                 OKAY [  0.069s]
Setting current slot to 'b'                        OKAY [  0.087s]
Sending 'boot_b' (98304 KB)                        OKAY [  2.720s]
Writing 'boot_b'                                   OKAY [  0.308s]
Sending 'dtbo_b' (16384 KB)                        OKAY [  0.540s]
Writing 'dtbo_b'                                   OKAY [  0.112s]
Sending 'vbmeta_b' (8 KB)                          OKAY [  0.140s]
Writing 'vbmeta_b'                                 OKAY [  0.079s]
Sending 'vbmeta_system_b' (4 KB)                   OKAY [  0.140s]
Writing 'vbmeta_system_b'                          OKAY [  0.079s]
Sending 'vendor_boot_b' (98304 KB)                 OKAY [  2.680s]
Writing 'vendor_boot_b'                            OKAY [  0.308s]
Rebooting into fastboot                            OKAY [  0.070s]
< waiting for any device >
Sending 'super' (4 KB)                             OKAY [  0.001s]
Updating super partition                           OKAY [  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]
Invalid sparse file format at header magic
Resizing 'product_b'                               OKAY [  0.006s]
Sending sparse 'product_b' 1/2 (262140 KB)         OKAY [  6.954s]
Writing 'product_b'                                OKAY [  0.710s]
Sending sparse 'product_b' 2/2 (20168 KB)          OKAY [  0.547s]
Writing 'product_b'                                OKAY [  0.090s]
Invalid sparse file format at header magic
Resizing 'system_b'                                OKAY [  0.006s]
Sending sparse 'system_b' 1/4 (262112 KB)          OKAY [  6.951s]
Writing 'system_b'                                 OKAY [  0.697s]
Sending sparse 'system_b' 2/4 (262116 KB)          OKAY [  6.912s]
Writing 'system_b'                                 OKAY [  0.701s]
Sending sparse 'system_b' 3/4 (262140 KB)          OKAY [  6.935s]
Writing 'system_b'                                 OKAY [  0.679s]
Sending sparse 'system_b' 4/4 (64236 KB)           OKAY [  1.697s]
Writing 'system_b'                                 OKAY [  0.206s]
Resizing 'system_ext_b'                            OKAY [  0.006s]
Sending 'system_ext_b' (191812 KB)                 OKAY [  4.977s]
Writing 'system_ext_b'                             OKAY [  0.526s]
Resizing 'system_a'                                OKAY [  0.005s]
Sending 'system_a' (26672 KB)                      OKAY [  0.699s]
Writing 'system_a'                                 OKAY [  0.091s]
Invalid sparse file format at header magic
Resizing 'vendor_b'                                OKAY [  0.010s]
Sending sparse 'vendor_b' 1/3 (262092 KB)          OKAY [  6.941s]
Writing 'vendor_b'                                 OKAY [  0.731s]
Sending sparse 'vendor_b' 2/3 (262116 KB)          OKAY [  6.881s]
Writing 'vendor_b'                                 OKAY [  0.692s]
Sending sparse 'vendor_b' 3/3 (239980 KB)          OKAY [  6.379s]
Writing 'vendor_b'                                 OKAY [  0.627s]
Rebooting                                          OKAY [  0.000s]
Finished. Total time: 88.360s

调试

由于我们编译的是userdebug版本,所以后面我们调试时是可以进行push的。需要先执行

adb root
adb remount
adb reboot

我们在Launcher启动时加一行日志来进行验证一下:
使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、调试)详细攻略_第6张图片

source build/envsetup.sh
lunch aosp_redfin-userdebug
make Launcher3 

在这里插入图片描述
将编译好的Launcher3 push到设备并重启

adb root
adb remount
// 在测试时发现已经被安装的apk重启后不会再扫描,需要删除data下的文件才可以,所以我直接install apk验证了。
// 当然其他文件,比如so库,jar包,xml文件等还是可以push验证的。
// adb push out/target/product/redfin/system_ext/priv-app/Launcher3/ /system_ext/priv-app/
adb install -r  out/target/product/redfin/system_ext/priv-app/Launcher3/Launcher3.apk
// 此时Launcher会重启,可以看到我们添加的日志打印出来了。
07-26 22:08:53.441  5855  5855 D zzh     : Launcher3 Start...

不足

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

你可能感兴趣的:(Android系统开发,智能手机,android)