aosp_cf_x86_64_phone-trunk_staging-userdebug 版本无法直接在真机(物理手机)上使用。8 j" x" D/ w% a) i$ x/ r
: J; @4 M g$ W" b该构建目标专为 Cuttlefish 虚拟设备 设计,其核心组件和内核配置是针对虚拟化环境(如 KVM/QEMU)优化的,缺乏真实手机硬件所需的特定驱动程序(如 GPU、基带、传感器、电源管理等)。如果强行刷入真机,会导致设备无法启动(变砖)或功能严重缺失。
% d) M9 j% e; q( W& S( `' U7 a! v2 O* f0 r3 y: F7 |
若要在真机上使用 AOSP,你需要选择对应真机型号的构建目标。以下是针对真机的编译和使用指南:; l' e6 b7 b8 k/ M0 C1 x7 ~
+ H% e5 Y; j- I9 h4 F- D, v# Z1. 选择正确的真机构建目标* y* y& V/ U/ [5 Y, R4 N
在 lunch 命令中,你需要将 aosp_cf_x86_64_phone 替换为具体真机的代号。
! X# \/ @' [! c6 U7 g8 O3 k- O: k% n, j! A& W
格式:aosp_<设备代号>-<版本配置>-<构建变体>
5 y- A9 d7 {! a( S* Z0 ~. M常见示例:) H1 P1 R* m( \3 D
Pixel 8 Pro: lunch aosp_husky-userdebug+ J1 b7 M% W" M' s! _
Pixel 7: lunch aosp_cheetah-userdebug
9 ^7 a/ l4 u1 K; o$ ~7 XPixel 6: lunch aosp_oriole-userdebug2 x) g3 c* c+ E- X5 N H) `
通用 ARM64 模拟器/开发板: lunch aosp_arm64-userdebug. a" [! N& J; K) U
注意:trunk_staging 是用于测试最新功能的分支配置,真机编译通常使用 ap2a、ap3a 等稳定发布分支,或者直接使用 aosp-main 分支下的默认配置。. n0 U5 e6 d: ^5 q, j- W' w
6 X0 z$ D1 _( C7 N
2. 真机编译步骤
! }. V3 L0 \% T; l: a第一步:准备环境与源码$ d# g/ r& v$ A1 l& A8 Q6 ]% P
确保你已经下载了完整的 AOSP 源码,并初始化了环境。( _3 X$ Z1 w0 @
$ _' ^0 q* W, w) Z1 V# e$ fbash
1 C8 W) S, L- u! A \6 S- U$ F4 x+ Lsource build/envsetup.sh# y5 y `; U$ e' W* O0 ]( }% @' ]
第二步:选择真机目标 y: |3 U L, o2 k+ `+ n
假设你要为 Pixel 6 (oriole) 编译:& f5 v P: ~: s% G- j8 u2 [
9 l/ J( L) I2 } ?
bash: o( q0 z0 }! o8 v! l5 ^
# 查看支持的设备列表
9 B8 Z( A2 j; F* ]" [lunch
0 Q {( V; L, Y: p8 ~+ C. O0 p ^$ _; c5 V+ S
# 选择对应的 userdebug 版本(例如选择 aosp_oriole-userdebug)8 v' V. C) x0 K3 W' Z2 o
lunch aosp_oriole-userdebug
6 h& \; k+ a; w, J2 Euserdebug: 推荐用于开发,拥有 root 权限和调试功能。
) w5 p" G3 D; G0 o) |, xuser: 生产环境版本,无 root 权限,性能更优,但难以调试。
T$ d! L6 }' M* K! ceng: 工程版本,包含大量调试工具,构建速度快,但性能较差,仅用于早期开发。& M; d z. z" U5 s" ?. v# G
第三步:下载厂商驱动(关键步骤)
0 B; @/ Y6 M W- d7 }! `: x2 X3 R% ]. @对于 Pixel 等 Google 设备,AOSP 源码不包含专有的二进制驱动(如 Wi-Fi、蓝牙、GPU 驱动)。你必须从 Google Drivers for Nexus and Pixel Devices 下载对应版本的驱动脚本。
# A: j, E; x) D' W
( R0 |) x. t- z$ Y& B, c4 ^下载与你的 AOSP 分支版本匹配的驱动包。$ a/ ]: N6 e9 A: ]* @& t- N" p
在 AOSP 根目录解压并运行脚本,同意许可协议。9 b' D. R* _. u' F6 Y
脚本会将专有二进制文件放入 vendor 目录。5 j- ^2 I, I* \
第四步:执行编译, J9 N* M! N/ u6 X
bash4 o3 J8 p0 b2 U, M2 l, M, d1 k5 l
# 使用 m 命令进行并行编译,-jN 表示使用 N 个线程,建议设置为 CPU 核心数% ]4 E2 u1 @& a$ o3 F6 L$ O9 p
m -j16
# ?& T6 v2 e% C0 N' y" s编译完成后,镜像文件将生成在 out/target/product/<设备代号>/ 目录下。% T2 s! @- n! [( K3 M
2 n: D! ~5 E% z/ w- Q h3. 刷入真机" W6 U* |$ s0 x
前置条件
# K: h$ F* M- [真机已解锁 Bootloader(fastboot flashing unlock)。) c' A+ V$ q5 W: T P8 n2 W% {4 h
电脑已安装 adb 和 fastboot 工具。/ h# {& j* }2 I) k4 Q) B0 i( y4 ]
真机通过 USB 连接电脑,并开启开发者模式中的 USB 调试。2 L: {6 h( p& J0 T5 J) [2 \! J
刷入方法& n6 p2 r! w% A/ }. B
方法一:使用 fastboot 手动刷入(推荐), v: {" u/ p4 z/ |, O1 \! G
0 } e" T! c( b; i& t& gbash5 w' H& K7 y# W0 I" ~
# 重启进入 fastboot 模式
8 D1 d# O( ^, S& C2 Kadb reboot bootloader6 n u8 X* O% d- E8 q
' G+ }$ E0 K% y+ B, g/ D) I# 刷入所有分区
5 D8 k; L A: Q" `8 J' }/ i2 y3 ofastboot flashall -w
% ?8 w6 U, D/ u8 `& Q-w 参数会清除用户数据(wipe data),首次刷入或跨版本升级时建议使用。; Y! D6 F: ~9 k2 {
方法二:使用 update.zip 卡刷
2 I7 m- Q% X9 m8 b$ p$ p9 u如果生成了 img.zip 或 update.zip,可以通过 Recovery 模式进行刷入,但这通常用于 OTA 更新测试。- N2 }& s3 o& o" x d' \' W
5 g) r% L0 v( I1 H. e总结对比
1 D( D, o! D" I V0 a- b. [1 g表格
" A4 m2 f/ R; Z特性 aosp_cf_x86_64_phone (Cuttlefish) aosp_<device> (真机)
* j( m# I; s% ?8 D4 Q/ m" I8 N/ J运行环境 Linux 主机上的虚拟机 (KVM) 物理 Android 手机
1 R2 _" N# i3 Z: C架构 x86_64 ARM64 (绝大多数手机)
9 l! t9 J: i5 x7 e; U* [驱动 使用虚拟驱动 (VirtIO) 需要硬件专属闭源驱动
& t6 H# V+ J1 h3 Y: `8 K" j$ y+ s用途 系统框架开发、CI/CD 测试 真实用户体验、硬件适配、性能测试
. W' T3 r" w- U+ e+ K# c刷入方式 launch_cvd 启动虚拟机 fastboot flashall 刷入物理机/ z, B# ]: t) _
建议:如果你需要在真机上测试,请确认你的真机型号,查找其对应的 AOSP 设备代号,并下载相应的厂商驱动后进行编译。不要尝试将 cf (Cuttlefish) 系列的镜像刷入任何物理设备。
; b6 a+ H# A _( q& {! V7 ?2 a- S
: v8 c, s: v; }& q5 t9 D3 e- y. h参考 |