作为一名长期从事Android系统开发的工程师,我深知直接获取和编译AOSP源码对于深入理解Android系统架构的重要性。本文将详细介绍从零开始下载、编译到烧录AOSP源码的完整流程,包含我在实际工作中积累的各种实用技巧和避坑指南。
AOSP(Android Open Source Project)是Google开源的Android操作系统基础代码库,包含了Android系统的核心框架、原生应用和硬件抽象层等关键组件。通过获取和编译AOSP源码,开发者可以:
本文将基于Android 14版本,以Pixel 5手机为目标设备,演示完整的源码获取、编译和烧录过程。无论你是想深入研究Android系统,还是需要为特定设备定制ROM,这篇文章都能提供实用的参考。
在开始下载AOSP源码前,需要确保开发环境满足以下要求:
提示:建议使用ext4文件系统,NTFS/FAT32等Windows文件系统有单文件大小限制,可能导致编译失败。
安装必要的依赖包:
bash复制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 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python3
Repo是Google开发的用于管理多个Git仓库的工具,专门为AOSP这类超大型项目设计。以下是配置步骤:
bash复制mkdir -p ~/bin
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
bash复制curl https://mirrors.ustc.edu.cn/aosp/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
bash复制repo version
bash复制sed -i 's/https:\/\/gerrit.googlesource.com\/git-repo/https:\/\/mirrors.ustc.edu.cn\/aosp\/git-repo/g' ~/bin/repo
由于AOSP源码体积庞大,直接通过repo sync下载可能耗时数天且容易中断。推荐使用国内镜像站提供的初始化包:
bash复制wget -c https://mirrors.ustc.edu.cn/aosp-monthly/aosp-latest.tar
注意:-c参数支持断点续传,网络不稳定时非常有用
bash复制tar xf aosp-latest.tar
cd aosp
bash复制repo sync -c -j8
参数说明:
- -c:只下载当前分支
- -j8:使用8个线程并行下载
如果需要特定版本的代码,可以使用传统方式:
bash复制repo init -u https://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-14.0.0_r13
bash复制repo sync -c -j8
提示:android-14.0.0_r13是Pixel 5对应的分支,其他设备需查询官方文档确定正确分支
下载完成后,AOSP源码主要包含以下关键目录:
code复制aosp/
├── abi/ # 应用二进制接口定义
├── art/ # Android运行时(ART)实现
├── bionic/ # C库实现
├── bootable/ # 启动加载相关代码
├── build/ # 构建系统核心
├── cts/ # 兼容性测试套件
├── dalvik/ # Dalvik虚拟机(旧版)
├── developers/ # 开发者资源
├── development/ # 开发工具和示例
├── device/ # 设备特定代码
├── external/ # 第三方开源项目
├── frameworks/ # 核心框架代码
├── hardware/ # 硬件抽象层
├── kernel/ # Linux内核
├── libcore/ # Java核心库
├── packages/ # 系统应用
├── prebuilts/ # 预编译工具链
├── sdk/ # 软件开发工具包
├── system/ # 底层系统组件
└── vendor/ # 厂商特定代码
理解这些目录结构有助于快速定位感兴趣的代码模块。
编译前需要配置正确的JDK版本和构建环境:
bash复制sudo apt-get install openjdk-17-jdk
bash复制source build/envsetup.sh
bash复制lunch
会显示可选设备列表,对于Pixel 5应选择aosp_redfin-userdebug
提示:userdebug版本包含root权限和调试工具,适合开发;user版本是正式发布版本
Pixel设备需要额外下载专有驱动:
bash复制adb shell getprop ro.build.fingerprint
code复制https://developers.google.com/android/drivers
bash复制tar zxvf google_devices-redfin-xxxx.tgz
./extract-google_devices-redfin.sh
使用以下命令启动编译:
bash复制make -j16
-j16表示使用16个线程并行编译,可根据CPU核心数调整
编译过程可能需要2-6小时,取决于硬件性能。成功后会输出:
code复制#### build completed successfully (02:35:46 (hh:mm:ss)) ####
生成的系统镜像位于:
code复制out/target/product/redfin/
├── android-info.txt
├── boot.img # 启动镜像
├── system.img # 系统分区
├── vendor.img # 厂商分区
└── ...
内存不足:
Java版本错误:
文件系统问题:
Python兼容性问题:
在烧录前需要解锁设备:
启用开发者选项:
进入fastboot模式:
bash复制adb reboot bootloader
bash复制fastboot flashing unlock
注意:这会清除设备所有数据
bash复制adb reboot bootloader
bash复制fastboot flashall -w
-w参数会清除用户数据分区
bash复制fastboot reboot
烧录完成后,设备将自动重启。验证方法:
bash复制adb shell getprop ro.build.display.id
bash复制adb shell uname -a
修改部分代码后,可以只重新编译变更部分:
bash复制make -j16
或编译特定模块:
bash复制make framework -j16
配置ccache可以显著加快后续编译速度:
bash复制sudo apt-get install ccache
bash复制export USE_CCACHE=1
export CCACHE_DIR=/path/to/ccache
ccache -M 50G
bash复制prebuilts/misc/linux-x86/ccache/ccache -M 50G
使用Android Studio浏览AOSP源码:
bash复制make idegen
development/tools/idegen/idegen.sh
在Android Studio中打开生成的android.ipr文件
配置SDK:
adb devices不显示设备:
fastboot命令无响应:
系统启动卡在logo:
make clobber对于团队开发,可以设置Jenkins自动编译:
bash复制sudo apt-get install jenkins
创建新任务,选择"自由风格项目"
配置源码管理为Git,指向AOSP镜像
添加构建步骤:
bash复制#!/bin/bash
source build/envsetup.sh
lunch aosp_redfin-userdebug
make -j16
设置定时构建或代码变更触发
添加构建后操作,归档生成的镜像文件
在实际项目中,我们还会添加静态代码分析、单元测试等环节,确保代码质量。