玩转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
相关推荐
小小竹子几秒前
前端vue-实现富文本组件
前端·vue.js·富文本
小白小白从不日白9 分钟前
react hooks--useReducer
前端·javascript·react.js
下雪天的夏风21 分钟前
TS - tsconfig.json 和 tsconfig.node.json 的关系,如何在TS 中使用 JS 不报错
前端·javascript·typescript
diygwcom33 分钟前
electron-updater实现electron全量版本更新
前端·javascript·electron
Hello-Mr.Wang1 小时前
vue3中开发引导页的方法
开发语言·前端·javascript
程序员凡尘1 小时前
完美解决 Array 方法 (map/filter/reduce) 不按预期工作 的正确解决方法,亲测有效!!!
前端·javascript·vue.js
编程零零七5 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
(⊙o⊙)~哦7 小时前
JavaScript substring() 方法
前端
无心使然云中漫步7 小时前
GIS OGC之WMTS地图服务,通过Capabilities XML描述文档,获取matrixIds,origin,计算resolutions
前端·javascript
Bug缔造者7 小时前
Element-ui el-table 全局表格排序
前端·javascript·vue.js