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

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

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

代码下载

AOSP代码的下载在本专栏中已经有文章介绍过了,这里就不再赘述,没看过的可以去翻看之前介绍的文章。

这里想要说明的是如下下载对应手机型号的代码,比如pixel5对应的代码如何下载。

打开如下链接AOSP源代码标记和 build可以看到如下内容:

在这里插入图片描述

在这里插入图片描述

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

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

bash 复制代码
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用的是高通芯片,所以需要高通的部分镜像。点击两个蓝色Link进行文件下载。下载完毕后进行解压发现是两个shell脚本。我们将其放到aosp根目录下,如下:

在这里插入图片描述

在这里插入图片描述

图中标记出来的就是解压后的shell脚本,分别执行,开始会有一些协议条款的打印,我们翻到最后,需要输入I ACCEPT,然后就开始解压了。解压完成后就可以进行代码编译了。

代码编译

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

在这里插入图片描述

在这里插入图片描述

这里列出了每个机型的编译配置,比如我们编译pixel5的代码,用如下命令:

bash 复制代码
source build/envsetup.sh
lunch aosp_redfin-userdebug
m -j8

刷机

刷机需要用到fastboot和adb工具,我有一个偷懒的方法就是如果安装了Android Studio的话,直接将Sdk里的工具复制到系统的bin目录下即可。

在这里插入图片描述

在这里插入图片描述

刷机前需要先打开usb调试,然后执行如下命令开始刷机。

注意要在aosp根目录,如果没有进行过lunch要先执行

bash 复制代码
source build/envsetup.sh
lunch aosp_redfin-userdebug

然后开始刷机

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

最后执行

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

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

ruby 复制代码
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启动时加一行日志来进行验证一下:

在这里插入图片描述

在这里插入图片描述

bash 复制代码
source build/envsetup.sh
lunch aosp_redfin-userdebug
make Launcher3 
在这里插入图片描述

在这里插入图片描述

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

ruby 复制代码
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编译出来的应用都比较简陋,原生系统带的比较美观。不过既然是调试代码使用,这个就无所谓了,自己有空了定制一下也是可以的。

相关推荐
七月.末1 小时前
安卓aab包的安装教程,附带adb环境的配置
android·adb
SRC_BLUE_176 小时前
SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based
android·网络安全·adb·less
无尽的大道9 小时前
Android打包流程图
android
镭封11 小时前
android studio 配置过程
android·ide·android studio
夜雨星辰48711 小时前
Android Studio 学习——整体框架和概念
android·学习·android studio
邹阿涛涛涛涛涛涛11 小时前
月之暗面招 Android 开发,大家快来投简历呀
android·人工智能·aigc
IAM四十二11 小时前
Jetpack Compose State 你用对了吗?
android·android jetpack·composer
奶茶喵喵叫12 小时前
Android开发中的隐藏控件技巧
android
Winston Wood13 小时前
Android中Activity启动的模式
android
众乐认证14 小时前
Android Auto 不再用于旧手机
android·google·智能手机·android auto