玩转Android Framework:编译AOSP

本系列将基于Android 14详细讲解Android Framework的系列知识。

首先如果想要了解AOSP的编译,可以参照Google AOSP官网的介绍:

source.android.com/docs/setup/...

硬件要求

官方文档上说我们至少需要16gb内存来编译源码以及250g的硬盘空间来检出源码,这里我实际编译Android 14的时候16gb内存是无法编译通过的,所以建议系统内存升级到32gb

这是我的硬件,实际编译过程大约在2到3个小时:

硬盘: 2T

CPU: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz

内存: 32gb

系统要求

如果想要编译Android 源码,那么我们就需要使用Ubuntu系统,具体的系统要求及配置步骤可以参考这里:

source.android.com/docs/setup/...

为了少踩坑,建议准备一台安装Ubuntu系统的电脑或者安装Windows Ubuntu双系统,尽量不使用虚拟机或者WSL来进行编译。

Ubuntu双系统安装,可以参考这里:

blog.csdn.net/Flag_ing/ar...

我安装的ubuntu版本是 18.04 lts,也可以选择安装22.04 lts或其它高于18.04的 lts版本。

在安装ubuntu系统过程中,swap建议设置为实际内存的1倍,比如如果是32gb内存那么swap也设置为32gb。

编译环境准备

当系统安装成功之后,首先要做的就是下载编译Android所需要的软件包:

bash 复制代码
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

下载源码

安装成功之后,就要开始下载源码,AOSP使用repo进行版本管理,这实际上是一个基于git的python脚本,关于repo的介绍可以看这里:

source.android.com/docs/setup/...

首先我们需要下载repo,这里推荐使用国内的清华镜像进行repo以及源码的下载:

mirrors.tuna.tsinghua.edu.cn/help/AOSP/

第一步 下载repo文件:

bash 复制代码
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

第二步 初始化工作目录:

bash 复制代码
mkdir Android14
cd Android14

第三步 初始化源码下载

这里我们需要指定镜像地址和分支,AOSP的分支可以在这里找到

android.googlesource.com/platform/ma...

由于我们是基于Android 14,所以在里面查找android 14的最新分支 android-14.0.0_r28:

bash 复制代码
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r28

第四步 下载源码

bash 复制代码
repo sync

Android源码的下载需要大约3到4个小时,这个时候只要耐心等待就好了,最后下载完成的目录大概是这个样子:

编译源码

当我们完成Android 源码的下载,下一步就可以开始进行编译了

第一步 编译环境初始化:

bash 复制代码
. build/envsetup.sh

第二步 选择编译目标

bash 复制代码
lunch

然后控制台会打印出现有的编译目标:

接下来输入 sdk_phone_x86_64,可以看到输出:

第三步 进行编译

bash 复制代码
make

然后等待就可以了,编译时间一般在2到3个小时,等待编译成功之后,会出现如下字样:

第四步 运行模拟器

然后输入以下命令,就可以直接看到我们编译过后的Android 14了:

bash 复制代码
emulator

编译问题汇总

运行repo命令提示python格式错误

这个时候需要检查一下系统默认的python文件是否为python3,如果不是,需要将系统默认的python修改为python3

blog.csdn.net/White_Idiot...

repo init 或者repo sync报错

这个时候遇到的绝大多数都是网络错误,可以检查网络状态重新repo init 或者repo sync

make报错 build failed

这个时候需要检查一下依赖包是否都安装上了,还有就是硬件要求是否达标,是否设置了系统swap

emulator报错 This user doesn't have permissions to use KVM (/dev/kvm)

这个时候运行一下以下命令就可以了:

bash 复制代码
sudo chown 你的用户名 -R /dev/kvm
相关推荐
云水一下14 小时前
Vue.js从零到精通系列(七):高级特性实战——Teleport、异步组件、自定义指令与TypeScript深度结合
前端·vue.js·typescript
qq43569470114 小时前
Vue05
前端·vue.js
qq_4221525714 小时前
PDF 解密工具怎么选?2026 年文档密码移除方案与注意事项
java·前端·pdf
YHHLAI14 小时前
前端工程化调用 AI 多模态生图模型:Qwen Image Demo 实战
前端·人工智能
To_OC14 小时前
我一直以为 Ajax 是个黑盒,直到我写了这 50 行代码
前端·后端·全栈
用户0595401744614 小时前
RAG 记忆层踩坑实录:用户偏好凭空消失,我排查了 4 小时,最后用 LangChain + Chroma 搭了套自动化回归测试
前端·css
程序猿阿伟14 小时前
《Chrome隔离机制的维度落地指南》
前端·chrome
用户0543243297014 小时前
AI 生成的代码怎么在前端安全预览 + 一键运行:sandbox iframe 实战 🔒
前端
ALianBlank14 小时前
一个 Unity 框架能做多少事?86 个模块 + 21 个小游戏平台
前端·后端·游戏开发
To_OC14 小时前
搞懂二叉树递归遍历,我居然是从爬楼梯开始的
前端·javascript·数据结构