3. 开发环境搭建:AOSP源码下载、编译环境配置、模拟器与真机调试准备

好,咱们正式开始动手了。

这一章,我带你把开发环境搭起来。说白了,就是让你的电脑能下载AOSP源码、能编译、能跑模拟器、能连真机。这一步搞不定,后面全是纸上谈兵。

我个人习惯先把环境分成三块:源码下载环境编译环境调试环境。这三块各自有坑,咱们一个一个踩过去。

3.1 硬件与操作系统要求

先说说硬件。AOSP编译是个吃资源的大户。我当年第一次编译,拿一台4GB内存的笔记本硬跑,结果编译到一半直接OOM,系统卡死。嗯,从那以后我再也不建议用低配机器搞这个。

项目 最低要求 推荐配置
CPU 4核 8核以上
内存 16GB 32GB或更高
磁盘 200GB空闲 500GB SSD
操作系统 Ubuntu 18.04 Ubuntu 20.04 / 22.04
注意:千万别用Windows直接搞AOSP编译。虽然WSL2能凑合,但我在项目中遇到过USB透传和磁盘性能的问题,折腾两天没搞定。老老实实装双系统或者用Linux虚拟机吧。

3.2 AOSP源码下载

源码下载,核心就两个工具:repogit。repo是Google专门为AOSP这种多仓库项目写的管理工具。

3.2.1 安装repo工具

# 创建bin目录
mkdir -p ~/bin
# 下载repo脚本
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
# 加执行权限
chmod a+x ~/bin/repo
# 添加到PATH
export PATH=~/bin:$PATH

这里有个坑。repo脚本默认会从Google的服务器下载,国内网络环境你懂的。我曾经在客户现场配环境,死活下不下来,最后换了清华的镜像才搞定。

小技巧:如果下载慢,可以设置REPO_URL环境变量指向国内镜像:
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

3.2.2 初始化并同步源码

# 创建工作目录
mkdir aosp
cd aosp

# 初始化仓库,指定分支
repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r30

# 同步源码(这一步最耗时)
repo sync -j4 -c

-j4 表示用4个线程并行下载。你机器核多可以调大,比如 -j8。但注意,网络带宽不够的话,线程太多反而容易失败。我一般设成CPU核心数的一半。

同步完大概长这样:

aosp/
├── art/
├── bionic/
├── bootable/
├── build/
├── dalvik/
├── development/
├── device/
├── external/
├── frameworks/
├── hardware/
├── kernel/
├── packages/
├── system/
├── vendor/
└── Makefile

3.3 编译环境配置

源码下好了,接下来配编译环境。AOSP编译依赖一堆工具链,缺一个就报错。我建议你一次性装全。

3.3.1 安装依赖包

sudo apt-get update
sudo apt-get install -y \
    git-core gnupg flex bison build-essential \
    zip curl zlib1g-dev gcc-multilib g++-multilib \
    libc6-dev-i386 libncurses5 lib32ncurses5-dev \
    x11proto-core-dev libx11-dev lib32z1-dev \
    libgl1-mesa-dev libxml2-utils xsltproc unzip

这是Ubuntu 20.04的依赖列表。如果你用22.04,有些包名可能变了。比如 libncurses5 改成了 libncurses5-dev。遇到报错别慌,缺什么装什么就行。

3.3.2 安装JDK

AOSP 13 需要 JDK 11 或更高版本。我个人习惯用OpenJDK:

sudo apt-get install openjdk-11-jdk

验证一下:

java -version
# 输出类似:openjdk version "11.0.18"

3.3.3 配置编译环境

每次编译前,需要先加载环境变量:

source build/envsetup.sh

然后选择编译目标:

lunch aosp_x86_64-eng

这里解释一下目标格式:设备名-编译类型。编译类型有三种:

类型 说明 适用场景
eng 工程版,带调试工具 开发调试
userdebug 用户调试版,有root权限 功能验证
user 用户版,无root 发布测试

我平时开发用 eng 最多,因为它自带adb root权限,调试方便。

3.4 编译AOSP

环境配好,开始编译。命令很简单:

make -j8

第一次编译时间很长。我实测过,8核16GB的机器,编译AOSP 13大概需要2-3小时。你可以趁这个时间喝杯咖啡,或者看看文档。

核心知识点:编译产物在 out/target/product/ 目录下。比如你编译的是 aosp_x86_64,那么镜像文件就在 out/target/product/generic_x86_64/ 里。

如果编译中途报错,别慌。常见错误有:

  • 磁盘空间不足:out目录会占用大量空间,确保有100GB以上空闲
  • 内存不足:减少 -j 参数,比如改成 -j4
  • 依赖缺失:看报错信息,缺什么装什么

3.5 模拟器调试

编译成功之后,启动模拟器:

emulator

如果提示找不到命令,先执行:

source build/envsetup.sh
lunch aosp_x86_64-eng
emulator

模拟器启动后,你可以用adb连接:

adb devices
# 应该能看到 emulator-5554 device

这里有个小细节。模拟器默认不带Google服务,所以Play商店什么的别想了。但咱们做系统开发,够用了。

3.6 真机调试准备

真机调试,核心就两步:打开开发者选项、配置adb。

3.6.1 开启开发者选项

  1. 进入「设置」→「关于手机」
  2. 连续点击「版本号」7次
  3. 返回设置主界面,就能看到「开发者选项」了

在开发者选项里,打开:

  • USB调试
  • OEM解锁(如果需要刷机)

3.6.2 配置adb

连接手机后,运行:

adb devices

如果看到 unauthorized,说明手机还没授权。在手机上确认允许USB调试即可。

如果看不到设备,可能是驱动问题。Linux下需要添加udev规则:

# 创建规则文件
sudo vim /etc/udev/rules.d/51-android.rules

# 添加内容(以Google Pixel为例)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"

# 重载规则
sudo udevadm control --reload-rules
sudo udevadm trigger

厂商ID列表:

厂商 idVendor
Google 18d1
Samsung 04e8
Xiaomi 2717
OnePlus 2a70

3.7 本章知识体系

我把这一章的核心逻辑画成了流程图,方便你理解整体脉络:

开发环境搭建核心流程 硬件与操作系统准备 AOSP源码下载(repo sync) 编译环境配置(依赖+JDK) 执行 make 编译 模拟器 / 真机调试 CPU ≥ 8核 内存 ≥ 16GB 磁盘 ≥ 200GB 使用repo工具 国内用镜像加速 安装依赖包 配置JDK 11+ make -jN 首次约2-3小时 emulator启动 adb连接真机

3.8 常见问题与避坑指南

我曾经遇到过:编译到99%报错,提示 ninja: build stopped: subcommand failed。查了半天,发现是磁盘空间不够。out目录占了180GB,而我的分区只有200GB。从那以后,我每次编译前都会用 df -h 看一眼磁盘。
小提示:如果你只想编译某个模块,比如修改了framework层的代码,可以用:
make framework -j8
这样只编译framework模块,速度快很多。全量编译只在第一次做就行。

好了,环境搭好了,下一章咱们开始真正动手——自定义飞行模式的逻辑实现。


公众号:蓝海资料掘金营,微信deep3321