aosp_cf_x86_64_phone-trunk_staging-userdebug 版本无法直接在真机(物理手机)上使用。
3 m* `' E5 h6 E0 y: r' G
1 D( j! h$ q1 {& e该构建目标专为 Cuttlefish 虚拟设备 设计,其核心组件和内核配置是针对虚拟化环境(如 KVM/QEMU)优化的,缺乏真实手机硬件所需的特定驱动程序(如 GPU、基带、传感器、电源管理等)。如果强行刷入真机,会导致设备无法启动(变砖)或功能严重缺失。
' ~1 l9 h: F' m$ z7 w4 o1 u
: J3 V2 z7 \0 }/ P8 u8 D若要在真机上使用 AOSP,你需要选择对应真机型号的构建目标。以下是针对真机的编译和使用指南:
) j% e. A7 j9 L1 n) J2 O& x! s2 ~$ m0 r/ g3 H p3 f
1. 选择正确的真机构建目标 B8 ?! i4 U' w" N: E
在 lunch 命令中,你需要将 aosp_cf_x86_64_phone 替换为具体真机的代号。
2 B, W a% e/ I
7 u h. ^1 |+ a# A格式:aosp_<设备代号>-<版本配置>-<构建变体>. C/ ~* y2 Z7 `" u0 o4 m, K
常见示例:
3 z M V8 H/ dPixel 8 Pro: lunch aosp_husky-userdebug) @, \8 f1 P5 Z ^( k. u* P
Pixel 7: lunch aosp_cheetah-userdebug2 Z- x' ^. D$ }* a& n5 I5 D
Pixel 6: lunch aosp_oriole-userdebug
- c& }" z }: V4 K7 [- V( e通用 ARM64 模拟器/开发板: lunch aosp_arm64-userdebug
; Y: M. u2 s0 G9 p5 |2 K' Y0 W注意:trunk_staging 是用于测试最新功能的分支配置,真机编译通常使用 ap2a、ap3a 等稳定发布分支,或者直接使用 aosp-main 分支下的默认配置。
, C }& V. x6 ]# V" I2 P& G: C0 p8 [: m5 y
2. 真机编译步骤
" e0 k0 T O- r- Z* W. k( n9 f* j第一步:准备环境与源码. [ D0 ?& V$ k% Q* Y
确保你已经下载了完整的 AOSP 源码,并初始化了环境。
9 l& J2 \. S) b" p- v8 K4 a! l* e9 g
bash
, V$ M# }* P4 d/ s1 Y; D& Fsource build/envsetup.sh
8 ~+ ^4 ?& e4 G: Y* R- i第二步:选择真机目标# `& [, M8 K% B9 T# n
假设你要为 Pixel 6 (oriole) 编译:
+ Q4 V" f6 y4 J- r2 T
$ Y, `! R2 Y/ p8 ^7 @bash# `2 n* A0 O( }& P1 a. c
# 查看支持的设备列表) D% c/ D4 v+ [7 S
lunch5 [ f r# C! a# W. F6 I: _
: w1 }0 y6 x' R- w* F# 选择对应的 userdebug 版本(例如选择 aosp_oriole-userdebug)
5 f+ C' y* j5 J. Rlunch aosp_oriole-userdebug
. j8 W4 o b5 {0 F [( puserdebug: 推荐用于开发,拥有 root 权限和调试功能。
3 ?3 k" u+ a2 C. luser: 生产环境版本,无 root 权限,性能更优,但难以调试。
" L, b+ ]2 `9 Y; o4 u p$ Z" t/ }eng: 工程版本,包含大量调试工具,构建速度快,但性能较差,仅用于早期开发。
! @: o% i0 S; r X) B, [" W7 X第三步:下载厂商驱动(关键步骤)# m7 c% ?4 \' Q$ U
对于 Pixel 等 Google 设备,AOSP 源码不包含专有的二进制驱动(如 Wi-Fi、蓝牙、GPU 驱动)。你必须从 Google Drivers for Nexus and Pixel Devices 下载对应版本的驱动脚本。
! i) T) x7 o) M# _: q3 V! e8 g* m* z6 J# C2 i# A" t( {2 Q! x/ g
下载与你的 AOSP 分支版本匹配的驱动包。
# F% M& t& B% Z8 D$ a0 r+ M0 R; l在 AOSP 根目录解压并运行脚本,同意许可协议。4 ]; l: c) L# D' q; [
脚本会将专有二进制文件放入 vendor 目录。
) W$ q# U6 K( A$ j; _( j第四步:执行编译
! i! B. B8 \( i; W7 G( A" {bash
% P3 E6 N: I! [) ^7 V: D# 使用 m 命令进行并行编译,-jN 表示使用 N 个线程,建议设置为 CPU 核心数' R% y& x! q, @8 Z
m -j16
8 Q6 K% D' a: r/ |% u编译完成后,镜像文件将生成在 out/target/product/<设备代号>/ 目录下。
# U2 R' ]- z( Q) m1 j
$ M4 x+ I5 A$ Q: L3 o3. 刷入真机
1 e1 l' R6 R1 r1 U$ g/ q前置条件2 k9 u+ T7 S5 J
真机已解锁 Bootloader(fastboot flashing unlock)。
; I ^4 ^. {/ t电脑已安装 adb 和 fastboot 工具。7 G1 W) c7 X) Q& O3 {
真机通过 USB 连接电脑,并开启开发者模式中的 USB 调试。3 e1 x# e; n- }4 T) \$ e( `7 q! o
刷入方法; F( ?7 Q7 }* R$ R( E$ s
方法一:使用 fastboot 手动刷入(推荐); q; N% d; |* I+ c, i
; J( G% y6 c/ h: J
bash
# R. s9 ]$ O5 X* G7 v/ L# 重启进入 fastboot 模式* }" g+ Z* Z6 v/ Y5 g1 B0 Z
adb reboot bootloader% A* o8 N( C m
" \9 o( Q2 e4 i U# 刷入所有分区+ W# a3 N3 B/ G% D1 n
fastboot flashall -w
; ?! d6 i' G: P9 Z) V+ T-w 参数会清除用户数据(wipe data),首次刷入或跨版本升级时建议使用。
& N2 K* L, b5 b- X7 J/ z2 F) L方法二:使用 update.zip 卡刷# h3 ]8 O% X" n) q: s4 c
如果生成了 img.zip 或 update.zip,可以通过 Recovery 模式进行刷入,但这通常用于 OTA 更新测试。
3 g& h- x% c5 Q% Q3 n" e
) }4 V5 r b8 U总结对比
8 Y2 b) F4 f0 ^3 S* @. a3 f% Q% _表格& Y( c* a$ I9 Q
特性 aosp_cf_x86_64_phone (Cuttlefish) aosp_<device> (真机)9 N# X# q" {. g& @: {$ H
运行环境 Linux 主机上的虚拟机 (KVM) 物理 Android 手机" p; X$ a' \) }
架构 x86_64 ARM64 (绝大多数手机)5 o' G5 z; j& l6 G8 L
驱动 使用虚拟驱动 (VirtIO) 需要硬件专属闭源驱动# {* n" ~( g( d
用途 系统框架开发、CI/CD 测试 真实用户体验、硬件适配、性能测试
_+ _) q# V" m刷入方式 launch_cvd 启动虚拟机 fastboot flashall 刷入物理机
" c l% P; I9 R: Q1 a" L建议:如果你需要在真机上测试,请确认你的真机型号,查找其对应的 AOSP 设备代号,并下载相应的厂商驱动后进行编译。不要尝试将 cf (Cuttlefish) 系列的镜像刷入任何物理设备。
2 g7 S' R) p" [0 N Q) z/ H. |# t! B& T5 Y9 N
参考 |